home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / air / update / ui / EmbeddedUILoader.as < prev    next >
Encoding:
Text File  |  2010-06-23  |  8.1 KB  |  250 lines

  1. package air.update.ui
  2. {
  3.    import air.update.logging.Logger;
  4.    import flash.desktop.NativeApplication;
  5.    import flash.display.Loader;
  6.    import flash.display.NativeWindow;
  7.    import flash.display.NativeWindowInitOptions;
  8.    import flash.display.StageAlign;
  9.    import flash.display.StageScaleMode;
  10.    import flash.events.Event;
  11.    import flash.events.EventDispatcher;
  12.    import flash.events.IOErrorEvent;
  13.    import flash.system.ApplicationDomain;
  14.    import flash.system.Capabilities;
  15.    import flash.system.LoaderContext;
  16.    import flash.utils.ByteArray;
  17.    
  18.    public class EmbeddedUILoader extends EventDispatcher
  19.    {
  20.       private static var logger:Logger = Logger.getLogger("air.update.ui.EmbeddedUILoader");
  21.       
  22.       private var loader:Loader;
  23.       
  24.       private var _initialized:Boolean;
  25.       
  26.       private var uiPath:String;
  27.       
  28.       private var DialogBytes:Class = EmbeddedUILoader_DialogBytes;
  29.       
  30.       private var uiWindow:NativeWindow;
  31.       
  32.       private var appUpdater:UpdaterUI;
  33.       
  34.       private var isExiting:Boolean;
  35.       
  36.       private var applicationDialogs:Object;
  37.       
  38.       public function EmbeddedUILoader()
  39.       {
  40.          super();
  41.          this.watchOpenedWindows();
  42.          NativeApplication.nativeApplication.addEventListener(Event.EXITING,this.onExiting,false,int.MAX_VALUE);
  43.       }
  44.       
  45.       public function addResources(param1:String, param2:Object) : void
  46.       {
  47.          if(this.applicationDialogs != null)
  48.          {
  49.             this.applicationDialogs.addResources(param1,param2);
  50.          }
  51.       }
  52.       
  53.       public function setLocaleChain(param1:Array) : void
  54.       {
  55.          if(this.applicationDialogs != null)
  56.          {
  57.             this.applicationDialogs.setLocaleChain(param1);
  58.          }
  59.       }
  60.       
  61.       private function onWindowClose(param1:Event) : void
  62.       {
  63.          if(this.uiWindow != null && !this.uiWindow.closed && NativeApplication.nativeApplication.openedWindows.length == 1)
  64.          {
  65.             logger.fine("UpdateUI is last window standing. Action: Close & Exit");
  66.             this.onExiting(param1);
  67.          }
  68.          else
  69.          {
  70.             this.watchOpenedWindows();
  71.          }
  72.       }
  73.       
  74.       private function watchOpenedWindows() : void
  75.       {
  76.          var _loc2_:NativeWindow = null;
  77.          logger.fine("Check opened windows");
  78.          var _loc1_:uint = 0;
  79.          while(_loc1_ < NativeApplication.nativeApplication.openedWindows.length)
  80.          {
  81.             _loc2_ = NativeApplication.nativeApplication.openedWindows[_loc1_];
  82.             logger.fine("Opened window [" + _loc1_ + "] " + (!!_loc2_.title ? _loc2_.title : "-- no title --"));
  83.             if(_loc2_ != this.uiWindow)
  84.             {
  85.                _loc2_.removeEventListener(Event.CLOSE,this.onWindowClose);
  86.                if(!_loc2_.closed)
  87.                {
  88.                   _loc2_.addEventListener(Event.CLOSE,this.onWindowClose);
  89.                }
  90.             }
  91.             _loc1_++;
  92.          }
  93.       }
  94.       
  95.       public function showWindow() : void
  96.       {
  97.          var screenX:Number;
  98.          var screenY:Number;
  99.          var options:NativeWindowInitOptions;
  100.          if(this.uiWindow != null)
  101.          {
  102.             logger.fine("window already created");
  103.             return;
  104.          }
  105.          this.isExiting = false;
  106.          logger.fine("Creating UI window");
  107.          screenX = Capabilities.screenResolutionX;
  108.          screenY = Capabilities.screenResolutionY;
  109.          options = new NativeWindowInitOptions();
  110.          options.resizable = false;
  111.          options.maximizable = false;
  112.          this.uiWindow = new NativeWindow(options);
  113.          this.uiWindow.addEventListener(Event.CLOSING,function(param1:Event):void
  114.          {
  115.             logger.fine("Closing UI window." + (isExiting ? " Exiting" : " Not exiting, just hide"));
  116.             if(!isExiting)
  117.             {
  118.                param1.preventDefault();
  119.             }
  120.             else
  121.             {
  122.                uiWindow = null;
  123.             }
  124.             if(appUpdater.currentState != "PENDING_INSTALLING")
  125.             {
  126.                appUpdater.cancelUpdate();
  127.             }
  128.          });
  129.          this.uiWindow.visible = false;
  130.          this.uiWindow.width = 1024;
  131.          this.uiWindow.height = 800;
  132.          this.uiWindow.x = (screenX - 530) / 2;
  133.          this.uiWindow.y = (screenY - 230) / 2;
  134.          this.uiWindow.stage.align = StageAlign.TOP_LEFT;
  135.          this.uiWindow.stage.scaleMode = StageScaleMode.NO_SCALE;
  136.          this.uiWindow.stage.addChild(this.loader);
  137.       }
  138.       
  139.       private function onUILoadError(param1:Event) : void
  140.       {
  141.          logger.severe("SWF Loading complete");
  142.          dispatchEvent(param1);
  143.       }
  144.       
  145.       public function getLocaleChain() : Array
  146.       {
  147.          if(this.applicationDialogs == null)
  148.          {
  149.             return [];
  150.          }
  151.          return this.applicationDialogs.getLocaleChain();
  152.       }
  153.       
  154.       private function removeCloseListeners() : void
  155.       {
  156.          var _loc2_:NativeWindow = null;
  157.          var _loc1_:uint = 0;
  158.          while(_loc1_ < NativeApplication.nativeApplication.openedWindows.length)
  159.          {
  160.             _loc2_ = NativeApplication.nativeApplication.openedWindows[_loc1_];
  161.             _loc2_.removeEventListener(Event.CLOSE,this.onWindowClose);
  162.             _loc1_++;
  163.          }
  164.       }
  165.       
  166.       public function get initialized() : Boolean
  167.       {
  168.          return this._initialized;
  169.       }
  170.       
  171.       public function hideWindow() : void
  172.       {
  173.          logger.fine("Hide window");
  174.          if(this.uiWindow != null)
  175.          {
  176.             this.uiWindow.visible = false;
  177.          }
  178.       }
  179.       
  180.       private function onExiting(param1:Event) : void
  181.       {
  182.          logger.fine("Exiting: " + this.uiWindow);
  183.          this.isExiting = true;
  184.          if(this.uiWindow != null && !this.uiWindow.closed)
  185.          {
  186.             if(this.appUpdater.currentState != "PENDING_INSTALLING")
  187.             {
  188.                this.appUpdater.cancelUpdate();
  189.             }
  190.             this.uiWindow.close();
  191.             this.uiWindow = null;
  192.          }
  193.       }
  194.       
  195.       private function onUILoadInit(param1:Event) : void
  196.       {
  197.          logger.fine("SWF Loading complete. Waiting for ApplicationComplete");
  198.          this.loader.content.addEventListener("windowComplete",this.onUIApplicationComplete,true);
  199.       }
  200.       
  201.       public function load() : void
  202.       {
  203.          if(this.loader != null)
  204.          {
  205.             return;
  206.          }
  207.          this.loader = new Loader();
  208.          this.loader.contentLoaderInfo.addEventListener(Event.INIT,this.onUILoadInit);
  209.          this.loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,this.onUILoadError);
  210.          var _loc1_:ByteArray = new this.DialogBytes() as ByteArray;
  211.          if(_loc1_.length == 0)
  212.          {
  213.             dispatchEvent(new IOErrorEvent(IOErrorEvent.IO_ERROR));
  214.             return;
  215.          }
  216.          var _loc2_:LoaderContext = new LoaderContext(false,ApplicationDomain.currentDomain);
  217.          _loc2_.allowLoadBytesCodeExecution = true;
  218.          this.showWindow();
  219.          this.loader.loadBytes(_loc1_,_loc2_);
  220.       }
  221.       
  222.       public function set applicationUpdater(param1:UpdaterUI) : void
  223.       {
  224.          this.appUpdater = param1;
  225.       }
  226.       
  227.       private function onUIApplicationComplete(param1:Event) : void
  228.       {
  229.          logger.fine("Application loading complete.");
  230.          this.applicationDialogs = (param1.currentTarget as Object).application;
  231.          this.applicationDialogs.setApplicationUpdater(this.appUpdater);
  232.          this._initialized = true;
  233.          dispatchEvent(new Event(Event.COMPLETE));
  234.       }
  235.       
  236.       public function unload() : void
  237.       {
  238.          logger.fine("unload " + this.uiWindow);
  239.          this.appUpdater.cancelUpdate();
  240.          this.applicationDialogs.setApplicationUpdater(null);
  241.          if(this.uiWindow != null && !this.uiWindow.closed)
  242.          {
  243.             this.uiWindow.close();
  244.             this.uiWindow = null;
  245.          }
  246.       }
  247.    }
  248. }
  249.  
  250.