⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subordinatewindow.as

📁 flex 实现的一个showcase 喜欢flex的朋友可以
💻 AS
字号:
package com.teknision.flex.air.window
{
	
	import com.teknision.flex.air.window.events.*;

	import flash.display.DisplayObject;
	import flash.display.Loader;
	import flash.display.NativeWindow;
	import flash.display.NativeWindowInitOptions;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.geom.Point;
	import flash.net.URLRequest;
	import flash.system.ApplicationDomain;
	import flash.system.LoaderContext;
	
	import mx.containers.Canvas;
	import mx.core.Application;
	import mx.core.UIComponent;
	import mx.core.WindowedApplication;
	import mx.events.FlexEvent;
	
	
	public class SubordinateWindow extends EventDispatcher{
		
		
		public static const WINDOWSWFREADY:String="windowswfready";
		
		public var window:NativeWindow;
		public var swfloader:DisplayObject;
		public var options:SubordinateWindowOptions;
		public var newWin:NativeWindow;
		
		private var __supresscloseevent:Boolean=false;
		// private var __comgateway:EventGatewayMultiWay;
		
		private var __isopen:Boolean=false;
		
		
		
		public function SubordinateWindow(i_options:SubordinateWindowOptions){
			// this.closeCOMGateway();
			this.options=i_options;
		}
		
		
		public function launch():void{
			var n_options:NativeWindowInitOptions = new NativeWindowInitOptions();
			n_options.systemChrome = this.options.systemChrome;
			n_options.transparent = false;
			n_options.resizable=false;
			n_options.maximizable=false;
			n_options.minimizable=false;
			
			
			newWin = new NativeWindow(n_options);
			
			var u_size:Point=WindowSizeConverter.sizeForOS(this.options.size);
			
			newWin.minSize=u_size;
			newWin.maxSize=u_size;
			newWin.width=u_size.x;
			newWin.height=u_size.y;
			newWin.stage.align="TL";
			newWin.stage.scaleMode="noScale";
			newWin.title=this.options.title;
			newWin.addEventListener(Event.CLOSE,handleNativeWindowClose);
			this.window=newWin;
			
			
			var useloader:Boolean=true;
			
			
			
			if(this.options.windowclass!=null){
				useloader=false;
			}
			
			
			if(useloader){
				var windowpanel:Loader=new Loader();

				var dom:ApplicationDomain
				if(this.options.childofappdomain){
					dom=new ApplicationDomain(ApplicationDomain.currentDomain);
				}else{
					dom=new ApplicationDomain();
				}
				var loadercontext:LoaderContext=new LoaderContext(false,dom);
				
				newWin.stage.addChild(windowpanel);
				this.swfloader=windowpanel;
				
				windowpanel.addEventListener(SubordinateWindowEvent.CLOSE,handleSubordinateWindowEvent);
				windowpanel.addEventListener(SubordinateWindowEvent.APP,handleSubordinateWindowEvent);
				windowpanel.addEventListener(SubordinateWindowEvent.MANUAL,handleSubordinateWindowEvent);
				windowpanel.addEventListener(SubordinateWindow.WINDOWSWFREADY,windowSWFReady);
				
				windowpanel.contentLoaderInfo.addEventListener(Event.COMPLETE,handlePanelLoadComplete);
				windowpanel.load(new URLRequest(this.options.windowswf),loadercontext);
			
			}else{
				var windowcontainer:Canvas=new Canvas();
	
				var app:WindowedApplication = WindowedApplication(Application.application);
				app.addChild(windowcontainer);

				var wininstance:DisplayObject = new this.options.windowclass();
				wininstance.addEventListener(SubordinateWindowEvent.CLOSE,handleSubordinateWindowEvent);
				wininstance.addEventListener(SubordinateWindowEvent.APP,handleSubordinateWindowEvent);
				wininstance.addEventListener(SubordinateWindowEvent.MANUAL,handleSubordinateWindowEvent);
				wininstance.addEventListener(SubordinateWindow.WINDOWSWFREADY,windowSWFReady);
				
				wininstance.addEventListener(FlexEvent.CREATION_COMPLETE,handleWinInstanceCreated);
				this.swfloader=wininstance;
				
				windowcontainer.addChild(wininstance);
		
			}

			this.__isopen=true;
		}
		
		private function handleWinInstanceCreated(event:FlexEvent):void{	
			
			var wininstance:UIComponent = event.target as UIComponent;

			var app:WindowedApplication = WindowedApplication(Application.application);
			app.removeChild(wininstance.parent);
			
			wininstance.width = newWin.width;
			wininstance.height = newWin.height;
			newWin.stage.addChild(wininstance);

			// newWin.addEventListener(Event.CLOSE,handleNativeWindowClose);
			
			this.swfloader=wininstance;
			handlePanelLoadComplete();
			
		}
		
		
		public function closeWindow():void{
			var ev:Event=new Event(Event.CLOSE);
			this.handleNativeWindowClose(ev);
		}
		
		
		public function get isOpen():Boolean{
			return this.__isopen;
		}
		
		private function handlePanelLoadComplete(event:Event=null):void{
			this.window.visible=true;
			this.dispatchEvent(new Event(Event.COMPLETE));
		}
		
		
		
			//this is a hack to handle Flash 9 events.
			//have to cast it
			
		private function handleNativeWindowClose(event:Event):void{
			trace("HANDLE NATIVE WINDOW CLOSE");
			// this.closeCOMGateway();
			if(!this.__supresscloseevent){
				this.__isopen=false;
				this.clearWindowEvents();
				var n_event:SubordinateWindowEvent=new SubordinateWindowEvent(this.options.closeevent);
				this.dispatchEvent(n_event);
			}
		}

		
		private function handleSubordinateWindowEvent(event:Event):void{
			event.stopPropagation();
			// this.closeGatewayOnEvent(event.type);
			if(this.typeSuppresesCloseEvent(event.type)){
				this.__supresscloseevent=true;
			}
			var n_event:SubordinateWindowEvent=new SubordinateWindowEvent(event.type);
			this.dispatchEvent(n_event);
		}
		
		
		private function typeSuppresesCloseEvent(type:String):Boolean{
			var val:Boolean=false;
			
			if(type==SubordinateWindowEvent.APP){
				val=true;
			}
			
			return val;
		}
		
		
		/*
		
		private function closeGatewayOnEvent(type:String):void{
			if(type==SubordinateWindowEvent.APP || type==SubordinateWindowEvent.CLOSE){
				this.closeCOMGateway();
			}
			
		}
		
		
		
		private function initializeCOMGateway(gatewayid:String):void{
		
			if(this.__comgateway==null){
				var in_name:String=this.options.comgateway+"_app";
				var out_name:String=this.options.comgateway+"_window";
				this.__comgateway=new EventGatewayMultiWay(in_name,out_name);
				this.__comgateway.addEventListener(EventGateway.INCOMINGEVENT,handleGatewayEvent);
			}
			
		}
		
		public function closeCOMGateway():void{
			
			try{
				trace("CLOSING GATEWAY IN APP");
				this.__comgateway.removeEventListener(EventGateway.INCOMINGEVENT,handleGatewayEvent);
				this.__comgateway.close();
			}catch(e:Error){
				trace("ERROR CLOSING GATEWAY IN APP");
			}
		}
		
		private function handleGatewayEvent(event:Event):void{
			var data:Object=this.__comgateway.getLastEvent();
			trace("Got Window Gateway Event:"+data.type);
			if(data.type=="windowinit"){
				this.windowSWFReady();
			}else{
				this.handleCustomGatewayEvent(data);
			}
			
		}
		
		public function handleCustomGatewayEvent(data:Object):void{
			//
		}
		
		public function sendGatewayEvent(event:Object):void{
			this.__comgateway.sendEvent(event);
		}
		
		*/
		
		private function clearWindowEvents():void{
			this.window.removeEventListener(Event.CLOSE,handleNativeWindowClose);
			this.swfloader.removeEventListener(SubordinateWindowEvent.CLOSE,handleSubordinateWindowEvent);
			this.swfloader.removeEventListener(SubordinateWindowEvent.APP,handleSubordinateWindowEvent);
			this.swfloader.removeEventListener(SubordinateWindowEvent.MANUAL,handleSubordinateWindowEvent);
			this.swfloader.removeEventListener(SubordinateWindow.WINDOWSWFREADY,windowSWFReady);
			
			if(this.swfloader is Loader){
				var asloader:Loader= this.swfloader as Loader;
				asloader.contentLoaderInfo.removeEventListener(Event.COMPLETE,handlePanelLoadComplete);
			}
		}
		
//////////////////////////////////////////////////////////////////////////////////////////////
//BASE WINDOW GATEWAY EVENT HANDLING		
		
		private function windowSWFReady(event:Event=null):void{
			
			event.stopPropagation();
			this.dispatchEvent(new Event(WINDOWSWFREADY));
		}
		
		
		
		
		
//////////////////////////////////////////////////////////////////////////////////////////////
	}
}

⌨️ 快捷键说明

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