You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2016/06/16 22:59:49 UTC
[32/50] [abbrv] git commit: [flex-asjs] [refs/heads/spark] - Merge
branch 'develop' into spark
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/77148f4a/frameworks/projects/MX/src/main/flex/mx/preloaders/IPreloaderDisplay.as
----------------------------------------------------------------------
diff --cc frameworks/projects/MX/src/main/flex/mx/preloaders/IPreloaderDisplay.as
index d1a1edd,0000000..9ed1a66
mode 100644,000000..100644
--- a/frameworks/projects/MX/src/main/flex/mx/preloaders/IPreloaderDisplay.as
+++ b/frameworks/projects/MX/src/main/flex/mx/preloaders/IPreloaderDisplay.as
@@@ -1,200 -1,0 +1,200 @@@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.preloaders
+{
+
- COMPILE::AS3
++COMPILE::SWF
+{
+ import flash.display.Sprite;
+}
+COMPILE::JS
+{
+ import flex.display.Sprite;
+}
+import org.apache.flex.events.IEventDispatcher;
+
+/**
+ * Defines the interface that
+ * a class must implement to be used as a download progress bar.
+ * The IPreloaderDisplay receives events from the Preloader class
+ * and is responsible for visualizing that information to the user.
+ *
+ * @see mx.preloaders.DownloadProgressBar
+ * @see mx.preloaders.Preloader
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+public interface IPreloaderDisplay extends IEventDispatcher
+{
+ //--------------------------------------------------------------------------
+ //
+ // Properties
+ //
+ //--------------------------------------------------------------------------
+
+ //----------------------------------
+ // backgroundAlpha
+ //----------------------------------
+
+ /**
+ * @copy mx.preloaders.DownloadProgressBar#backgroundAlpha
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ function get backgroundAlpha():Number;
+
+ /**
+ * @private
+ */
+ function set backgroundAlpha(value:Number):void;
+
+ //----------------------------------
+ // backgroundColor
+ //----------------------------------
+
+ /**
+ * @copy mx.preloaders.DownloadProgressBar#backgroundColor
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ function get backgroundColor():uint;
+
+ /**
+ * @private
+ */
+ function set backgroundColor(value:uint):void;
+
+ //----------------------------------
+ // backgroundImage
+ //----------------------------------
+
+ /**
+ * @copy mx.preloaders.DownloadProgressBar#backgroundImage
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ function get backgroundImage():Object;
+
+ /**
+ * @private
+ */
+ function set backgroundImage(value:Object):void;
+
+ //----------------------------------
+ // backgroundSize
+ //----------------------------------
+
+ /**
+ * @copy mx.preloaders.DownloadProgressBar#backgroundSize
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ function get backgroundSize():String;
+
+ /**
+ * @private
+ */
+ function set backgroundSize(value:String):void;
+
+ //----------------------------------
+ // preloader
+ //----------------------------------
+
+ /**
+ * @copy mx.preloaders.DownloadProgressBar#preloader
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ function set preloader(obj:Sprite):void;
+
+ //----------------------------------
+ // stageHeight
+ //----------------------------------
+
+ /**
+ * @copy mx.preloaders.DownloadProgressBar#stageHeight
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ function get stageHeight():Number;
+
+ /**
+ * @private
+ */
+ function set stageHeight(value:Number):void;
+
+ //----------------------------------
+ // stageWidth
+ //----------------------------------
+
+ /**
+ * @copy mx.preloaders.DownloadProgressBar#stageWidth
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ function get stageWidth():Number;
+
+ /**
+ * @private
+ */
+ function set stageWidth(value:Number):void;
+
+ //--------------------------------------------------------------------------
+ //
+ // Methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @copy mx.preloaders.DownloadProgressBar#initialize()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ function initialize():void;
+}
+
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/77148f4a/frameworks/projects/MX/src/main/flex/mx/preloaders/Preloader.as
----------------------------------------------------------------------
diff --cc frameworks/projects/MX/src/main/flex/mx/preloaders/Preloader.as
index a5dc22c,0000000..1a341a9
mode 100644,000000..100644
--- a/frameworks/projects/MX/src/main/flex/mx/preloaders/Preloader.as
+++ b/frameworks/projects/MX/src/main/flex/mx/preloaders/Preloader.as
@@@ -1,717 -1,0 +1,717 @@@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.preloaders
+{
+
- COMPILE::AS3
++COMPILE::SWF
+{
+ import flash.display.DisplayObject;
+ import flash.display.LoaderInfo;
+ import flash.display.MovieClip;
+ import flash.display.Sprite;
+ import flash.events.ErrorEvent;
+ import flash.events.Event;
+ import flash.events.IEventDispatcher;
+ import flash.events.IOErrorEvent;
+ import flash.events.ProgressEvent;
+ import flash.events.TimerEvent;
+ import flash.utils.Timer;
+}
+COMPILE::JS
+{
+ import flex.display.DisplayObject;
+ import flex.display.MovieClip;
+ import flex.display.Sprite;
+ import flex.events.Event;
+ import flex.events.IEventDispatcher;
+ import flex.events.IOErrorEvent;
+ import flex.events.ProgressEvent;
+ import flex.events.TimerEvent;
+
+ import org.apache.flex.utils.Timer;
+}
+
+import flex.system.DefinitionManager;
+
+COMPILE::LATER
+{
+import mx.core.RSLItem;
+import mx.core.RSLListLoader;
+import mx.core.ResourceModuleRSLItem;
+import mx.events.RSLEvent;
+import mx.managers.SystemManagerGlobals;
+import mx.resources.IResourceManager;
+}
+import mx.core.mx_internal;
+import mx.events.FlexEvent;
+
+use namespace mx_internal;
+
+/**
+ * The Preloader class is used by the SystemManager to monitor
+ * the download and initialization status of a Flex application.
+ * It is also responsible for downloading the runtime shared libraries (RSLs).
+ *
+ * <p>The Preloader class instantiates a download progress bar,
+ * which must implement the IPreloaderDisplay interface, and passes download
+ * and initialization events to the download progress bar.</p>
+ *
+ * @see mx.preloaders.DownloadProgressBar
+ * @see mx.preloaders.Preloader
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+public class Preloader extends Sprite
+{
+ include "../core/Version.as";
+
+ //--------------------------------------------------------------------------
+ //
+ // Constructor
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function Preloader()
+ {
+ super()
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Variables
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ private var displayClass:IPreloaderDisplay = null;
+
+ /**
+ * @private
+ */
+ private var timer:Timer;
+
+ /**
+ * @private
+ */
+ private var showDisplay:Boolean;
+
+ /**
+ * @private
+ */
+ COMPILE::LATER
+ private var rslListLoader:RSLListLoader;
+
+ /**
+ * @private
+ */
+ COMPILE::LATER
+ private var resourceModuleListLoader:RSLListLoader;
+
+ /**
+ * @private
+ */
+ private var rslDone:Boolean = false;
+
+ /**
+ * @private
+ */
+ private var loadingRSLs:Boolean = false;
+
+ /**
+ * @private
+ */
+ private var waitingToLoadResourceModules:Boolean = false;
+
+ /**
+ * @private
+ */
+ private var sentDocFrameReady:Boolean = false;
+
+ /**
+ * @private
+ */
+ private var app:IEventDispatcher = null;
+
+ /**
+ * @private
+ */
+ private var applicationDomain:DefinitionManager = null;
+
+ /**
+ * @private
+ */
+ private var waitedAFrame:Boolean = false;
+
+ //--------------------------------------------------------------------------
+ //
+ // Methods
+ //
+ //--------------------------------------------------------------------------
+
+ COMPILE::LATER
+ public function initialize(showDisplay:Boolean,
+ displayClassName:Class,
+ backgroundColor:uint,
+ backgroundAlpha:Number,
+ backgroundImage:Object,
+ backgroundSize:String,
+ displayWidth:Number,
+ displayHeight:Number,
+ libs:Array = null,
+ sizes:Array = null,
+ rslList:Array = null,
+ resourceModuleURLs:Array = null,
+ applicationDomain:DefinitionManager = null):void
+ {
+
+ }
+
+ /**
+ * Called by the SystemManager to initialize a Preloader object.
+ *
+ * @param showDisplay Determines if the display class should be displayed.
+ *
+ * @param displayClassName The IPreloaderDisplay class to use
+ * for displaying the preloader status.
+ *
+ * @param backgroundColor Background color of the application.
+ *
+ * @param backgroundAlpha Background alpha of the application.
+ *
+ * @param backgroundImage Background image of the application.
+ *
+ * @param backgroundSize Background size of the application.
+ *
+ * @param displayWidth Width of the application.
+ *
+ * @param displayHeight Height of the application.
+ *
+ * @param libs Array of string URLs for the runtime shared libraries.
+ *
+ * @param sizes Array of uint values containing the byte size for each URL
+ * in the libs argument
+ *
+ * @param rslList Array of object of type RSLItem and CdRSLItem.
+ * This array describes all the RSLs to load.
+ * The libs and sizes parameters are ignored and must be set to null.
+ *
+ * @param resourceModuleURLs Array of Strings specifying URLs
+ * from which to preload resource modules.
+ *
+ * @param applicationDomain The application domain in which
+ * your code is executing.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function initialize(showDisplay:Boolean,
+ displayClassName:Class,
+ backgroundColor:uint,
+ backgroundAlpha:Number,
+ backgroundImage:Object,
+ backgroundSize:String,
+ displayWidth:Number,
+ displayHeight:Number,
+ libs:Array = null,
+ sizes:Array = null):void
+ {
+ COMPILE::LATER
+ {
+ if ((libs != null || sizes != null) && rslList != null)
+ {
+ // both args can't be used at the same time
+ throw new Error("RSLs may only be specified by using libs and sizes or rslList, not both."); // $NON-NLS-1$
+ }
+ }
+
+ this.applicationDomain = applicationDomain;
+
- COMPILE::AS3
++ COMPILE::SWF
+ {
+ root.loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
+ }
+
+ var n:int;
+ var i:int;
+
+ COMPILE::LATER
+ {
+ // Store the RSL information.
+ // Keep this code for API backwards compatibility
+ if (libs && libs.length > 0)
+ {
+ if (rslList == null)
+ {
+ rslList = [];
+ }
+
+ n = libs.length;
+ for (i = 0; i < n; i++)
+ {
+ var node:RSLItem = new RSLItem(libs[i]);
+ rslList.push(node);
+ }
+ }
+
+ var resourceModuleList:Array = [];
+ // Preloading resource modules is similar enough to loading RSLs
+ // that we can simply create ResourceModuleRSLItems for them
+ if (resourceModuleURLs && resourceModuleURLs.length > 0)
+ {
+ n = resourceModuleURLs.length;
+ for (i = 0; i < n; i++)
+ {
+ var resourceModuleNode:ResourceModuleRSLItem =
+ new ResourceModuleRSLItem(resourceModuleURLs[i], applicationDomain);
+ resourceModuleList.push(resourceModuleNode);
+ }
+ }
+
+ rslListLoader = new RSLListLoader(rslList);
+ if (resourceModuleList.length)
+ resourceModuleListLoader = new RSLListLoader(resourceModuleList);
+ }
+ this.showDisplay = showDisplay;
+
+ // Create the timer (really should be adding event listeners to root.LoaderInfo)
+ timer = new Timer(10);
+ timer.addEventListener(TimerEvent.TIMER, timerHandler);
+ timer.start();
+
+ // Create a new instance of the display class and attach it to the stage
+ if (showDisplay)
+ {
+ displayClass = new displayClassName();
+ // Listen for when the displayClass no longer needs to be on the stage
+ displayClass.addEventListener(Event.COMPLETE,
+ displayClassCompleteHandler);
+
+ // Add the display class as a child of the Preloader
+ addChild(DisplayObject(displayClass));
+
+ displayClass.backgroundColor = backgroundColor;
+ displayClass.backgroundAlpha = backgroundAlpha;
+ displayClass.backgroundImage = backgroundImage;
+ displayClass.backgroundSize = backgroundSize;
+ displayClass.stageWidth = displayWidth;
+ displayClass.stageHeight = displayHeight;
+ displayClass.initialize();
+ displayClass.preloader = this;
+
+ // Listen for ENTER_FRAME to make sure that we are going to render the displayClass first,
+ // before dispatching PRELOADER_DOC_FRAME_READY. This way we the run-time can render
+ // the displayClass as soon as possible, before advancing onto frame 2.
+ CONFIG::performanceInstrumentation
+ {
+ import mx.utils.PerfUtil;
+ PerfUtil.getInstance().markTime("Preloader.displayClass created");
+ }
+ this.addEventListener(Event.ENTER_FRAME, waitAFrame);
+ }
+
+ COMPILE::LATER
+ {
+ // move below showDisplay so error messages can be displayed
+ if (rslListLoader.getItemCount() > 0)
+ {
+ // Start loading the RSLs.
+ rslListLoader.load(rslProgressHandler,
+ rslCompleteHandler,
+ rslErrorHandler,
+ rslErrorHandler,
+ rslErrorHandler);
+ loadingRSLs = true;
+ }
+ else if (resourceModuleListLoader && resourceModuleListLoader.getItemCount() > 0)
+ {
+ if (applicationDomain.hasDefinition("mx.resources::ResourceManager"))
+ {
+ rslListLoader = resourceModuleListLoader;
+ // Start loading the resourceModules
+ rslListLoader.load(rslProgressHandler,
+ rslCompleteHandler,
+ rslErrorHandler,
+ rslErrorHandler,
+ rslErrorHandler);
+ }
+ else
+ {
+ waitingToLoadResourceModules = true;
+ rslDone = true;
+ }
+ }
+ else
+ {
+ rslDone = true;
+ }
+ }
+ }
+
+ /**
+ * Called by the SystemManager after it has finished instantiating
+ * an instance of the application class. Flex calls this method; you
+ * do not call it yourself.
+ *
+ * @param app The application object.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function registerApplication(app:IEventDispatcher):void
+ {
+ // Listen for events from the application.
+ app.addEventListener("validatePropertiesComplete", appProgressHandler);
+ app.addEventListener("validateSizeComplete", appProgressHandler);
+ app.addEventListener("validateDisplayListComplete", appProgressHandler);
+ app.addEventListener(FlexEvent.CREATION_COMPLETE, appCreationCompleteHandler);
+
+ // Cache for later cleanup.
+ this.app = app;
+ }
+
+
+ /**
+ * @private
+ * Return the number of bytes loaded and total for the SWF and any RSLs.
+ */
+ private function getByteValues():Object
+ {
- COMPILE::AS3
++ COMPILE::SWF
+ {
+ var li:LoaderInfo = root.loaderInfo;
+ var loaded:int = li.bytesLoaded;
+ var total:int = li.bytesTotal;
+ }
+ COMPILE::JS
+ {
+ var loaded:int = 100;
+ var total:int = 100;
+ }
+ COMPILE::LATER
+ {
+ // Look up the rsl bytes and include those
+ var n:int = rslListLoader ? rslListLoader.getItemCount() : 0;
+ for (var i:int = 0; i < n; i++)
+ {
+ loaded += rslListLoader.getItem(i).loaded;
+
+ // If the rsl total is zero then provide an average rsl size
+ // to set rough expectations.
+ var rslTotal:int = rslListLoader.getItem(i).total;
+ total += rslTotal;
+ }
+ }
+
+ return { loaded: loaded, total: total };
+ }
+
+ /**
+ * @private
+ */
+ private function dispatchAppEndEvent(event:Object = null):void
+ {
+ // Dispatch the application initialization end event
+ dispatchEvent(new FlexEvent(FlexEvent.INIT_COMPLETE));
+
+ if (!showDisplay)
+ displayClassCompleteHandler(null);
+ }
+
+ /**
+ * @private
+ * We don't listen for the events directly
+ * because we don't know which RSL is sending the event.
+ * So we have the RSLNode listen to the events
+ * and then pass them along to the Preloader.
+ */
+ COMPILE::LATER
+ mx_internal function rslProgressHandler(event:ProgressEvent):void
+ {
+ var index:int = rslListLoader.getIndex();
+ var item:RSLItem = rslListLoader.getItem(index);
+
+
+ var rslEvent:RSLEvent = new RSLEvent(RSLEvent.RSL_PROGRESS);
+ rslEvent.isResourceModule = (rslListLoader == resourceModuleListLoader);
+ rslEvent.bytesLoaded = event.bytesLoaded;
+ rslEvent.bytesTotal = event.bytesTotal;
+ rslEvent.rslIndex = index;
+ rslEvent.rslTotal = rslListLoader.getItemCount();
+ rslEvent.url = item.urlRequest;
+ dispatchEvent(rslEvent);
+ }
+
+
+ /**
+ * @private
+ * Load the next RSL in the list and dispatch an event.
+ */
+ COMPILE::LATER
+ mx_internal function rslCompleteHandler(event:Event):void
+ {
+ var index:int = rslListLoader.getIndex();
+ var item:RSLItem = rslListLoader.getItem(index);
+
+ var rslEvent:RSLEvent = new RSLEvent(RSLEvent.RSL_COMPLETE);
+ rslEvent.isResourceModule = (rslListLoader == resourceModuleListLoader);
+ rslEvent.bytesLoaded = item.total;
+ rslEvent.bytesTotal = item.total;
+ rslEvent.loaderInfo = event.target as LoaderInfo;
+ rslEvent.rslIndex = index;
+ rslEvent.rslTotal = rslListLoader.getItemCount();
+ rslEvent.url = item.urlRequest;
+ dispatchEvent(rslEvent);
+
+ if (loadingRSLs && resourceModuleListLoader && index + 1 == rslEvent.rslTotal)
+ {
+ loadingRSLs = false;
+ waitingToLoadResourceModules = true;
+ // timer will switch over to loading resource modules
+ }
+
+ rslDone = (index + 1 == rslEvent.rslTotal);
+ }
+
+
+ /**
+ * @private
+ */
+ COMPILE::LATER
+ mx_internal function rslErrorHandler(event:ErrorEvent):void
+ {
+ // send an error event
+ var index:int = rslListLoader.getIndex();
+ var item:RSLItem = rslListLoader.getItem(index);
+ var rslEvent:RSLEvent = new RSLEvent(RSLEvent.RSL_ERROR);
+ rslEvent.isResourceModule = (rslListLoader == resourceModuleListLoader);
+ rslEvent.bytesLoaded = 0;
+ rslEvent.bytesTotal = 0;
+ rslEvent.rslIndex = index;
+ rslEvent.rslTotal = rslListLoader.getItemCount();
+ rslEvent.url = item.urlRequest;
+ rslEvent.errorText = decodeURI(event.text);
+ dispatchEvent(rslEvent);
+
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Event handlers
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ * Listen or poll for progress events and dispatch events
+ * describing the current state of the download
+ */
+ private function timerHandler(event:TimerEvent):void
+ {
+ // loaded swfs may not have root right away
+ if (!root)
+ return;
+
+ var bytes:Object = getByteValues();
+ var loaded:int = bytes.loaded;
+ var total:int = bytes.total;
+
+ // Dispatch a progress event (later we might conditionalize this
+ // so that it isn't sent on a cache load).
+ dispatchEvent(new ProgressEvent(ProgressEvent.PROGRESS,
+ false, false, loaded, total));
+
+ COMPILE::LATER
+ {
+ if (waitingToLoadResourceModules)
+ {
+ if (applicationDomain.hasDefinition("mx.resources::ResourceManager"))
+ {
+ waitingToLoadResourceModules = false;
+ rslListLoader = resourceModuleListLoader;
+ rslDone = false;
+ // Start loading the resourceModules
+ rslListLoader.load(rslProgressHandler,
+ rslCompleteHandler,
+ rslErrorHandler,
+ rslErrorHandler,
+ rslErrorHandler);
+ }
+ }
+ }
+
+ // Check if we are finished
+ if (rslDone &&
+ ((loaded >= total && total > 0) || (total == 0 && loaded > 0) || (root is MovieClip && (MovieClip(root).totalFrames > 2) && (MovieClip(root).framesLoaded >= 2)) ))
+ {
+ if (!sentDocFrameReady)
+ {
+ // If there's a displayClass, don't send the PRELOADER_DOC_FRAME_READY
+ // event before we render at least one frame
+ if (showDisplay && !waitedAFrame)
+ return;
+
+ sentDocFrameReady = true;
+ // Dispatch a Frame1 done event.
+ dispatchEvent(new FlexEvent(FlexEvent.PRELOADER_DOC_FRAME_READY));
+ return;
+ }
+
+ COMPILE::LATER
+ {
+ if (waitingToLoadResourceModules)
+ {
+ if (applicationDomain.hasDefinition("mx.resources::ResourceManager"))
+ {
+ waitingToLoadResourceModules = false;
+ rslListLoader = resourceModuleListLoader;
+ rslDone = false;
+ // Start loading the resourceModules
+ rslListLoader.load(rslProgressHandler,
+ rslCompleteHandler,
+ rslErrorHandler,
+ rslErrorHandler,
+ rslErrorHandler);
+ return;
+ }
+ }
+
+ if (resourceModuleListLoader)
+ {
+ var resourceManager:IResourceManager;
+ // do this to prevent dependency on ResourceManager
+ if (applicationDomain.hasDefinition("mx.resources::ResourceManager"))
+ {
+ var resourceManagerClass:Class =
+ Class(applicationDomain.getDefinition("mx.resources::ResourceManager"));
+ resourceManager =
+ IResourceManager(resourceManagerClass["getInstance"]());
+ }
+ // The FlashVars of the SWF's HTML wrapper,
+ // or the query parameters of the SWF URL,
+ // can specify the ResourceManager's localeChain.
+ var localeChainList:String =
+ SystemManagerGlobals.parameters["localeChain"];
+ if (localeChainList != null && localeChainList != "")
+ resourceManager.localeChain = localeChainList.split(",");
+ }
+ }
+ timer.removeEventListener(TimerEvent.TIMER, timerHandler);
+
+ // Stop the timer.
+ timer.reset();
+
+ // Dispatch a complete event.
+ dispatchEvent(new Event(Event.COMPLETE));
+
+ // Dispatch an initProgress event.
+ dispatchEvent(new FlexEvent(FlexEvent.INIT_PROGRESS));
+
+ }
+ }
+
+ /**
+ * @private
+ */
+ private function ioErrorHandler(event:IOErrorEvent):void
+ {
+ // Ignore the event
+ }
+
+ /**
+ * @private
+ * Called when the displayClass has finished animating
+ * and no longer needs to be displayed.
+ */
+ private function displayClassCompleteHandler(event:Event):void
+ {
+ // Cleanup
+ if (displayClass)
+ displayClass.removeEventListener(Event.COMPLETE, displayClassCompleteHandler);
+
- COMPILE::AS3
++ COMPILE::SWF
+ {
+ if (root)
+ root.loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
+ }
+
+ if (app)
+ {
+ app.removeEventListener("validatePropertiesComplete", appProgressHandler);
+ app.removeEventListener("validateSizeComplete", appProgressHandler);
+ app.removeEventListener("validateDisplayListComplete", appProgressHandler);
+ app.removeEventListener(FlexEvent.CREATION_COMPLETE, appCreationCompleteHandler);
+ app = null;
+ }
+
+ // Send an event to the SystemManager that we are completely finished
+ dispatchEvent(new FlexEvent(FlexEvent.PRELOADER_DONE));
+ }
+
+ /**
+ * @private
+ */
+ private function appCreationCompleteHandler(event:FlexEvent):void
+ {
+ dispatchAppEndEvent();
+ }
+
+ /**
+ * @private
+ */
+ private function appProgressHandler(event:Event):void
+ {
+ dispatchEvent(new FlexEvent(FlexEvent.INIT_PROGRESS));
+ }
+
+ /**
+ * @private
+ */
+ private function waitAFrame(event:Event):void
+ {
+ CONFIG::performanceInstrumentation
+ {
+ mx.utils.PerfUtil.getInstance().markTime("Preloader.displayClass rendered");
+ }
+
+ this.removeEventListener(Event.ENTER_FRAME, waitAFrame);
+ waitedAFrame = true;
+ }
+
+}
+
+}
+
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/77148f4a/frameworks/projects/MX/src/main/flex/mx/resources/ResourceBundle.as
----------------------------------------------------------------------
diff --cc frameworks/projects/MX/src/main/flex/mx/resources/ResourceBundle.as
index c9573de,0000000..2b74571
mode 100644,000000..100644
--- a/frameworks/projects/MX/src/main/flex/mx/resources/ResourceBundle.as
+++ b/frameworks/projects/MX/src/main/flex/mx/resources/ResourceBundle.as
@@@ -1,256 -1,0 +1,256 @@@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.resources
+{
+
- COMPILE::AS3
++COMPILE::SWF
+{
+ import flash.system.ApplicationDomain;
+}
+
+import mx.core.mx_internal;
+COMPILE::LATER
+{
+ import mx.utils.StringUtil;
+}
+use namespace mx_internal;
+
+/**
+ * Provides an implementation of the IResourceBundle interface.
+ * The IResourceManager and IResourceBundle interfaces work together
+ * to provide internationalization support for Flex applications.
+ *
+ * <p>A Flex application typically has multiple instances of this class,
+ * all managed by a single instance of the ResourceManager class.
+ * It is possible to have ResourceBundle instances for multiple locales,
+ * one for each locale. There can be multiple ResourceBundle instances with
+ * different bundle names.</p>
+ *
+ * @see mx.resources.IResourceBundle
+ * @see mx.resources.IResourceManager
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+public class ResourceBundle implements IResourceBundle
+{
+ include "../core/Version.as";
+
+ //--------------------------------------------------------------------------
+ //
+ // Class variables
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ * Set by SystemManager constructor in order to make the deprecated
+ * getResourceBundle() method work with the new resource scheme
+ * in the single-locale case.
+ */
+ mx_internal static var locale:String;
+
+ /**
+ * @private
+ * Set by bootstrap loaders
+ * to allow for alternate search paths for resources
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ mx_internal static var backupApplicationDomain:ApplicationDomain;
+
+ //--------------------------------------------------------------------------
+ //
+ // Class methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
- COMPILE::AS3
++ COMPILE::SWF
+ private static function getClassByName(name:String,
+ domain:ApplicationDomain):Class
+ {
+ var c:Class;
+
+ if (domain.hasDefinition(name))
+ c = domain.getDefinition(name) as Class;
+
+ return c;
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Constructor
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Constructor.
+ *
+ * @param locale A locale string, such as <code>"en_US"</code>.
+ *
+ * @param bundleName A name that identifies this bundle,
+ * such as <code>"MyResources"</code>.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function ResourceBundle(locale:String = null,
+ bundleName:String = null)
+ {
+ // The only reason that the arguments are optional is so that
+ // Flex 3 applications can link against Flex 2 resource SWCs.
+ // In Flex 2, the constructor had no arguments at all
+ // and the autogenerated ResourceBundle subclasses
+ // therefore called super() with no arguments.
+ // If, in Flex 3, the constructor has required arguments,
+ // this causes a VerifyError.
+
+ super();
+
+ _locale = locale;
+ _bundleName = bundleName;
+
+ _content = getContent();
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Properties
+ //
+ //--------------------------------------------------------------------------
+
+ //----------------------------------
+ // bundleName
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the bundleName property.
+ */
+ mx_internal var _bundleName:String;
+
+ /**
+ * @copy mx.resources.IResourceBundle#bundleName
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get bundleName():String
+ {
+ return _bundleName;
+ }
+
+ //----------------------------------
+ // content
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the content property.
+ */
+ private var _content:Object = {};
+
+ /**
+ * @copy mx.resources.IResourceBundle#content
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get content():Object
+ {
+ return _content;
+ }
+
+ //----------------------------------
+ // locale
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the locale property.
+ */
+ mx_internal var _locale:String;
+
+ /**
+ * @copy mx.resources.IResourceBundle#locale
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function get locale():String
+ {
+ return _locale;
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * When a properties file is compiled into a resource bundle,
+ * the MXML compiler autogenerates a subclass of ResourceBundle.
+ * The subclass overrides this method to return an Object
+ * that contains key-value pairs for the bundle's resources.
+ *
+ * <p>If you create your own ResourceBundle instances,
+ * you can set the key-value pairs on the <code>content</code> object.</p>
+ *
+ * @return The Object that contains key-value pairs for the bundle's resources.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ protected function getContent():Object
+ {
+ return {};
+ }
+
+ /**
+ * @private
+ */
+ private function _getObject(key:String):Object
+ {
+ var value:Object = content[key];
+ if (!value)
+ {
+ throw new Error("Key " + key +
+ " was not found in resource bundle " + bundleName);
+ }
+ return value;
+ }
+}
+
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/77148f4a/frameworks/projects/MX/src/main/flex/mx/resources/ResourceManager.as
----------------------------------------------------------------------
diff --cc frameworks/projects/MX/src/main/flex/mx/resources/ResourceManager.as
index 7442509,0000000..e016f79
mode 100644,000000..100644
--- a/frameworks/projects/MX/src/main/flex/mx/resources/ResourceManager.as
+++ b/frameworks/projects/MX/src/main/flex/mx/resources/ResourceManager.as
@@@ -1,129 -1,0 +1,129 @@@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.resources
+{
+
+import org.apache.flex.reflection.getDefinitionByName;
+import mx.core.mx_internal;
+import mx.core.Singleton;
+
+/**
+ * This class is used to get a single instance of the IResourceManager
+ * implementation.
+ * The IResourceManager and IResourceBundle interfaces work together
+ * to provide internationalization support for Flex applications.
+ *
+ * <p>A single instance of an IResourceManager implementation
+ * manages all localized resources
+ * for a Flex application.</p>
+ *
+ * @see mx.resources.IResourceManager
+ * @see mx.resources.IResourceBundle
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+public class ResourceManager
+{
+ include "../core/Version.as";
+
+ //--------------------------------------------------------------------------
+ //
+ // Class variables
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ * Linker dependency on implementation class.
+ */
+ private static var implClassDependency:ResourceManagerImpl;
+
+ /**
+ * @private
+ * The sole instance of the ResourceManager.
+ */
+ private static var instance:IResourceManager;
+
+ //--------------------------------------------------------------------------
+ //
+ // Class methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Gets the single instance of the ResourceManager class.
+ * This object manages all localized resources for a Flex application.
+ *
+ * @return An object implementing IResourceManager.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public static function getInstance():IResourceManager
+ {
+ if (!instance)
+ {
+ CONFIG::performanceInstrumentation
+ {
+ var perfUtil:mx.utils.PerfUtil = mx.utils.PerfUtil.getInstance();
+ perfUtil.markTime("ResourceManager.getInstance().start");
+ }
+
+ if (!Singleton.getClass("mx.resources::IResourceManager"))
+ // install ResourceManagerImpl if not registered already
+ Singleton.registerClass("mx.resources::IResourceManager",
+ Class(getDefinitionByName("mx.resources::ResourceManagerImpl")));
+
+
+ try
+ {
+ instance = IResourceManager(
+ Singleton.getInstance("mx.resources::IResourceManager"));
+ }
+ catch(e:Error)
+ {
+ // In non-Flex apps and modules, the Singleton manager
+ // won't have been initialized by SystemManager
+ // or FlexModuleFactory (since these don't get linked in)
+ // so the above call to getInstance() will throw an exception.
+ }
+
+ // In this situation, the ResourceManager simply creates
+ // its own ResourceManagerImpl.
+ if (!instance)
+ instance = new ResourceManagerImpl();
+
+ CONFIG::performanceInstrumentation
+ {
+ perfUtil.markTime("ResourceManager.getInstance().end");
+ }
+ }
+
+ return instance;
+ }
+
+}
+
- }
++}