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/05/26 23:05:28 UTC
[44/51] [abbrv] git commit: [flex-asjs] [refs/heads/spark] - more
attempts to get Application and Label to compile
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c4cb764e/frameworks/projects/MX/src/main/flex/mx/core/IContainer.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/MX/src/main/flex/mx/core/IContainer.as b/frameworks/projects/MX/src/main/flex/mx/core/IContainer.as
index 5ea3f6f..8151a41 100644
--- a/frameworks/projects/MX/src/main/flex/mx/core/IContainer.as
+++ b/frameworks/projects/MX/src/main/flex/mx/core/IContainer.as
@@ -106,7 +106,9 @@ include "IInteractiveObjectInterface.as"
* @playerversion AIR 1.1
* @productversion Flex 3
*/
+ COMPILE::LATER
function get horizontalScrollPosition():Number;
+ COMPILE::LATER
function set horizontalScrollPosition(value:Number):void;
/**
@@ -117,7 +119,9 @@ include "IInteractiveObjectInterface.as"
* @playerversion AIR 1.1
* @productversion Flex 3
*/
+ COMPILE::LATER
function get verticalScrollPosition():Number;
+ COMPILE::LATER
function set verticalScrollPosition(value:Number):void;
/**
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c4cb764e/frameworks/projects/MX/src/main/flex/mx/core/IDataRenderer.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/MX/src/main/flex/mx/core/IDataRenderer.as b/frameworks/projects/MX/src/main/flex/mx/core/IDataRenderer.as
new file mode 100644
index 0000000..c3bfe10
--- /dev/null
+++ b/frameworks/projects/MX/src/main/flex/mx/core/IDataRenderer.as
@@ -0,0 +1,103 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.core
+{
+
+/**
+ * The IDataRenderer interface defines the interface for components that have a <code>data</code> property.
+ *
+ * <p>Components that are used in an item renderer or item editor
+ * in a list control (such as the List, HorizontalList, TileList, DataGrid,
+ * and Tree controls), or as renderers in a chart are passed the data
+ * to render or edit by using the <code>data</code> property.
+ * The component must implement IDataRenderer so that the host components
+ * can pass this information.
+ * All Flex containers and many Flex components implement IDataRenderer and
+ * the <code>data</code> property.</p>
+ *
+ * <p>In a list control, Flex sets the <code>data</code> property
+ * of an item renderer or item editor to the element in the data provider
+ * that corresponds to the item being rendered or edited.
+ * For a DataGrid control, the <code>data</code> property
+ * contains the data provider element for the entire row of the DataGrid
+ * control, not just for the item.</p>
+ *
+ * <p>To implement this interface, you define a setter and getter method
+ * to implement the <code>data</code> property.
+ * Typically, the setter method writes the value of the <code>data</code>
+ * property to an internal variable and dispatches a <code>dataChange</code>
+ * event, and the getter method returns the current value of the internal
+ * variable, as the following example shows:</p>
+ *
+ * <pre>
+ * // Internal variable for the property value.
+ * private var _data:Object;
+ *
+ * // Make the data property bindable.
+ * [Bindable("dataChange")]
+ *
+ * // Define the getter method.
+ * public function get data():Object {
+ * return _data;
+ * }
+ *
+ * // Define the setter method, and dispatch an event when the property
+ * // changes to support data binding.
+ * public function set data(value:Object):void {
+ * _data = value;
+ *
+ * dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
+ * }
+ * </pre>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+public interface IDataRenderer
+{
+ //--------------------------------------------------------------------------
+ //
+ // Properties
+ //
+ //--------------------------------------------------------------------------
+
+ //----------------------------------
+ // data
+ //----------------------------------
+
+ /**
+ * The data to render or edit.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ function get data():Object;
+
+ /**
+ * @private
+ */
+ function set data(value:Object):void;
+}
+
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c4cb764e/frameworks/projects/MX/src/main/flex/mx/core/INavigatorContent.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/MX/src/main/flex/mx/core/INavigatorContent.as b/frameworks/projects/MX/src/main/flex/mx/core/INavigatorContent.as
new file mode 100644
index 0000000..27afaa4
--- /dev/null
+++ b/frameworks/projects/MX/src/main/flex/mx/core/INavigatorContent.as
@@ -0,0 +1,67 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.core
+{
+import mx.managers.IToolTipManagerClient;
+
+/**
+ * The INavigatorContent interface defines the interface that a container must
+ * implement to be used as the child of a navigator container,
+ * such as the ViewStack, TabNavigator, and Accordion navigator containers.
+ *
+ * @see mx.containers.Accordion
+ * @see mx.containers.TabNavigator
+ * @see mx.containers.ViewStack
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+public interface INavigatorContent extends IDeferredContentOwner, IToolTipManagerClient
+{
+ [Bindable("labelChanged")]
+ /**
+ * The text displayed by the navigator container for this container.
+ * For example, the text appears in the button area of an Accordion container
+ * and in the tab area of the TabNavigator container.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+ function get label():String;
+
+ [Bindable("iconChanged")]
+ /**
+ * The icon displayed by the navigator container for this container.
+ * The icon appears in the button area of an Accordion container
+ * and in the tab area of the TabNavigator container.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ */
+ function get icon():Class;
+}
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c4cb764e/frameworks/projects/MX/src/main/flex/mx/events/IndexChangedEvent.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/MX/src/main/flex/mx/events/IndexChangedEvent.as b/frameworks/projects/MX/src/main/flex/mx/events/IndexChangedEvent.as
new file mode 100644
index 0000000..364717a
--- /dev/null
+++ b/frameworks/projects/MX/src/main/flex/mx/events/IndexChangedEvent.as
@@ -0,0 +1,310 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.events
+{
+
+import flash.display.DisplayObject;
+import flash.events.Event;
+
+/**
+ * The IndexChangedEvent class represents events that are dispatched when
+ * an index changes.
+ * This event can indicate that the index value of a child of a container changed,
+ * the displayed child of a navigator container such as an Accordion or
+ * ViewStack changed, or the order of column headers in a DataGrid
+ * control changed.
+ *
+ * @see mx.core.Container
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+public class IndexChangedEvent extends Event
+{
+ include "../core/Version.as";
+
+ //--------------------------------------------------------------------------
+ //
+ // Class constants
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * The IndexChangedEvent.CHANGE constant defines the value of the
+ * <code>type</code> property of the event object for a <code>change</code> event,
+ * which indicates that an index has changed, such as when and Accordion control
+ * changes the displayed panel or a ViewStack changes views.
+ *
+ * <p>The properties of the event object have the following values:</p>
+ * <table class="innertable">
+ * <tr><th>Property</th><th>Value</th></tr>
+ * <tr><td><code>bubbles</code></td><td>false</td></tr>
+ * <tr><td><code>cancelable</code></td><td>false</td></tr>
+ * <tr><td><code>currentTarget</code></td><td>The Object that defines the
+ * event listener that handles the event. For example, if you use
+ * <code>myButton.addEventListener()</code> to register an event listener,
+ * myButton is the value of the <code>currentTarget</code>. </td></tr>
+ * <tr><td><code>inputType</code></td><td>Indicates whether this event
+ * was caused by a mouse or keyboard interaction.</td></tr>
+ * <tr><td><code>newIndex</code></td><td>The zero-based index
+ * after the change.</td></tr>
+ * <tr><td><code>oldIndex</code></td><td>The zero-based index
+ * before the change.</td></tr>
+ * <tr><td><code>relatedObject</code></td><td>Contains a reference
+ * to the child object that corresponds to the new index.</td></tr>
+ * <tr><td><code>target</code></td><td>The Object that dispatched the event;
+ * it is not always the Object listening for the event.
+ * Use the <code>currentTarget</code> property to always access the
+ * Object listening for the event.</td></tr>
+ * <tr><td><code>TriggerEvent</code></td><td>The event that
+ * triggered this event.</td></tr>
+ * <tr><td><code>Type</code></td><td>IndexChangedEvent.CHANGE</td></tr>
+ * </table>
+ *
+ * @eventType change
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public static const CHANGE:String = "change";
+
+ /**
+ * The IndexChangedEvent.CHILD_INDEX_CHANGE constant defines the value of the
+ * <code>type</code> property of the event object for a childIndexChange event,
+ * which indicates that a component's index among a container's children
+ * has changed.
+ *
+ * <p>The properties of the event object have the following values:</p>
+ * <table class="innertable">
+ * <tr><th>Property</th><th>Value</th></tr>
+ * <tr><td><code>bubbles</code></td><td>false</td></tr>
+ * <tr><td><code>cancelable</code></td><td>false</td></tr>
+ * <tr><td><code>currentTarget</code></td><td>The Object that defines the
+ * event listener that handles the event. For example, if you use
+ * <code>myButton.addEventListener()</code> to register an event listener,
+ * myButton is the value of the <code>currentTarget</code>. </td></tr>
+ * <tr><td><code>inputType</code></td><td>Indicates whether this event
+ * was caused by a mouse or keyboard interaction.</td></tr>
+ * <tr><td><code>newIndex</code></td><td>The zero-based index of the
+ * child after the change.</td></tr>
+ * <tr><td><code>oldIndex</code></td><td>The zero-based index of the
+ * child before the change.</td></tr>
+ * <tr><td><code>relatedObject</code></td><td>Contains a reference
+ * to the child object whose index changed.</td></tr>
+ * <tr><td><code>target</code></td><td>The Object that dispatched the event;
+ * it is not always the Object listening for the event.
+ * Use the <code>currentTarget</code> property to always access the
+ * Object listening for the event.</td></tr>
+ * <tr><td><code>TriggerEvent</code></td><td>null</td></tr>
+ * <tr><td><code>Type</code></td><td>IndexChangedEvent.CHILD_INDEX_CHANGE</td></tr>
+ * </table>
+ *
+ * @eventType childIndexChange
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public static const CHILD_INDEX_CHANGE:String = "childIndexChange";
+
+ /**
+ * The IndexChangedEvent.HEADER_SHIFT constant defines the value of the
+ * <code>type</code> property of the event object for a <code>headerShift</code> event,
+ * which indicates that a header has changed its index, as when a user drags
+ * a DataGrid column to a new position.
+ *
+ * <p>The properties of the event object have the following values:</p>
+ * <table class="innertable">
+ * <tr><th>Property</th><th>Value</th></tr>
+ * <tr><td><code>bubbles</code></td><td>false</td></tr>
+ * <tr><td><code>cancelable</code></td><td>false</td></tr>
+ * <tr><td><code>currentTarget</code></td><td>The Object that defines the
+ * event listener that handles the event. For example, if you use
+ * <code>myButton.addEventListener()</code> to register an event listener,
+ * myButton is the value of the <code>currentTarget</code>. </td></tr>
+ * <tr><td><code>inputType</code></td><td>Indicates whether this event
+ * was caused by a mouse or keyboard interaction.</td></tr>
+ * <tr><td><code>newIndex</code></td><td>The zero-based index of the
+ * header after the change.</td></tr>
+ * <tr><td><code>oldIndex</code></td><td>The zero-based index of the
+ * header before the change.</td></tr>
+ * <tr><td><code>relatedObject</code></td><td>null</td></tr>
+ * <tr><td><code>target</code></td><td>The Object that dispatched the event;
+ * it is not always the Object listening for the event.
+ * Use the <code>currentTarget</code> property to always access the
+ * Object listening for the event.</td></tr>
+ * <tr><td><code>TriggerEvent</code></td><td>The event that
+ * triggered this event.</td></tr>
+ * <tr><td><code>Type</code></td><td>IndexChangedEvent.HEADER_SHIFT</td></tr>
+ * </table>
+ *
+ * @eventType headerShift
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public static const HEADER_SHIFT:String = "headerShift";
+
+ //--------------------------------------------------------------------------
+ //
+ // Constructor
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Constructor.
+ * Normally called by a Flex control and not used in application code.
+ *
+ * @param type The event type; indicates the action that caused the event.
+ *
+ * @param bubbles Specifies whether the event can bubble
+ * up the display list hierarchy.
+ *
+ * @param cancelable Specifies whether the behavior
+ * associated with the event can be prevented.
+ *
+ * @param relatedObject The child object associated with the index change.
+ *
+ * @param oldIndex The zero-based index before the change.
+ *
+ * @param newIndex The zero-based index after the change.
+ *
+ * @param triggerEvent The event that triggered this event.
+ *
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public function IndexChangedEvent(type:String, bubbles:Boolean = false,
+ cancelable:Boolean = false,
+ relatedObject:DisplayObject = null,
+ oldIndex:Number = -1,
+ newIndex:Number = -1,
+ triggerEvent:Event = null)
+ {
+ super(type, bubbles, cancelable);
+
+ this.relatedObject = relatedObject;
+ this.oldIndex = oldIndex;
+ this.newIndex = newIndex;
+ this.triggerEvent = triggerEvent;
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Properties
+ //
+ //--------------------------------------------------------------------------
+
+ //----------------------------------
+ // newIndex
+ //----------------------------------
+
+ /**
+ * The zero-based index after the change. For <code>change</code> events
+ * it is the index of the current child. For <code>childIndexChange</code>
+ * events, it is the new index of the child. For <code>headerShift</code>
+ * events, it is the new index of the header.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public var newIndex:Number;
+
+ //----------------------------------
+ // oldIndex
+ //----------------------------------
+
+ /**
+ * The zero-based index before the change.
+ * For <code>change</code> events it is the index of the previous child.
+ * For <code>childIndexChange</code> events, it is the previous index
+ * of the child.
+ * For <code>headerShift</code> events, it is the previous index of
+ * the header.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public var oldIndex:Number;
+
+ //----------------------------------
+ // relatedObject
+ //----------------------------------
+
+ /**
+ * The child object whose index changed, or the object associated with
+ * the new index. This property is not set for header changes.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public var relatedObject:DisplayObject;
+
+ //----------------------------------
+ // triggerEvent
+ //----------------------------------
+
+ /**
+ * The event that triggered this event.
+ * Indicates whether this event was caused by a mouse or keyboard interaction.
+ * The value is <code>null</code> when a container dispatches a
+ * <code>childIndexChanged</code> event.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public var triggerEvent:Event;
+
+ //--------------------------------------------------------------------------
+ //
+ // Overridden methods: Event
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ override public function clone():Event
+ {
+ return new IndexChangedEvent(type, bubbles, cancelable,
+ relatedObject, oldIndex,
+ newIndex, triggerEvent);
+ }
+}
+
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c4cb764e/frameworks/projects/MX/src/main/flex/mx/managers/IActiveWindowManager.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/MX/src/main/flex/mx/managers/IActiveWindowManager.as b/frameworks/projects/MX/src/main/flex/mx/managers/IActiveWindowManager.as
new file mode 100644
index 0000000..2c36b0c
--- /dev/null
+++ b/frameworks/projects/MX/src/main/flex/mx/managers/IActiveWindowManager.as
@@ -0,0 +1,100 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.managers
+{
+
+import mx.managers.IFocusManagerContainer;
+
+[ExcludeClass]
+
+/**
+ * Interface for subsystem that manages which focus manager is active
+ * when there is more than one IFocusManagerContainer on screen.
+ */
+public interface IActiveWindowManager
+{
+ //--------------------------------------------------------------------------
+ //
+ // Properties
+ //
+ //--------------------------------------------------------------------------
+
+ //----------------------------------
+ // numModalWindows
+ //----------------------------------
+
+ /**
+ * The number of modal windows.
+ *
+ * <p>Modal windows don't allow
+ * clicking in another windows which would normally
+ * activate the FocusManager in that window. The PopUpManager
+ * modifies this count as it creates and destroy modal windows.</p>
+ */
+ function get numModalWindows():int;
+
+ /**
+ * @private
+ */
+ function set numModalWindows(value:int):void;
+
+
+ //--------------------------------------------------------------------------
+ //
+ // Methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Registers a top-level window containing a FocusManager.
+ * Called by the FocusManager, generally not called by application code.
+ *
+ * @param f The top-level window in the application.
+ */
+ function addFocusManager(f:IFocusManagerContainer):void;
+
+ /**
+ * Unregisters a top-level window containing a FocusManager.
+ * Called by the FocusManager, generally not called by application code.
+ *
+ * @param f The top-level window in the application.
+ */
+ function removeFocusManager(f:IFocusManagerContainer):void;
+
+ /**
+ * Activates the FocusManager in an IFocusManagerContainer.
+ *
+ * @param f IFocusManagerContainer the top-level window
+ * whose FocusManager should be activated.
+ */
+ function activate(f:Object):void;
+
+ /**
+ * Deactivates the FocusManager in an IFocusManagerContainer, and activate
+ * the FocusManager of the next highest window that is an IFocusManagerContainer.
+ *
+ * @param f IFocusManagerContainer the top-level window
+ * whose FocusManager should be deactivated.
+ */
+ function deactivate(f:Object):void;
+
+}
+
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c4cb764e/frameworks/projects/MX/src/main/flex/mx/styles/metadata/ModalTransparencyStyles.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/MX/src/main/flex/mx/styles/metadata/ModalTransparencyStyles.as b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/ModalTransparencyStyles.as
new file mode 100644
index 0000000..2c188db
--- /dev/null
+++ b/frameworks/projects/MX/src/main/flex/mx/styles/metadata/ModalTransparencyStyles.as
@@ -0,0 +1,80 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Modality of components launched by the PopUp Manager is simulated by
+ * creating a large translucent overlay underneath the component.
+ * Because of the way translucent objects are rendered, you may notice a slight
+ * dimming of the objects under the overlay.
+ * The effective transparency can be set by changing the
+ * <code>modalTransparency</code> value from 0.0 (fully transparent)
+ * to 1.0 (fully opaque).
+ * You can also set the color of the overlay by changing the
+ * <code>modalTransparencyColor</code> style.
+ *
+ * @default 0.5
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="modalTransparency", type="Number", inherit="yes")]
+
+/**
+ * The blur applied to the application while a modal window is open.
+ * A Blur effect softens the details of an image.
+ *
+ * @see flash.filters.BlurFilter
+ *
+ * @default 3
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="modalTransparencyBlur", type="Number", inherit="yes")]
+
+/**
+ * Color of the modal overlay layer. This style is used in conjunction
+ * with the <code>modalTransparency</code> style to determine the colorization
+ * applied to the application when a modal window is open.
+ *
+ * @default #DDDDDD
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="modalTransparencyColor", type="uint", format="Color", inherit="yes")]
+
+/**
+ * Duration, in milliseconds, of the modal transparency effect that
+ * plays when a modal window opens or closes.
+ *
+ * @default 100
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+[Style(name="modalTransparencyDuration", type="Number", format="Time", inherit="yes")]
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c4cb764e/frameworks/projects/MX/src/main/flex/mx/utils/LoaderUtil.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/MX/src/main/flex/mx/utils/LoaderUtil.as b/frameworks/projects/MX/src/main/flex/mx/utils/LoaderUtil.as
new file mode 100644
index 0000000..9984514
--- /dev/null
+++ b/frameworks/projects/MX/src/main/flex/mx/utils/LoaderUtil.as
@@ -0,0 +1,658 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.utils
+{
+
+import flash.display.DisplayObject;
+import flash.display.LoaderInfo;
+import flash.events.IEventDispatcher;
+import flash.system.Capabilities;
+import flash.utils.Dictionary;
+
+import mx.core.ApplicationDomainTarget;
+import mx.core.IFlexModuleFactory;
+import mx.core.mx_internal;
+import mx.core.RSLData;
+import mx.events.Request;
+import mx.managers.SystemManagerGlobals;
+import mx.utils.Platform;
+
+import flash.display.Loader;
+
+use namespace mx_internal;
+
+ /**
+ * The LoaderUtil class defines utility methods for use with Flex RSLs and
+ * generic Loader instances.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public class LoaderUtil
+ {
+
+ include "../core/Version.as";
+
+ //--------------------------------------------------------------------------
+ //
+ // Class variables
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ *
+ * An array of search strings and filters. These are used in the normalizeURL
+ * method. normalizeURL is used to remove special Flash Player markup from
+ * urls, but the array could be appended to by the user to modify urls in other
+ * ways.
+ *
+ * Each object in the array has two fields:
+ *
+ * 1. searchString - the string to search the url
+ * 2. filterFunction - a function that accepts an url and an index to the first
+ * occurrence of the search string in the url. The function may modify the url
+ * and return a new url. A filterFunction is only called once, for the first
+ * occurrence of where the searchString was found. If there
+ * are multiple strings in the url that need to be processed the filterFunction
+ * should handle all of them on the call. A filter function should
+ * be defined as follows:
+ *
+ * @param url the url to process.
+ * @param index the index of the first occurrence of the seachString in the url.
+ * @return the new url.
+ *
+ * function filterFunction(url:String, index:int):String
+ *
+ */
+ mx_internal static var urlFilters:Array =
+ [
+ { searchString: "/[[DYNAMIC]]/", filterFunction: dynamicURLFilter},
+ { searchString: "/[[IMPORT]]/", filterFunction: importURLFilter}
+ ];
+
+ //--------------------------------------------------------------------------
+ //
+ // Class methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * The root URL of a cross-domain RSL contains special text
+ * appended to the end of the URL.
+ * This method normalizes the URL specified in the specified LoaderInfo instance
+ * to remove the appended text, if present.
+ * Classes accessing <code>LoaderInfo.url</code> should call this method
+ * to normalize the URL before using it.
+ * This method also encodes the url by calling the encodeURI() method
+ * on it. If you want the unencoded url, you must call unencodeURI() on
+ * the results.
+ *
+ * @param loaderInfo A LoaderInfo instance.
+ *
+ * @return A normalized <code>LoaderInfo.url</code> property.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Flex 3
+ */
+ public static function normalizeURL(loaderInfo:LoaderInfo):String
+ {
+ var url:String = loaderInfo.url;
+ var index:int;
+ var searchString:String;
+ var urlFilter:Function;
+ var n:uint = LoaderUtil.urlFilters.length;
+
+ for (var i:uint = 0; i < n; i++)
+ {
+ searchString = LoaderUtil.urlFilters[i].searchString;
+ if ((index = url.indexOf(searchString)) != -1)
+ {
+ urlFilter = LoaderUtil.urlFilters[i].filterFunction;
+ url = urlFilter(url, index);
+ }
+ }
+
+ // On the mac, the player doesn't like filenames with high-ascii
+ // characters. Calling encodeURI fixes this problem. We restrict
+ // this call to mac-only since it causes problems on Windows.
+ if (Platform.isMac)
+ return encodeURI(url);
+
+ return url;
+ }
+
+ /**
+ * @private
+ *
+ * Use this method when you want to load resources with relative URLs.
+ *
+ * Combine a root url with a possibly relative url to get a absolute url.
+ * Use this method to convert a relative url to an absolute URL that is
+ * relative to a root URL.
+ *
+ * @param rootURL An url that will form the root of the absolute url.
+ * If the <code>rootURL</code> does not specify a file name it must be
+ * terminated with a slash. For example, "http://a.com" is incorrect, it
+ * should be terminated with a slash, "http://a.com/". If the rootURL is
+ * taken from loaderInfo, it must be passed thru <code>normalizeURL</code>
+ * before being passed to this function.
+ *
+ * When loading resources relative to an application, the rootURL is
+ * typically the loaderInfo.url of the application.
+ *
+ * @param url The url of the resource to load (may be relative).
+ *
+ * @return If <code>url</code> is already an absolute URL, then it is
+ * returned as is. If <code>url</code> is relative, then an absolute URL is
+ * returned where <code>url</code> is relative to <code>rootURL</code>.
+ */
+ public static function createAbsoluteURL(rootURL:String, url:String):String
+ {
+ var absoluteURL:String = url;
+
+ // make relative paths relative to the SWF loading it, not the top-level SWF
+ if (rootURL &&
+ !(url.indexOf(":") > -1 || url.indexOf("/") == 0 || url.indexOf("\\") == 0))
+ {
+ // First strip off the search string and then any url fragments.
+ var index:int;
+
+ if ((index = rootURL.indexOf("?")) != -1 )
+ rootURL = rootURL.substring(0, index);
+
+ if ((index = rootURL.indexOf("#")) != -1 )
+ rootURL = rootURL.substring(0, index);
+
+ // If the url starts from the current directory, then just skip
+ // over the "./".
+ // If the url start from the parent directory, the we need to
+ // modify the rootURL.
+ var lastIndex:int = Math.max(rootURL.lastIndexOf("\\"), rootURL.lastIndexOf("/"));
+ if (url.indexOf("./") == 0)
+ {
+ url = url.substring(2);
+ }
+ else
+ {
+ while (url.indexOf("../") == 0)
+ {
+ url = url.substring(3);
+ lastIndex = Math.max(rootURL.lastIndexOf("\\", lastIndex - 1),
+ rootURL.lastIndexOf("/", lastIndex - 1));
+ }
+ }
+
+ if (lastIndex != -1)
+ absoluteURL = rootURL.substr(0, lastIndex + 1) + url;
+ }
+
+ return absoluteURL;
+ }
+
+ /**
+ * @private
+ *
+ * Takes a list of required rsls and determines:
+ * - which RSLs have not been loaded
+ * - the application domain and IModuleFactory where the
+ * RSL should be loaded
+ *
+ * @param moduleFactory The module factory of the application or module
+ * to get load information for. If the moduleFactory has not loaded the
+ * module, then its parent is asked for load information. Each successive
+ * parent is asked until the load information is found or there are no
+ * more parents to ask. Only parents in parent ApplicationDomains are
+ * searched. Applications in different security domains or sibling
+ * ApplicationDomains do not share RSLs.
+ *
+ * @param rsls An array of RSLs that are required for
+ * <code>moduleFactory</code>. Each RSL is in an array of RSLData where
+ * the first element is the primary RSL and the remaining elements are
+ * failover RSLs.
+ * @return Array of RSLData that represents the RSLs to load. RSLs that are
+ * already loaded are not in the listed.
+ */
+ COMPILE::LATER
+ mx_internal static function processRequiredRSLs(moduleFactory:IFlexModuleFactory,
+ rsls:Array):Array
+ {
+ var rslsToLoad:Array = []; // of Array, where each element is an array
+ // of RSLData (primary and failover), return value
+ var topLevelModuleFactory:IFlexModuleFactory = SystemManagerGlobals.topLevelSystemManagers[0];
+ var currentModuleFactory:IFlexModuleFactory = topLevelModuleFactory;
+ var parentModuleFactory:IFlexModuleFactory = null;
+ var loaded:Dictionary = new Dictionary(); // contains rsls that are loaded
+ var loadedLength:int = 0;
+ var resolved:Dictionary = new Dictionary(); // contains rsls that have the app domain resolved
+ var resolvedLength:int = 0;
+ var moduleFactories:Array = null;
+
+ // Start at the top level module factory and work our way down the
+ // module factory chain checking if the any of the rsls are loaded
+ // and resolving application domain targets.
+ // We start at the top level module factory because the default rsls
+ // will all be loaded here and we won't often have to check other
+ // module factories.
+ while (currentModuleFactory != moduleFactory)
+ {
+ // Need to loop over all the rsls, to see which one are loaded
+ // and resolve application domains.
+ var n:int = rsls.length;
+ for (var i:int = 0; i < n; i++)
+ {
+ var rsl:Array = rsls[i];
+
+ // Check if the RSL has already been loaded.
+ if (!loaded[rsl])
+ {
+ if (isRSLLoaded(currentModuleFactory, rsl[0].digest))
+ {
+ loaded[rsl] = 1;
+ loadedLength++;
+
+ // We may find an rsl loaded in a module factory as we work
+ // our way down the module factory list. If we find one then
+ // remove it.
+ if (currentModuleFactory != topLevelModuleFactory)
+ {
+ var index:int = rslsToLoad.indexOf(rsl);
+ if (index != -1)
+ rslsToLoad.splice(index, 1);
+ }
+ }
+ else if (rslsToLoad.indexOf(rsl) == -1)
+ {
+ rslsToLoad.push(rsl); // assume we have to load it
+ }
+ }
+
+ // If the rsl is already loaded or already resolved then
+ // skip resolving it.
+ if (!loaded[rsl] && resolved[rsl] == null)
+ {
+ // Get the parent module factory if we are going to need to
+ // resolve the application domain target.
+ if (!parentModuleFactory &&
+ RSLData(rsl[0]).applicationDomainTarget == ApplicationDomainTarget.PARENT)
+ {
+ parentModuleFactory = getParentModuleFactory(moduleFactory);
+ }
+
+ // Resolve the application domain target.
+ if (resolveApplicationDomainTarget(rsl,
+ moduleFactory,
+ currentModuleFactory,
+ parentModuleFactory,
+ topLevelModuleFactory))
+ {
+ resolved[rsl] = 1;
+ resolvedLength++;
+ }
+ }
+ }
+
+ // If process all rsls then get out.
+ if (loadedLength + resolvedLength >= rsls.length)
+ break;
+
+ // If we didn't find everything in the top level module factory then work
+ // down towards the rsl's owning module factory.
+ // Build up the module factory parent chain so we can traverse it.
+ if (!moduleFactories)
+ {
+ moduleFactories = [moduleFactory];
+ currentModuleFactory = moduleFactory;
+ while (currentModuleFactory != topLevelModuleFactory)
+ {
+
+ currentModuleFactory = getParentModuleFactory(currentModuleFactory);
+
+ // If we couldn't get the parent module factory, then we
+ // will have to load into the highest application domain
+ // that is available. We won't be able to get a parent
+ // if a module was loaded without specifying a parent
+ // module factory.
+ if (!currentModuleFactory)
+ break;
+
+ if (currentModuleFactory != topLevelModuleFactory)
+ moduleFactories.push(currentModuleFactory);
+
+ if (!parentModuleFactory)
+ parentModuleFactory = currentModuleFactory;
+ }
+ }
+
+ currentModuleFactory = moduleFactories.pop();
+ }
+
+ return rslsToLoad;
+ }
+
+ /**
+ * @private
+ * Test whether a url is on the local filesystem. We can only
+ * really tell this with URLs that begin with "file:" or a
+ * Windows-style drive notation such as "C:". This fails some
+ * cases like the "/" notation on Mac/Unix.
+ *
+ * @param url
+ * the url to check against
+ *
+ * @return
+ * true if url is local, false if not or unable to determine
+ **/
+ mx_internal static function isLocal(url:String):Boolean
+ {
+ return (url.indexOf("file:") == 0 || url.indexOf(":") == 1);
+ }
+
+ /**
+ * @private
+ * Currently (FP 10.x) the ActiveX player (Explorer on Windows) does not
+ * handle encoded URIs containing UTF-8 on the local filesystem, but
+ * it does handle those same URIs unencoded. The plug-in requires
+ * encoded URIs.
+ *
+ * @param url
+ * url to properly encode, may be fully or partially encoded with encodeURI
+ *
+ * @param local
+ * true indicates the url is on the local filesystem
+ *
+ * @return
+ * encoded url that may be loaded with a URLRequest
+ **/
+ mx_internal static function OSToPlayerURI(url:String, local:Boolean):String
+ {
+
+ // First strip off the search string and any url fragments so
+ // they will not be decoded/encoded.
+ // Next decode the url.
+ // Before returning the decoded or encoded string add the search
+ // string and url fragment back.
+ var searchStringIndex:int;
+ var fragmentUrlIndex:int;
+ var decoded:String = url;
+
+ if ((searchStringIndex = decoded.indexOf("?")) != -1 )
+ {
+ decoded = decoded.substring(0, searchStringIndex);
+ }
+
+ if ((fragmentUrlIndex = decoded.indexOf("#")) != -1 )
+ decoded = decoded.substring(0, fragmentUrlIndex);
+
+ try
+ {
+ // decode the url
+ decoded = decodeURI(decoded);
+ }
+ catch (e:Error)
+ {
+ // malformed url, but some are legal on the file system
+ }
+
+ // create the string to hold the the search string url fragments.
+ var extraString:String = null;
+ if (searchStringIndex != -1 || fragmentUrlIndex != -1)
+ {
+ var index:int = searchStringIndex;
+
+ if (searchStringIndex == -1 ||
+ (fragmentUrlIndex != -1 && fragmentUrlIndex < searchStringIndex))
+ {
+ index = fragmentUrlIndex;
+ }
+
+ extraString = url.substr(index);
+ }
+
+ if (local && flash.system.Capabilities.playerType == "ActiveX")
+ {
+ if (extraString)
+ return decoded + extraString;
+ else
+ return decoded;
+ }
+
+ if (extraString)
+ return encodeURI(decoded) + extraString;
+ else
+ return encodeURI(decoded);
+ }
+
+ /**
+ * @private
+ * Get the parent module factory.
+ *
+ * @param moduleFactory The module factory to get the parent of.
+ *
+ * @return the parent module factory if available, null otherwise.
+ */
+ private static function getParentModuleFactory(moduleFactory:IFlexModuleFactory):IFlexModuleFactory
+ {
+ var request:Request = new Request(Request.GET_PARENT_FLEX_MODULE_FACTORY_REQUEST);
+ DisplayObject(moduleFactory).dispatchEvent(request);
+ return request.value as IFlexModuleFactory;
+ }
+
+ /**
+ * @private
+ * Resolve the application domain target.
+ *
+ * @param rsl to resolve.
+ * @param moduleFactory The module factory loading the RSLs.
+ * @param currentModuleFactory The module factory to search for placeholders.
+ * @param parentModuleFactory The rsl's parent module factory.
+ * @param topLevelModuleFactory The top-level module factory.
+ *
+ * @return true if the application domain target was resolved,
+ * false otherwise.
+ */
+ COMPILE::LATER
+ private static function resolveApplicationDomainTarget(rsl:Array,
+ moduleFactory:IFlexModuleFactory,
+ currentModuleFactory:IFlexModuleFactory,
+ parentModuleFactory:IFlexModuleFactory,
+ topLevelModuleFactory:IFlexModuleFactory):Boolean
+ {
+ var resolvedRSL:Boolean = false;
+ var targetModuleFactory:IFlexModuleFactory = null;
+
+ var applicationDomainTarget:String = rsl[0].applicationDomainTarget;
+ if (isLoadedIntoTopLevelApplicationDomain(moduleFactory))
+ {
+ targetModuleFactory = topLevelModuleFactory;
+ }
+ else if (applicationDomainTarget == ApplicationDomainTarget.DEFAULT)
+ {
+ if (hasPlaceholderRSL(currentModuleFactory, rsl[0].digest))
+ {
+ targetModuleFactory = currentModuleFactory;
+ }
+ }
+ else if (applicationDomainTarget == ApplicationDomainTarget.TOP_LEVEL)
+ {
+ targetModuleFactory = topLevelModuleFactory;
+ }
+ else if (applicationDomainTarget == ApplicationDomainTarget.CURRENT)
+ {
+ resolvedRSL = true;
+ }
+ else if (applicationDomainTarget == ApplicationDomainTarget.PARENT)
+ {
+ // If there is no parent, ignore the target and load into the current
+ // app domain.
+ targetModuleFactory = parentModuleFactory;
+ }
+ else
+ {
+ resolvedRSL = true; // bogus target, load into current application domain
+ }
+
+ if (resolvedRSL || targetModuleFactory)
+ {
+ if (targetModuleFactory)
+ updateRSLModuleFactory(rsl, targetModuleFactory);
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * @private
+ * Determine if the moduleFactory has loaded an rsl that matches the
+ * specified digest.
+ *
+ * @param moduleFactory The module factory to search.
+ * @param digest The digest to search for.
+ * @return true if a loaded rsl matching the digest was found.
+ */
+ COMPILE::LATER
+ private static function isRSLLoaded(moduleFactory:IFlexModuleFactory, digest:String):Boolean
+ {
+ var preloadedRSLs:Dictionary = moduleFactory.preloadedRSLs;
+
+ if (preloadedRSLs)
+ {
+ // loop over the rsls to find a matching digest
+ for each (var rsl:Vector.<RSLData> in preloadedRSLs)
+ {
+ var n:int = rsl.length;
+ for (var i:int = 0; i < n; i++)
+ {
+ if (rsl[i].digest == digest)
+ {
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * @private
+ *
+ * Determine if the moduleFactory has a placeholder rsl that matches the
+ * specified digest.
+ *
+ * @param moduleFactory The module factory to search.
+ * @param digest The digest to search for.
+ * @return true if a placeholder rsl matching the digest was found.
+ */
+ private static function hasPlaceholderRSL(moduleFactory:IFlexModuleFactory, digest:String):Boolean
+ {
+ var phRSLs:Array = moduleFactory.info()["placeholderRsls"];
+
+ if (phRSLs)
+ {
+ // loop over the rsls to find a matching digest
+ var n:int = phRSLs.length;
+ for (var i:int = 0; i < n; i++)
+ {
+ var rsl:Object = phRSLs[i];
+ var m:int = rsl.length;
+ for (var j:int = 0; j < m; j++)
+ {
+ if (rsl[j].digest == digest)
+ {
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * @private
+ * Test if a module factory has been loaded into the top-level application domain.
+ *
+ * @return true if loaded into the top-level application domain, false otherwise.
+ */
+ private static function isLoadedIntoTopLevelApplicationDomain(moduleFactory:IFlexModuleFactory):Boolean
+ {
+ if (moduleFactory is DisplayObject)
+ {
+ var displayObject:DisplayObject = DisplayObject(moduleFactory);
+ var loaderInfo:LoaderInfo = displayObject.loaderInfo;
+ if (loaderInfo && loaderInfo.applicationDomain &&
+ loaderInfo.applicationDomain.parentDomain == null)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * @private
+ *
+ * Update the module factory of an rsl, both the primary rsl and all
+ * failover rsls.
+ *
+ * @param rsl One RSL represented by an array of RSLData. The
+ * first element in the array is the primary rsl, the others are failovers.
+ * @param moduleFactory The moduleFactory to set in the primary and
+ * failover rsls.
+ */
+ private static function updateRSLModuleFactory(rsl:Array, moduleFactory:IFlexModuleFactory):void
+ {
+ var n:int = rsl.length;
+ for (var i:int = 0; i < n; i++)
+ {
+ rsl[i].moduleFactory = moduleFactory;
+ }
+ }
+
+ /**
+ * @private
+ *
+ * Strip off the DYNAMIC string(s) appended to the url.
+ */
+ private static function dynamicURLFilter(url:String, index:int):String
+ {
+ return url.substring(0, index);
+ }
+
+ /**
+ * @private
+ *
+ * Add together the protocol plus everything after "/[[IMPORT]]/".
+ */
+ private static function importURLFilter(url:String, index:int):String
+ {
+ var protocolIndex:int = url.indexOf("://");
+ return url.substring(0,protocolIndex + 3) + url.substring(index + 12);
+ }
+
+ }
+}
\ No newline at end of file