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 + -
显示快捷键?