X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/7a654f8d43fdb43d78b63d90528bed6e86b608cc..6746dc89c47ed01b165cc1152533605f97eb8e8d:/docs/source/Window.html diff --git a/docs/source/Window.html b/docs/source/Window.html index c0fb7c83..8cb9a2ea 100644 --- a/docs/source/Window.html +++ b/docs/source/Window.html @@ -1,5 +1,22 @@ -Sencha Documentation Project
/**
- * @class Ext.window.Window
+
+
+
+  
+  The source code
+  
+  
+  
+  
+
+
+  
/**
+ * @class Ext.window.Window
  * @extends Ext.panel.Panel
  * <p>A specialized panel intended for use as an application window.  Windows are floated, {@link #resizable}, and
  * {@link #draggable} by default.  Windows can be {@link #maximizable maximized} to fill the viewport,
@@ -26,9 +43,6 @@ Ext.create('Ext.window.Window', {
     }
 }).show();
 </pre></code>
- * @constructor
- * @param {Object} config The config object
- * @xtype window
  */
 Ext.define('Ext.window.Window', {
     extend: 'Ext.panel.Panel',
@@ -39,26 +53,26 @@ Ext.define('Ext.window.Window', {
 
     alias: 'widget.window',
 
-    /**
+    /**
      * @cfg {Number} x
      * The X position of the left edge of the window on initial showing. Defaults to centering the Window within
      * the width of the Window's container {@link Ext.core.Element Element) (The Element that the Window is rendered to).
      */
-    /**
+    /**
      * @cfg {Number} y
      * The Y position of the top edge of the window on initial showing. Defaults to centering the Window within
      * the height of the Window's container {@link Ext.core.Element Element) (The Element that the Window is rendered to).
      */
-    /**
+    /**
      * @cfg {Boolean} modal
      * True to make the window modal and mask everything behind it when displayed, false to display it without
      * restricting access to other UI elements (defaults to false).
      */
-    /**
+    /**
      * @cfg {String/Element} animateTarget
      * Id or element from which the window should animate while opening (defaults to null with no animation).
      */
-    /**
+    /**
      * @cfg {String/Number/Component} defaultFocus
      * <p>Specifies a Component to receive focus when this Window is focused.</p>
      * <p>This may be one of:</p><div class="mdetail-params"><ul>
@@ -67,31 +81,31 @@ Ext.define('Ext.window.Window', {
      * <li>A Component.</li>
      * </ul></div>
      */
-    /**
+    /**
      * @cfg {Function} onEsc
      * Allows override of the built-in processing for the escape key. Default action
      * is to close the Window (performing whatever action is specified in {@link #closeAction}.
      * To prevent the Window closing when the escape key is pressed, specify this as
      * Ext.emptyFn (See {@link Ext#emptyFn Ext.emptyFn}).
      */
-    /**
+    /**
      * @cfg {Boolean} collapsed
      * True to render the window collapsed, false to render it expanded (defaults to false). Note that if
      * {@link #expandOnShow} is true (the default) it will override the <code>collapsed</code> config and the window
      * will always be expanded when shown.
      */
-    /**
+    /**
      * @cfg {Boolean} maximized
      * True to initially display the window in a maximized state. (Defaults to false).
      */
 
-    /**
+    /**
     * @cfg {String} baseCls
     * The base CSS class to apply to this panel's element (defaults to 'x-window').
     */
     baseCls: Ext.baseCSSPrefix + 'window',
 
-    /**
+    /**
      * @cfg {Mixed} resizable
      * <p>Specify as <code>true</code> to allow user resizing at each edge and corner of the window, false to disable
      * resizing (defaults to true).</p>
@@ -99,7 +113,7 @@ Ext.define('Ext.window.Window', {
      */
     resizable: true,
 
-    /**
+    /**
      * @cfg {Boolean} draggable
      * <p>True to allow the window to be dragged by the header bar, false to disable dragging (defaults to true).  Note
      * that by default the window will be centered in the viewport, so if dragging is disabled the window may need
@@ -107,7 +121,7 @@ Ext.define('Ext.window.Window', {
      */
     draggable: true,
 
-    /**
+    /**
      * @cfg {Boolean} constrain
      * True to constrain the window within its containing element, false to allow it to fall outside of its
      * containing element. By default the window will be rendered to document.body.  To render and constrain the
@@ -116,7 +130,7 @@ Ext.define('Ext.window.Window', {
      */
     constrain: false,
 
-    /**
+    /**
      * @cfg {Boolean} constrainHeader
      * True to constrain the window header within its containing element (allowing the window body to fall outside
      * of its containing element) or false to allow the header to fall outside its containing element (defaults to
@@ -124,7 +138,7 @@ Ext.define('Ext.window.Window', {
      */
     constrainHeader: false,
 
-    /**
+    /**
      * @cfg {Boolean} plain
      * True to render the window body with a transparent background so that it will blend into the framing
      * elements, false to add a lighter background color to visually highlight the body element and separate it
@@ -132,7 +146,7 @@ Ext.define('Ext.window.Window', {
      */
     plain: false,
 
-    /**
+    /**
      * @cfg {Boolean} minimizable
      * True to display the 'minimize' tool button and allow the user to minimize the window, false to hide the button
      * and disallow minimizing the window (defaults to false).  Note that this button provides no implementation --
@@ -141,7 +155,7 @@ Ext.define('Ext.window.Window', {
      */
     minimizable: false,
 
-    /**
+    /**
      * @cfg {Boolean} maximizable
      * True to display the 'maximize' tool button and allow the user to maximize the window, false to hide the button
      * and disallow maximizing the window (defaults to false).  Note that when a window is maximized, the tool button
@@ -156,7 +170,7 @@ Ext.define('Ext.window.Window', {
     // inherit docs
     minWidth: 200,
 
-    /**
+    /**
      * @cfg {Boolean} expandOnShow
      * True to always expand the window when it is displayed, false to keep it in its current state (which may be
      * {@link #collapsed}) when displayed (defaults to true).
@@ -166,7 +180,7 @@ Ext.define('Ext.window.Window', {
     // inherited docs, same default
     collapsible: false,
 
-    /**
+    /**
      * @cfg {Boolean} closable
      * <p>True to display the 'close' tool button and allow the user to close the window, false to
      * hide the button and disallow closing the window (defaults to <code>true</code>).</p>
@@ -179,7 +193,7 @@ Ext.define('Ext.window.Window', {
      */
     closable: true,
 
-    /**
+    /**
      * @cfg {Boolean} hidden
      * Render this Window hidden (default is <code>true</code>). If <code>true</code>, the
      * {@link #hide} method will be called internally.
@@ -192,7 +206,7 @@ Ext.define('Ext.window.Window', {
     // Inherit docs from Component. Windows hide using visibility.
     hideMode: 'visibility',
 
-    /** @cfg {Boolean} floating @hide Windows are always floating*/
+    /** @cfg {Boolean} floating @hide Windows are always floating*/
     floating: true,
 
     ariaRole: 'alertdialog',
@@ -208,17 +222,17 @@ Ext.define('Ext.window.Window', {
         var me = this;
         me.callParent();
         me.addEvents(
-            /**
+            /**
              * @event activate
              * Fires after the window has been visually activated via {@link #setActive}.
              * @param {Ext.window.Window} this
              */
-            /**
+            /**
              * @event deactivate
              * Fires after the window has been visually deactivated via {@link #setActive}.
              * @param {Ext.window.Window} this
              */
-            /**
+            /**
              * @event resize
              * Fires after the window has been resized.
              * @param {Ext.window.Window} this
@@ -226,19 +240,19 @@ Ext.define('Ext.window.Window', {
              * @param {Number} height The window's new height
              */
             'resize',
-            /**
+            /**
              * @event maximize
              * Fires after the window has been maximized.
              * @param {Ext.window.Window} this
              */
             'maximize',
-            /**
+            /**
              * @event minimize
              * Fires after the window has been minimized.
              * @param {Ext.window.Window} this
              */
             'minimize',
-            /**
+            /**
              * @event restore
              * Fires after the window has been restored to its original size after being maximized.
              * @param {Ext.window.Window} this
@@ -353,11 +367,19 @@ Ext.define('Ext.window.Window', {
         if (me.closable) {
             keyMap = me.getKeyMap();
             keyMap.on(27, me.onEsc, me);
-            keyMap.disable();
+
+            //if (hidden) { ? would be consistent w/before/afterShow...
+                keyMap.disable();
+            //}
+        }
+
+        if (!hidden) {
+            me.syncMonitorWindowResize();
+            me.doConstrain();
         }
     },
 
-    /**
+    /**
      * @private
      * @override
      * Override Component.initDraggable.
@@ -370,33 +392,40 @@ Ext.define('Ext.window.Window', {
         if (!me.header) {
             me.updateHeader(true);
         }
+        
+        /*
+         * Check the header here again. If for whatever reason it wasn't created in
+         * updateHeader (preventHeader) then we'll just ignore the rest since the
+         * header acts as the drag handle.
+         */
+        if (me.header) {
+            ddConfig = Ext.applyIf({
+                el: me.el,
+                delegate: '#' + me.header.id
+            }, me.draggable);
+
+            // Add extra configs if Window is specified to be constrained
+            if (me.constrain || me.constrainHeader) {
+                ddConfig.constrain = me.constrain;
+                ddConfig.constrainDelegate = me.constrainHeader;
+                ddConfig.constrainTo = me.constrainTo || me.container;
+            }
 
-        ddConfig = Ext.applyIf({
-            el: me.el,
-            delegate: '#' + me.header.id
-        }, me.draggable);
-
-        // Add extra configs if Window is specified to be constrained
-        if (me.constrain || me.constrainHeader) {
-            ddConfig.constrain = me.constrain;
-            ddConfig.constrainDelegate = me.constrainHeader;
-            ddConfig.constrainTo = me.constrainTo || me.container;
+            /**
+             * <p>If this Window is configured {@link #draggable}, this property will contain
+             * an instance of {@link Ext.util.ComponentDragger} (A subclass of {@link Ext.dd.DragTracker DragTracker})
+             * which handles dragging the Window's DOM Element, and constraining according to the {@link #constrain}
+             * and {@link #constrainHeader} .</p>
+             * <p>This has implementations of <code>onBeforeStart</code>, <code>onDrag</code> and <code>onEnd</code>
+             * which perform the dragging action. If extra logic is needed at these points, use
+             * {@link Ext.Function#createInterceptor createInterceptor} or {@link Ext.Function#createSequence createSequence} to
+             * augment the existing implementations.</p>
+             * @type Ext.util.ComponentDragger
+             * @property dd
+             */
+            me.dd = Ext.create('Ext.util.ComponentDragger', this, ddConfig);
+            me.relayEvents(me.dd, ['dragstart', 'drag', 'dragend']);
         }
-
-        /**
-         * <p>If this Window is configured {@link #draggable}, this property will contain
-         * an instance of {@link Ext.util.ComponentDragger} (A subclass of {@link Ext.dd.DragTracker DragTracker})
-         * which handles dragging the Window's DOM Element, and constraining according to the {@link #constrain}
-         * and {@link #constrainHeader} .</p>
-         * <p>This has implementations of <code>onBeforeStart</code>, <code>onDrag</code> and <code>onEnd</code>
-         * which perform the dragging action. If extra logic is needed at these points, use
-         * {@link Ext.Function#createInterceptor createInterceptor} or {@link Ext.Function#createSequence createSequence} to
-         * augment the existing implementations.</p>
-         * @type Ext.util.ComponentDragger
-         * @property dd
-         */
-        me.dd = Ext.create('Ext.util.ComponentDragger', this, ddConfig);
-        me.relayEvents(me.dd, ['dragstart', 'drag', 'dragend']);
     },
 
     // private
@@ -418,7 +447,7 @@ Ext.define('Ext.window.Window', {
         me.callParent();
     },
 
-    /**
+    /**
      * @private
      * @override
      * Contribute class-specific tools to the header.
@@ -449,7 +478,7 @@ Ext.define('Ext.window.Window', {
         }
     },
 
-    /**
+    /**
      * Gets the configured default focus item.  If a {@link #defaultFocus} is set, it will receive focus, otherwise the
      * Container itself will receive focus.
      */
@@ -485,8 +514,17 @@ Ext.define('Ext.window.Window', {
     // private
     afterShow: function(animateTarget) {
         var me = this,
-            size;
-
+            animating = animateTarget || me.animateTarget;
+
+        
+        if (animating) {
+            /*
+             * If we're animating, constrain the positioning before calling the
+             * superclass, otherwise we'll be animating to the unconstrained
+             * window position.
+             */
+            me.doConstrain();
+        }
         // Perform superclass's afterShow tasks
         // Which might include animating a proxy from an animTarget
         me.callParent(arguments);
@@ -495,10 +533,11 @@ Ext.define('Ext.window.Window', {
             me.fitContainer();
         }
 
-        if (me.monitorResize || me.constrain || me.constrainHeader) {
-            Ext.EventManager.onWindowResize(me.onWindowResize, me);
+        me.syncMonitorWindowResize();
+        if (!animating) {
+            me.doConstrain();
         }
-        me.doConstrain();
+
         if (me.keyMap) {
             me.keyMap.enable();
         }
@@ -523,9 +562,7 @@ Ext.define('Ext.window.Window', {
         var me = this;
 
         // No longer subscribe to resizing now that we're hidden
-        if (me.monitorResize || me.constrain || me.constrainHeader) {
-            Ext.EventManager.removeResizeListener(me.onWindowResize, me);
-        }
+        me.syncMonitorWindowResize();
 
         // Turn off keyboard handling once window is hidden
         if (me.keyMap) {
@@ -544,7 +581,7 @@ Ext.define('Ext.window.Window', {
         this.doConstrain();
     },
 
-    /**
+    /**
      * Placeholder method for minimizing the window.  By default, this method simply fires the {@link #minimize} event
      * since the behavior of minimizing a window is application-specific.  To implement custom minimize behavior,
      * either the minimize event can be handled or this method can be overridden.
@@ -582,7 +619,7 @@ Ext.define('Ext.window.Window', {
         me.callParent(arguments);
     },
 
-    /**
+    /**
      * Fits the window within its current container and automatically replaces
      * the {@link #maximizable 'maximize' tool button} with the 'restore' tool button.
      * Also see {@link #toggleMaximize}.
@@ -613,6 +650,7 @@ Ext.define('Ext.window.Window', {
             me.el.addCls(Ext.baseCSSPrefix + 'window-maximized');
             me.container.addCls(Ext.baseCSSPrefix + 'window-maximized-ct');
 
+            me.syncMonitorWindowResize();
             me.setPosition(0, 0);
             me.fitContainer();
             me.fireEvent('maximize', me);
@@ -620,7 +658,7 @@ Ext.define('Ext.window.Window', {
         return me;
     },
 
-    /**
+    /**
      * Restores a {@link #maximizable maximized}  window back to its original
      * size and position prior to being maximized and also replaces
      * the 'restore' tool button with the 'maximize' tool button.
@@ -665,13 +703,41 @@ Ext.define('Ext.window.Window', {
 
             me.container.removeCls(Ext.baseCSSPrefix + 'window-maximized-ct');
 
+            me.syncMonitorWindowResize();
             me.doConstrain();
             me.fireEvent('restore', me);
         }
         return me;
     },
 
-    /**
+    /**
+     * Synchronizes the presence of our listener for window resize events. This method
+     * should be called whenever this status might change.
+     * @private
+     */
+    syncMonitorWindowResize: function () {
+        var me = this,
+            currentlyMonitoring = me._monitoringResize,
+            // all the states where we should be listening to window resize:
+            yes = me.monitorResize || me.constrain || me.constrainHeader || me.maximized,
+            // all the states where we veto this:
+            veto = me.hidden || me.destroying || me.isDestroyed;
+
+        if (yes && !veto) {
+            // we should be listening...
+            if (!currentlyMonitoring) {
+                // but we aren't, so set it up
+                Ext.EventManager.onWindowResize(me.onWindowResize, me);
+                me._monitoringResize = true;
+            }
+        } else if (currentlyMonitoring) {
+            // we should not be listening, but we are, so tear it down
+            Ext.EventManager.removeResizeListener(me.onWindowResize, me);
+            me._monitoringResize = false;
+        }
+    },
+
+    /**
      * A shortcut method for toggling between {@link #maximize} and {@link #restore} based on the current maximized
      * state of the window.
      * @return {Ext.window.Window} this
@@ -680,9 +746,11 @@ Ext.define('Ext.window.Window', {
         return this[this.maximized ? 'restore': 'maximize']();
     }
 
-    /**
+    /**
      * @cfg {Boolean} autoWidth @hide
      * Absolute positioned element and therefore cannot support autoWidth.
      * A width is a required configuration.
      **/
-});
\ No newline at end of file +});
+ +