<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:flexlib="http://code.google.com/p/flexlib/" modalTransparency=".8" modalTransparencyColor="0x000000" creationComplete="addKeyboardListeners();" viewSourceURL="srcview/index.html"> <mx:Script> <![CDATA[ import flexlib.mdi.effects.effectsLib.MDIVistaEffects; import mx.managers.PopUpManager; import mx.core.UIComponent; import mx.core.Container; import com.dougmccune.containers.VistaFlowContainer; private var vistaFlow:VistaFlowContainer; private function addWindow():void { var win:MDIWindow = new MDIWindow(); win.width = 350; win.title = "Window " + String(mdiCanvas.windowManager.windowList.length + 1); mdiCanvas.windowManager.add(win); } private function showVistaFlow():void { var windows:Array = mdiCanvas.windowManager.getOpenWindowList(); var n:int = windows.length; var maxWidth:Number = 300; var maxHeight:Number = 300; if(vistaFlow) { vistaFlow.removeAllChildren(); } else { vistaFlow = new VistaFlowContainer(); vistaFlow.reflectionEnabled = true; vistaFlow.addEventListener(Event.CHANGE, handleVistaChange); } var selectedIndex:int=0; for(var i:int=0; i<n; i++) { var window:MDIWindow = windows[i]; var bitmap:Bitmap; var ratio:Number; if(window.width > maxWidth || window.height > maxHeight) { if(window.width > window.height) { ratio = maxWidth/window.width; } else { ratio = maxHeight/window.height; } } else { ratio = 1; } var container:Container = new Container(); var uiComp:UIComponent = new UIComponent(); if(window.hasFocus) { selectedIndex = i; } mdiCanvas.windowManager.bringToFront(window); window.validateNow(); var matrix:Matrix = new Matrix(); matrix.scale(ratio, ratio); var bmapData:BitmapData = new BitmapData(window.width*ratio, window.height*ratio, true, 0x00000000); bmapData.draw(window, matrix, null, null, null, true); bitmap = new Bitmap(bmapData, PixelSnapping.AUTO, true); uiComp.addChild(bitmap); container.addChild(uiComp); container.width = uiComp.width= window.width*ratio; container.height = uiComp.height = window.height*ratio; vistaFlow.addChild(container); } vistaFlow.selectedIndex = selectedIndex; vistaFlow.width = this.width; vistaFlow.height = this.height; PopUpManager.addPopUp(vistaFlow, this, true); } private function removeVistaFlow():void { var selectedIndex:int = vistaFlow.selectedIndex; mdiCanvas.windowManager.bringToFront(mdiCanvas.windowManager.getOpenWindowList()[selectedIndex]); vistaFlow.removeAllChildren(); PopUpManager.removePopUp(vistaFlow); } private function addKeyboardListeners():void { addEventListener(KeyboardEvent.KEY_DOWN, vistaKeyDownHandler); addEventListener(KeyboardEvent.KEY_UP, vistaKeyUpHandler); } private function handleVistaChange(event:Event):void { var index:int = vistaFlow.selectedIndex; mdiCanvas.windowManager.bringToFront(mdiCanvas.windowManager.getOpenWindowList()[index]); } private function vistaKeyDownHandler(event:KeyboardEvent):void { if(event.shiftKey && event.keyCode == Keyboard.ENTER) { if(vistaFlow && vistaFlow.isPopUp) { if(vistaFlow.selectedIndex < vistaFlow.numChildren - 1) { vistaFlow.selectedIndex++; } else { vistaFlow.selectedIndex = 0; } } else { showVistaFlow(); } } } private function vistaKeyUpHandler(event:KeyboardEvent):void { if(vistaFlow && vistaFlow.isPopUp && event.keyCode == Keyboard.SHIFT) { removeVistaFlow(); } } ]]> </mx:Script> <mx:Style source="WindowsXP_default.css" /> <mx:VBox id="vbox" width="100%" height="100%"> <mx:ApplicationControlBar dock="true" width="100%" height="50" verticalAlign="middle"> <mx:Button label="Add Window" click="addWindow()" /> <mx:VRule height="35" /> <mx:Button label="Cascade" click="mdiCanvas.windowManager.cascade()" /> <mx:Button label="Tile" click="mdiCanvas.windowManager.tile(false, 2)" /> <mx:Button label="Tile + Fill Space" click="mdiCanvas.windowManager.tile(true, 2)" /> </mx:ApplicationControlBar> <flexlib:MDICanvas id="mdiCanvas" effectsLib="{MDIVistaEffects}" horizontalScrollPolicy="off" verticalScrollPolicy="off" width="100%" height="100%"> <flexlib:MDIWindow title="Window 1 has a really really long title to show support for truncation" x="30" y="30" width="400" height="200" /> <flexlib:MDIWindow title="Window 2" x="450" y="30" width="250" height="300" /> </flexlib:MDICanvas> </mx:VBox> </mx:Application>