mdiwindow.as

来自「flex的一些小例子」· AS 代码 · 共 1,764 行 · 第 1/4 页

AS
1,764
字号
		 * Flag used to intelligently dispatch resize related events		 */		private var _resizing:Boolean;				/**		 * Invisible shape laid over titlebar to prevent funkiness from clicking in title textfield.		 * Making it public gives child components like controls container access to size of titleBar.		 */		public var titleBarOverlay:Canvas;				/**		 * @private		 * Flag used to intelligently dispatch drag related events		 */		private var _dragging:Boolean;				/**		 * @private	     * Mouse's x position when resize begins.	     */		private var dragStartMouseX:Number;				/**		 * @private	     * Mouse's y position when resize begins.	     */		private var dragStartMouseY:Number;				/**		 * @private	     * Maximum allowable x value for resize. Used to enforce minWidth.	     */		private var dragMaxX:Number;				/**		 * @private	     * Maximum allowable x value for resize. Used to enforce minHeight.	     */		private var dragMaxY:Number;				/**		 * @private	     * Amount the mouse's x position has changed during current resizing.	     */		private var dragAmountX:Number;				/**		 * @private	     * Amount the mouse's y position has changed during current resizing.	     */		private var dragAmountY:Number;				/**	     * Window's context menu.	     */		public var winContextMenu:ContextMenu = null;				/**		 * Reference to MDIManager instance this window is managed by, if any.	     */		public var windowManager:MDIManager;				/**		 * @private		 * Storage var to hold value originally assigned to styleName since it gets toggled per focus change.		 */		private var _windowStyleName:Object;				/**		 * @private		 * Storage var for hasFocus property.		 */		private var _hasFocus:Boolean;				/**		 * @private store the backgroundAlpha when minimized.	     */		private var backgroundAlphaRestore:Number = 1;				// assets for default buttons		[Embed(source="/flexlib/mdi/assets/img/minimizeButton.png")]		private static var DEFAULT_MINIMIZE_BUTTON:Class;				[Embed(source="/flexlib/mdi/assets/img/maximizeButton.png")]		private static var DEFAULT_MAXIMIZE_BUTTON:Class;				[Embed(source="/flexlib/mdi/assets/img/restoreButton.png")]		private static var DEFAULT_RESTORE_BUTTON:Class;				[Embed(source="/flexlib/mdi/assets/img/closeButton.png")]		private static var DEFAULT_CLOSE_BUTTON:Class;				[Embed(source="/flexlib/mdi/assets/img/resizeCursorH.gif")]		private static var DEFAULT_RESIZE_CURSOR_HORIZONTAL:Class;		private static var DEFAULT_RESIZE_CURSOR_HORIZONTAL_X_OFFSET:Number = -10;		private static var DEFAULT_RESIZE_CURSOR_HORIZONTAL_Y_OFFSET:Number = -10;				[Embed(source="/flexlib/mdi/assets/img/resizeCursorV.gif")]		private static var DEFAULT_RESIZE_CURSOR_VERTICAL:Class;		private static var DEFAULT_RESIZE_CURSOR_VERTICAL_X_OFFSET:Number = -10;		private static var DEFAULT_RESIZE_CURSOR_VERTICAL_Y_OFFSET:Number = -10;				[Embed(source="/flexlib/mdi/assets/img/resizeCursorTLBR.gif")]		private static var DEFAULT_RESIZE_CURSOR_TL_BR:Class;		private static var DEFAULT_RESIZE_CURSOR_TL_BR_X_OFFSET:Number = -10;		private static var DEFAULT_RESIZE_CURSOR_TL_BR_Y_OFFSET:Number = -10;				[Embed(source="/flexlib/mdi/assets/img/resizeCursorTRBL.gif")]		private static var DEFAULT_RESIZE_CURSOR_TR_BL:Class;		private static var DEFAULT_RESIZE_CURSOR_TR_BL_X_OFFSET:Number = -10;		private static var DEFAULT_RESIZE_CURSOR_TR_BL_Y_OFFSET:Number = -10;				private static var classConstructed:Boolean = classConstruct();				/**		 * Define and prepare default styles.		 */		private static function classConstruct():Boolean		{			//------------------------		    //  type selector		    //------------------------			var selector:CSSStyleDeclaration = StyleManager.getStyleDeclaration("MDIWindow");			if(!selector)			{				selector = new CSSStyleDeclaration();			}			// these are default names for secondary styles. these can be set in CSS and will affect			// all windows that don't have an override for these styles.			selector.defaultFactory = function():void			{				this.styleNameFocus = "mdiWindowFocus";				this.styleNameNoFocus = "mdiWindowNoFocus";								this.titleStyleName = "mdiWindowTitleStyle";								this.minimizeBtnStyleName = "mdiWindowMinimizeBtn";				this.maximizeBtnStyleName = "mdiWindowMaximizeBtn";				this.restoreBtnStyleName = "mdiWindowRestoreBtn";								this.closeBtnStyleName = "mdiWindowCloseBtn";								this.windowControlsClass = MDIWindowControlsContainer;								this.resizeCursorHorizontalSkin = DEFAULT_RESIZE_CURSOR_HORIZONTAL;				this.resizeCursorHorizontalXOffset = DEFAULT_RESIZE_CURSOR_HORIZONTAL_X_OFFSET;				this.resizeCursorHorizontalYOffset = DEFAULT_RESIZE_CURSOR_HORIZONTAL_Y_OFFSET;								this.resizeCursorVerticalSkin = DEFAULT_RESIZE_CURSOR_VERTICAL;				this.resizeCursorVerticalXOffset = DEFAULT_RESIZE_CURSOR_VERTICAL_X_OFFSET;				this.resizeCursorVerticalYOffset = DEFAULT_RESIZE_CURSOR_VERTICAL_Y_OFFSET;								this.resizeCursorTopLeftBottomRightSkin = DEFAULT_RESIZE_CURSOR_TL_BR;				this.resizeCursorTopLeftBottomRightXOffset = DEFAULT_RESIZE_CURSOR_TL_BR_X_OFFSET;				this.resizeCursorTopLeftBottomRightYOffset = DEFAULT_RESIZE_CURSOR_TL_BR_Y_OFFSET;								this.resizeCursorTopRightBottomLeftSkin = DEFAULT_RESIZE_CURSOR_TR_BL;				this.resizeCursorTopRightBottomLeftXOffset = DEFAULT_RESIZE_CURSOR_TR_BL_X_OFFSET;				this.resizeCursorTopRightBottomLeftYOffset = DEFAULT_RESIZE_CURSOR_TR_BL_Y_OFFSET;			}						//------------------------		    //  focus style		    //------------------------			var styleNameFocus:String = selector.getStyle("styleNameFocus");			var winFocusSelector:CSSStyleDeclaration = StyleManager.getStyleDeclaration("." + styleNameFocus);			if(!winFocusSelector)			{				winFocusSelector = new CSSStyleDeclaration();			}			winFocusSelector.defaultFactory = function():void			{				this.headerHeight = 26;				this.roundedBottomCorners = true;				this.borderColor = 0xCCCCCC;				this.borderThicknessTop = 0;				this.borderThicknessRight = 3;				this.borderThicknessBottom = 3;				this.borderThicknessLeft = 3;				this.borderAlpha = 1;				this.backgroundAlpha = 1;			}			StyleManager.setStyleDeclaration("." + styleNameFocus, winFocusSelector, false);						//------------------------		    //  no focus style		    //------------------------			var styleNameNoFocus:String = selector.getStyle("styleNameNoFocus");			var winNoFocusSelector:CSSStyleDeclaration = StyleManager.getStyleDeclaration("." + styleNameNoFocus);			if(!winNoFocusSelector)			{				winNoFocusSelector = new CSSStyleDeclaration();			}			winNoFocusSelector.defaultFactory = function():void			{				this.headerHeight = 26;				this.roundedBottomCorners = true;				this.borderColor = 0xCCCCCC;				this.borderThicknessTop = 0;				this.borderThicknessRight = 3;				this.borderThicknessBottom = 3;				this.borderThicknessLeft = 3;				this.borderAlpha = .5;				this.backgroundAlpha = .5;			}								StyleManager.setStyleDeclaration("." + styleNameNoFocus, winNoFocusSelector, false);						//------------------------		    //  title style		    //------------------------			var titleStyleName:String = selector.getStyle("titleStyleName");			var winTitleSelector:CSSStyleDeclaration = StyleManager.getStyleDeclaration("." + titleStyleName);			if(!winTitleSelector)			{				winTitleSelector = new CSSStyleDeclaration();			}			winTitleSelector.defaultFactory = function():void			{				this.fontFamily = "Arial";				this.fontSize = 10;				this.fontWeight = "bold";				this.color = 0x000000;			}			StyleManager.setStyleDeclaration("." + titleStyleName, winTitleSelector, false);						//------------------------		    //  minimize button		    //------------------------			var minimizeBtnStyleName:String = selector.getStyle("minimizeBtnStyleName");			var minimizeBtnSelector:CSSStyleDeclaration = StyleManager.getStyleDeclaration("." + minimizeBtnStyleName);			if(!minimizeBtnSelector)			{				minimizeBtnSelector = new CSSStyleDeclaration();			}			minimizeBtnSelector.defaultFactory = function():void			{				this.upSkin = DEFAULT_MINIMIZE_BUTTON;				this.overSkin = DEFAULT_MINIMIZE_BUTTON;				this.downSkin = DEFAULT_MINIMIZE_BUTTON;				this.disabledSkin = DEFAULT_MINIMIZE_BUTTON;			}								StyleManager.setStyleDeclaration("." + minimizeBtnStyleName, minimizeBtnSelector, false);						//------------------------		    //  maximize button		    //------------------------			var maximizeBtnStyleName:String = selector.getStyle("maximizeBtnStyleName");			var maximizeBtnSelector:CSSStyleDeclaration = StyleManager.getStyleDeclaration("." + maximizeBtnStyleName);			if(!maximizeBtnSelector)			{				maximizeBtnSelector = new CSSStyleDeclaration();			}			maximizeBtnSelector.defaultFactory = function():void			{				this.upSkin = DEFAULT_MAXIMIZE_BUTTON;				this.overSkin = DEFAULT_MAXIMIZE_BUTTON;				this.downSkin = DEFAULT_MAXIMIZE_BUTTON;				this.disabledSkin = DEFAULT_MAXIMIZE_BUTTON;			}								StyleManager.setStyleDeclaration("." + maximizeBtnStyleName, maximizeBtnSelector, false);						//------------------------		    //  restore button		    //------------------------			var restoreBtnStyleName:String = selector.getStyle("restoreBtnStyleName");			var restoreBtnSelector:CSSStyleDeclaration = StyleManager.getStyleDeclaration("." + restoreBtnStyleName);			if(!restoreBtnSelector)			{				restoreBtnSelector = new CSSStyleDeclaration();			}			restoreBtnSelector.defaultFactory = function():void			{				this.upSkin = DEFAULT_RESTORE_BUTTON;				this.overSkin = DEFAULT_RESTORE_BUTTON;				this.downSkin = DEFAULT_RESTORE_BUTTON;				this.disabledSkin = DEFAULT_RESTORE_BUTTON;			}								StyleManager.setStyleDeclaration("." + restoreBtnStyleName, restoreBtnSelector, false);						//------------------------		    //  close button		    //------------------------			var closeBtnStyleName:String = selector.getStyle("closeBtnStyleName");			var closeBtnSelector:CSSStyleDeclaration = StyleManager.getStyleDeclaration("." + closeBtnStyleName);			if(!closeBtnSelector)			{				closeBtnSelector = new CSSStyleDeclaration();			}			closeBtnSelector.defaultFactory = function():void			{				this.upSkin = DEFAULT_CLOSE_BUTTON;				this.overSkin = DEFAULT_CLOSE_BUTTON;				this.downSkin = DEFAULT_CLOSE_BUTTON;				this.disabledSkin = DEFAULT_CLOSE_BUTTON;			}			StyleManager.setStyleDeclaration("." + closeBtnStyleName, closeBtnSelector, false);						// apply it all			StyleManager.setStyleDeclaration("MDIWindow", selector, false);						return true;		}				/**		 * Constructor	     */		public function MDIWindow()		{			super();			minWidth = minHeight = width = height = 200;			windowState = MDIWindowState.NORMAL;			doubleClickEnabled = true;						windowControls = new MDIWindowControlsContainer();			updateContextMenu();		}				public function get windowStyleName():Object		{			return _windowStyleName;		}				public function set windowStyleName(value:Object):void		{			if(_windowStyleName === value)				return;						_windowStyleName = value;			updateStyles();		}				/**		 * Create resize handles and window controls.		 */		override protected function createChildren():void		{			super.createChildren();						if(!titleBarOverlay)			{				titleBarOverlay = new Canvas();				titleBarOverlay.width = this.width;				titleBarOverlay.height = this.titleBar.height;				titleBarOverlay.alpha = 0;				titleBarOverlay.setStyle("backgroundColor", 0x000000);				rawChildren.addChild(titleBarOverlay);			}						// edges			if(!resizeHandleTop)			{				resizeHandleTop = new Button();				resizeHandleTop.x = cornerHandleSize * .5;				resizeHandleTop.y = -(edgeHandleSize * .5);				resizeHandleTop.height = edgeHandleSize;				resizeHandleTop.alpha = 0;				resizeHandleTop.focusEnabled = false;				rawChildren.addChild(resizeHandleTop);			}						if(!resizeHandleRight)			{				resizeHandleRight = new Button();				resizeHandleRight.y = cornerHandleSize * .5;				resizeHandleRight.width = edgeHandleSize;				resizeHandleRight.alpha = 0;				resizeHandleRight.focusEnabled = false;				rawChildren.addChild(resizeHandleRight);			}						if(!resizeHandleBottom)			{				resizeHandleBottom = new Button();				resizeHandleBottom.x = cornerHandleSize * .5;				resizeHandleBottom.height = edgeHandleSize;				resizeHandleBottom.alpha = 0;				resizeHandleBottom.focusEnabled = false;				rawChildren.addChild(resizeHandleBottom);			}						if(!resizeHandleLeft)			{				resizeHandleLeft = new Button();				resizeHandleLeft.x = -(edgeHandleSize * .5);				resizeHandleLeft.y = cornerHandleSize * .5;				resizeHandleLeft.width = edgeHandleSize;				resizeHandleLeft.alpha = 0;				resizeHandleLeft.focusEnabled = false;				rawChildren.addChild(resizeHandleLeft);			}						// corners			if(!resizeHandleTL)			{				resizeHandleTL = new Button();				resizeHandleTL.x = resizeHandleTL.y = -(cornerHandleSize * .3);				resizeHandleTL.width = resizeHandleTL.height = cornerHandleSize;				resizeHandleTL.alpha = 0;				resizeHandleTL.focusEnabled = false;				rawChildren.addChild(resizeHandleTL);			}						if(!resizeHandleTR)			{				resizeHandleTR = new Button();				resizeHandleTR.width = resizeHandleTR.height = cornerHandleSize;				resizeHandleTR.alpha = 0;				resizeHandleTR.focusEnabled = false;				rawChildren.addChild(resizeHandleTR);			}						if(!resizeHandleBR)			{				resizeHandleBR = new Button();				resizeHandleBR.width = resizeHandleBR.height = cornerHandleSize;				resizeHandleBR.alpha = 0;				resizeHandleBR.focusEnabled = false;				rawChildren.addChild(resizeHandleBR);			}						if(!resizeHandleBL)			{				resizeHandleBL = new Button();				resizeHandleBL.width = resizeHandleBL.height = cornerHandleSize;				resizeHandleBL.alpha = 0;				resizeHandleBL.focusEnabled = false;				rawChildren.addChild(resizeHandleBL);			}						// bring windowControls to top as they are created in constructor			rawChildren.setChildIndex(DisplayObject(windowControls), rawChildren.numChildren - 1);						addListeners();		}				/**		 * Position and size resize handles and window controls.		 */		override protected function updateDisplayList(w:Number, h:Number):void		{			super.updateDisplayList(w, h);			

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?