Pashmina, Please respond to my questions. It’s important to understand if there was a good technical reason for this change.
Thanks, Harbs > On Jan 17, 2025, at 3:46 PM, Harbs <harbs.li...@gmail.com> wrote: > > Also: > > Any breaking changes really should be discussed before committing. > >> On Jan 17, 2025, at 2:58 PM, Harbs <harbs.li...@gmail.com> wrote: >> >> I just noticed this: >> >>> mxmlDocument in UIBase >> >> >> UIBase is not **supposed** to have mxmlDocument. >> >> Why was this done/changed? >> >>> On Jan 13, 2025, at 10:58 PM, pushminak...@apache.org wrote: >>> >>> This is an automated email from the ASF dual-hosted git repository. >>> >>> pushminakazi pushed a commit to branch develop >>> in repository https://gitbox.apache.org/repos/asf/royale-asjs.git >>> >>> >>> The following commit(s) were added to refs/heads/develop by this push: >>> new 9bf2aac596 Added parentApplication and mxmlDocument in UIBase and >>> some other changes >>> 9bf2aac596 is described below >>> >>> commit 9bf2aac59699b4b29517d12727253b92aa684511 >>> Author: pashminakazi <pashminak...@gmail.com> >>> AuthorDate: Tue Jan 14 01:54:49 2025 +0500 >>> >>> Added parentApplication and mxmlDocument in UIBase and some other changes >>> --- >>> .../projects/Basic/src/main/royale/BasicClasses.as | 3 + >>> .../royale/org/apache/royale/core/IChildList.as | 301 >>> +++++++++++++++++++++ >>> .../royale/org/apache/royale/core/IUIBaseBasic.as} | 9 +- >>> .../main/royale/org/apache/royale/core/UIBase.as | 252 +++++++++++++++++ >>> .../html/supportClasses/TextFieldItemRenderer.as | 33 +++ >>> .../org/apache/royale/managers/ISystemManager.as | 135 +++++++++ >>> .../main/royale/org/apache/royale/core/IUIBase.as | 7 + >>> .../royale/org/apache/royale/core/UIButtonBase.as | 33 +++ >>> .../royale/org/apache/royale/jewel/DateField.as | 86 +++++- >>> .../AdvancedDataGridItemRenderer.as | 4 +- >>> .../dataGridClasses/DataGridItemRenderer.as | 4 +- >>> .../src/main/royale/mx/core/UIComponent.as | 8 +- >>> .../src/main/royale/mx/managers/SystemManager.as | 28 +- >>> .../src/main/royale/mx/core/IUIComponent.as | 4 +- >>> 14 files changed, 889 insertions(+), 18 deletions(-) >>> >>> diff --git a/frameworks/projects/Basic/src/main/royale/BasicClasses.as >>> b/frameworks/projects/Basic/src/main/royale/BasicClasses.as >>> index 91a45a7911..16ed5c9cad 100644 >>> --- a/frameworks/projects/Basic/src/main/royale/BasicClasses.as >>> +++ b/frameworks/projects/Basic/src/main/royale/BasicClasses.as >>> @@ -365,6 +365,9 @@ internal class BasicClasses >>> } >>> >>> import org.apache.royale.html.SimpleTextHighlighter; >>> SimpleTextHighlighter; >>> + import org.apache.royale.managers.ISystemManager; ISystemManager; >>> + import org.apache.royale.core.IChildList; IChildList; >>> + import org.apache.royale.core.IUIBaseBasic; IUIBaseBasic; >>> } >>> >>> } >>> diff --git >>> a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IChildList.as >>> >>> b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IChildList.as >>> new file mode 100644 >>> index 0000000000..5bcc0bd44a >>> --- /dev/null >>> +++ >>> b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IChildList.as >>> @@ -0,0 +1,301 @@ >>> +//////////////////////////////////////////////////////////////////////////////// >>> +// >>> +// 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 org.apache.royale.core >>> +{ >>> + >>> +COMPILE::SWF >>> +{ >>> + import flash.display.DisplayObject; >>> +} >>> +import org.apache.royale.core.IUIBase; >>> + >>> +/** >>> + * The IChildList interface defines the properties and methods >>> + * for accessing and manipulating child lists, which are subsets >>> + * of a DisplayObjectContainer's children. >>> + * >>> + * <p>As an example, consider the Container class. >>> + * It overrides DisplayObjectContainer APIs such as the >>> + * <code>numChildren</code> and <code>getChildAt()</code> methods >>> + * to access only "content" children, which are the controls >>> + * and other containers that you put inside it. >>> + * But a Container can also have additional children >>> + * created automatically by the framework, such as a background or border >>> + * skin and scrollbars. >>> + * So Container exposes a property called <code>rawChildren</code> >>> + * of type IChildList, which lets you access all its children, >>> + * not just the content children.</p> >>> + * >>> + * <p>As another example, the SystemManager class is a >>> DisplayObjectContainer >>> + * whose children are partitioned into various layers: >>> + * normal children like the Application are on the bottom, >>> + * popups above them, tooltips above them, and cursors on the top. >>> + * The SystemManager class has properties named >>> <code>popUpChildren</code>, >>> + * <code>toolTipChildren</code>, and <code>cursorChildren</code> >>> + * which let you access these layers, and the type of each of these >>> + * properties is IChildList. >>> + * Therefore, you can count the number of popups using the >>> + * <code>systemManager.popUpChildren.numChildren</code> property, >>> + * insert another DisplayObject into the tooltip layer using the >>> + * <code>systemManager.toolTipChildren.addChild()</code> method, and so >>> on.</p> >>> + * >>> + * @see mx.core.Container#rawChildren >>> + * @see mx.managers.SystemManager#rawChildren >>> + * @see mx.managers.SystemManager#popUpChildren >>> + * @see mx.managers.SystemManager#toolTipChildren >>> + * @see mx.managers.SystemManager#cursorChildren >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> +public interface IChildList >>> +{ >>> + >>> //-------------------------------------------------------------------------- >>> + // >>> + // Properties >>> + // >>> + >>> //-------------------------------------------------------------------------- >>> + >>> + //---------------------------------- >>> + // numChildren >>> + //---------------------------------- >>> + >>> + /** >>> + * The number of children in this child list. >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + function get numChildren():int; >>> + >>> + >>> //-------------------------------------------------------------------------- >>> + // >>> + // Methods >>> + // >>> + >>> //-------------------------------------------------------------------------- >>> + >>> + /** >>> + * Adds a child DisplayObject after the end of this child list. >>> + * >>> + * <p>Calling <code>childList.addChild(child)</code> is the same as >>> calling >>> + * <code>childList.addChild(child, childList.numChildren)</code> >>> + * After it has been added, its index of the new child >>> + * will be <code>(child.numChildren - 1)</code></p> >>> + * >>> + * @param child The DisplayObject to add as a child. >>> + * >>> + * @return The child that was added; this is the same >>> + * as the argument passed in. >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + [SWFOverride(params="flash.display.DisplayObject", >>> altparams="org.apache.royale.core.UIBase", >>> returns="flash.display.DisplayObject")] >>> + function addChild(child:IUIBase):IUIBase; >>> + >>> + /** >>> + * Adds a child DisplayObject to this child list at the index >>> specified. >>> + * An index of 0 represents the beginning of the DisplayList, >>> + * and an index of <code>numChildren</code> represents the end. >>> + * >>> + * <p>Adding a child anywhere except at the end of a child list >>> + * will increment the indexes of children that were previously >>> + * at that index or at higher indices.</p> >>> + * >>> + * @param child The DisplayObject to add as a child. >>> + * >>> + * @param index The index to add the child at. >>> + * >>> + * @return The child that was added; this is the same >>> + * as the <code>child</code> argument passed in. >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + [SWFOverride(params="flash.display.DisplayObject,int", >>> altparams="org.apache.royale.core.UIBase,int", >>> returns="flash.display.DisplayObject")] >>> + function addChildAt(child:IUIBase, index:int):IUIBase; >>> + >>> + /** >>> + * Removes the specified child DisplayObject from this child list. >>> + * >>> + * <p>Removing a child anywhere except from the end of a child list >>> + * will decrement the indexes of children that were at higher >>> indices.</p> >>> + * >>> + * <p>The removed child will have its parent set to null and will be >>> + * garbage collected if no other references to it exist.</p> >>> + * >>> + * @param child The DisplayObject to remove. >>> + * >>> + * @return The child that was removed; this is the same >>> + * as the argument passed in. >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + [SWFOverride(params="flash.display.DisplayObject", >>> altparams="mx.core.UIComponent", returns="flash.display.DisplayObject")] >>> + function removeChild(child:IUIBase):IUIBase; >>> + >>> + /** >>> + * Removes the child DisplayObject at the specified index >>> + * from this child list. >>> + * >>> + * <p>Removing a child anywhere except from the end of a child list >>> + * will decrement the indexes of children that were at higher >>> indices.</p> >>> + * >>> + * <p>The removed child will have its parent set to null and will be >>> + * garbage collected if no other references to it exist.</p> >>> + * >>> + * @param index The child index of the DisplayObject to remove. >>> + * >>> + * @return The child that was removed. >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + [SWFOverride(returns="flash.display.DisplayObject")] >>> + function removeChildAt(index:int):IUIBase; >>> + >>> + /** >>> + * Gets the child DisplayObject at the specified index in this child >>> list. >>> + * >>> + * @param index An integer from 0 to <code>(numChildren - 1)</code> >>> + * that specifies the index of a child in this child list. >>> + * >>> + * @return The child at the specified index. >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + [SWFOverride(returns="flash.display.DisplayObject")] >>> + function getChildAt(index:int):IUIBase; >>> + >>> + /** >>> + * Gets the child DisplayObject with the specified name >>> + * in this child list. >>> + * >>> + * @param name The name of the child to return. >>> + * >>> + * @return The child with the specified name. >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + [SWFOverride(returns="flash.display.DisplayObject")] >>> + function getChildByName(name:String):IUIBase; >>> + >>> + /** >>> + * Gets the index of a specific child in this child list. >>> + * >>> + * <p>The first child in the child list has an index of 0, >>> + * the second child has an index of 1, and the last child >>> + * has an index of <code>(numChildren - 1)</code>.</p> >>> + * >>> + * <p>If <code>getChildIndex(myChild)</code> returns 5, >>> + * then <code>myView.getChildAt(5)</code> returns >>> + * <code>myChild</code>.</p> >>> + * >>> + * <p>If you add a child by calling the <code>addChild()</code> method, >>> + * the new child's index is equal to the largest index among the >>> + * existing children plus one.</p> >>> + * >>> + * <p>You can insert a child at a specified index by using the >>> + * <code>addChildAt()</code> method >>> + * In that case the children previously at that index and higher >>> + * indices have their index increased by 1 so that all >>> + * children are indexed from 0 to <code>(numChildren - 1)</code>.</p> >>> + * >>> + * <p>If you remove a child by calling the <code>removeChild()</code> >>> + * or <code>removeChildAt()</code> method, then the children >>> + * at higher indices have their index decreased by 1 so that >>> + * all children are indexed from 0 to <code>(numChildren - >>> 1)</code>.</p> >>> + * >>> + * <p>If you change a child's index by calling the >>> + * <code>setChildIndex()</code> method, then the children between >>> + * the old index and the new index, inclusive, have their indexes >>> + * adjusted so that all children are indexed from >>> + * 0 to <code>(numChildren - 1)</code>.</p> >>> + * >>> + * @param child The child whose index to get. >>> + * >>> + * @return The index of the child, which is an integer >>> + * between 0 and <code>(numChildren - 1)</code>. >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + [SWFOverride(params="flash.display.DisplayObject", >>> altparams="org.apache.royale.core.UIBase")] >>> + function getChildIndex(child:IUIBase):int; >>> + >>> + /** >>> + * Changes the index of a particular child in this child list. >>> + * See the <code>getChildIndex()</code> method for a >>> + * description of the child's index. >>> + * >>> + * @param child The child whose index to set. >>> + * >>> + * @param newIndex The new index for the specified child. >>> + * This must be an integer between zero and <code>(numChildren - >>> 1)</code>. >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + [SWFOverride(params="flash.display.DisplayObject,int", >>> altparams="org.apache.royale.core.UIBase,int")] >>> + function setChildIndex(child:IUIBase, newIndex:int):void; >>> + >>> + /** >>> + * Determines if a DisplayObject is in this child list, >>> + * or is a descendant of an child in this child list. >>> + * >>> + * @param child The DisplayObject to test. >>> + * >>> + * @return <code>true</code> if the DisplayObject is in this child list >>> + * or is a descendant of an child in this child list; >>> + * <code>false</code> otherwise. >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + [SWFOverride(params="flash.display.DisplayObject", >>> altparams="org.apache.royale.core.UIBase")] >>> + function contains(child:IUIBase):Boolean; >>> +} >>> + >>> +} >>> diff --git >>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IUIBase.as >>> >>> b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IUIBaseBasic.as >>> similarity index 95% >>> copy from >>> frameworks/projects/Core/src/main/royale/org/apache/royale/core/IUIBase.as >>> copy to >>> frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IUIBaseBasic.as >>> index f35f6d0049..c36e1e58eb 100644 >>> --- >>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IUIBase.as >>> +++ >>> b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/IUIBaseBasic.as >>> @@ -28,7 +28,7 @@ package org.apache.royale.core >>> * @playerversion AIR 2.6 >>> * @productversion Royale 0.0 >>> */ >>> - public interface IUIBase extends IStrand, IEventDispatcher, IChild >>> + public interface IUIBaseBasic extends IStrand, IEventDispatcher, IChild >>> { >>> >>> /** >>> @@ -53,6 +53,13 @@ package org.apache.royale.core >>> function get alpha():Number; >>> function set alpha(value:Number):void; >>> >>> + function get mxmlDocument():Object >>> + >>> + /** >>> + * @private >>> + */ >>> + function set mxmlDocument(value:Object):void >>> + >>> /** >>> * The x co-ordinate or left side position of the bounding box. >>> * >>> diff --git >>> a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/UIBase.as >>> >>> b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/UIBase.as >>> index 522d5d5da4..159edfcfea 100644 >>> --- >>> a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/UIBase.as >>> +++ >>> b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/UIBase.as >>> @@ -35,6 +35,7 @@ package org.apache.royale.core >>> import org.apache.royale.events.ValueChangeEvent; >>> import org.apache.royale.utils.loadBeadFromValuesManager; >>> import org.apache.royale.utils.sendEvent; >>> + import org.apache.royale.managers.ISystemManager; >>> >>> COMPILE::JS >>> { >>> @@ -212,6 +213,257 @@ package org.apache.royale.core >>> createElement(); >>> } >>> } >>> + >>> + //---------------------------------- >>> + // parentApplication >>> + //---------------------------------- >>> + >>> + [Bindable("initialize")] >>> + >>> + /* >>> + * Note: >>> + * There are two reasons that 'parentApplication' is typed as >>> Object >>> + * rather than as Application. The first is that typing it as >>> Application >>> + * would make UIComponent dependent on Application, slowing >>> down compile >>> + * times not only for SWCs for also for MXML and AS >>> components. The >>> + * second is that authors would not be able to access >>> properties and >>> + * methods in the <Script> of their <Application> without >>> casting it >>> + * to their application's subclass, as in >>> + * MyApplication(paentApplication).myAppMethod(). >>> + * Therefore we decided to dispense with strict typing for >>> + * 'parentApplication'. >>> + */ >>> + /** >>> + * A reference to the Application object that contains this >>> UIComponent >>> + * instance. >>> + * This Application object might exist in a SWFLoader control >>> in another >>> + * Application, and so on, creating a chain of Application >>> objects that >>> + * can be walked using parentApplication. >>> + * >>> + * <p>The <code>parentApplication</code> property of an >>> Application is never itself; >>> + * it is either the Application into which it was loaded or >>> null >>> + * (for the top-level Application).</p> >>> + * >>> + * <p>Walking the application chain using the >>> <code>parentApplication</code> >>> + * property is similar to walking the document chain using the >>> + * <code>parentDocument</code> property. >>> + * You can access the top-level application using the >>> + * <code>application</code> property of the Application >>> class.</p> >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + public function get parentApplication():Object >>> + { >>> + // Look for the SystemManager's document, >>> + // which should be the Application. >>> + var o:Object = systemManagerBasic.mxmlDocument; >>> + >>> + // If this UIBase is its own root, then it is an >>> Application. >>> + // We want to return its parent Application, or null >>> + // (if it has no parent because it is the top-level >>> Application). >>> + // The hierarchy in this situation looks something like >>> this: >>> + // >>> + // SystemManager >>> + // Application >>> + // SomeContainer >>> + // Loader >>> + // Loaded App's SystemManager >>> + // Application >>> + // ThisComponent >>> + if (o == this) >>> + { >>> + var p:UIBase = o.systemManagerBasic.parent as >>> UIBase; >>> + o = p ? p.systemManagerBasic.mxmlDocument : >>> null; >>> + } >>> + >>> + return o; >>> + } >>> + >>> + //---------------------------------- >>> + // parentComponent >>> + //---------------------------------- >>> + >>> + [Bindable("initialize")] >>> + >>> + /** >>> + * A reference to the parent component object for this >>> UIComponent. >>> + * A component object is a UIComponent at the top of >>> the hierarchy >>> + * of a Flex application, MXML component, or AS >>> component. >>> + * >>> + * <p>For the Application object, the >>> <code>parentDocument</code> >>> + * property is null. >>> + * This property is useful in MXML scripts to go up a >>> level >>> + * in the chain of document objects. >>> + * It can be used to walk this chain using >>> + * <code>parentDocument.parentDocument</code>, and so >>> on.</p> >>> + * >>> + * <p>It is typed as Object so that authors can access >>> properties >>> + * and methods on ancestor document objects without >>> casting.</p> >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + public function get parentMxmlDocument():Object >>> + { >>> + if (mxmlDocument == this) >>> + { >>> + var p:IUIBase = parent as IUIBase; >>> + if (p) >>> + return p.mxmlDocument; >>> + >>> + var sm:ISystemManager = parent as >>> ISystemManager; >>> + if (sm) >>> + return sm.mxmlDocument; >>> + >>> + return null; >>> + } >>> + else >>> + { >>> + return mxmlDocument; >>> + } >>> + } >>> + >>> + //---------------------------------- >>> + // systemManager >>> + //---------------------------------- >>> + >>> + /** >>> + * @private >>> + * Storage for the systemManager property. >>> + * Set by the SystemManager so that each UIBase >>> + * has a references to its SystemManager >>> + */ >>> + private var _systemManager:ISystemManager; >>> + >>> + [Inspectable(environment="none")] >>> + >>> + /** >>> + * Returns the SystemManager object used by this component. >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + public function get systemManagerBasic():ISystemManager >>> + { >>> + // TODO >>> + if (_systemManager == null && parent != null && parent >>> is UIBase) >>> + _systemManager = (parent as >>> UIBase).systemManagerBasic; >>> + >>> + return _systemManager; >>> + } >>> + >>> + /** >>> + * @private >>> + */ >>> + public function set >>> systemManagerBasic(value:ISystemManager):void >>> + { >>> + // TODO >>> + _systemManager = value; >>> + } >>> + >>> + private var processedMXMLDescriptors : Boolean; >>> + >>> + private var _mxmlDescriptor:Array; >>> + >>> + /** >>> + * @copy org.apache.royale.core.Application#MXMLDescriptor >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 10.2 >>> + * @playerversion AIR 2.6 >>> + * @productversion Royale 0.8 >>> + */ >>> + public function get MXMLDescriptorBasic():Array >>> + { >>> + return _mxmlDescriptor; >>> + } >>> + >>> + >>> + /** >>> + * @private >>> + */ >>> + // COMPILE::SWF >>> + // { override } >>> + public function get numChildrenBasic():int >>> + { >>> + return numElements; >>> + } >>> + >>> + /** >>> + * @private >>> + * @royaleignorecoercion org.apache.royale.core.IUIBase >>> + */ >>> + // [SWFOverride(returns="flash.display.DisplayObject")] >>> + // COMPILE::SWF >>> + // { override } >>> + public function getChildAtBasic(index:int):IUIBase >>> + { >>> + return getElementAt(index) as IUIBase; >>> + } >>> + >>> + >>> + public var _mxmlDocument:Object; >>> + >>> + [Inspectable(environment="none")] >>> + >>> + /** >>> + * A reference to the document object associated with this >>> UIComponent. >>> + * A document object is an Object at the top of the hierarchy >>> of a >>> + * Flex application, MXML component, or AS component. >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + public function get mxmlDocument():Object >>> + { >>> + if (!_mxmlDocument && MXMLDescriptorBasic != null) >>> + _mxmlDocument = this; >>> + return _mxmlDocument; >>> + } >>> + >>> + public static var topLevelApplication:Object; >>> + >>> + /** >>> + * A reference to the document object associated with this >>> UIComponent. >>> + * A document object is an Object at the top of the hierarchy >>> of a >>> + * Flex application, MXML component, or AS component. >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + public function set mxmlDocument(value:Object):void >>> + { >>> + var n:int = numChildrenBasic; >>> + for (var i:int = 0; i < n; i++) >>> + { >>> + var child:IUIBase = getChildAtBasic(i) as >>> IUIBase; >>> + if (!child) >>> + continue; >>> + // JS subtrees will point back to the >>> component. Ignore those. >>> + if (child == this) >>> + continue; >>> + >>> + if (child.mxmlDocument == _mxmlDocument || >>> + // child.mxmlDocument == >>> FlexGlobals.topLevelApplication) >>> + child.mxmlDocument == >>> topLevelApplication) >>> + { >>> + child.mxmlDocument = value; >>> + } >>> + } >>> + >>> + _mxmlDocument = value; >>> + } >>> >>> COMPILE::SWF >>> public function get $displayObject():DisplayObject >>> diff --git >>> a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextFieldItemRenderer.as >>> >>> b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextFieldItemRenderer.as >>> index 3c98bd6bbd..09c610ce2c 100644 >>> --- >>> a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextFieldItemRenderer.as >>> +++ >>> b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextFieldItemRenderer.as >>> @@ -69,6 +69,39 @@ package org.apache.royale.html.supportClasses >>> >>> MouseEventConverter.setupInstanceConverters(this); >>> } >>> + >>> + //---------------------------------- >>> + // document >>> + //---------------------------------- >>> + >>> + /** >>> + * @private >>> + * Storage for the enabled property. >>> + */ >>> + private var _mxmlDocument:Object; >>> + >>> + /** >>> + * A reference to the document object associated with this >>> UITextField object. >>> + * A document object is an Object at the top of the hierarchy >>> of a Flex application, >>> + * MXML component, or AS component. >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + public function get mxmlDocument():Object >>> + { >>> + return _mxmlDocument; >>> + } >>> + >>> + /** >>> + * @private >>> + */ >>> + public function set mxmlDocument(value:Object):void >>> + { >>> + _mxmlDocument = value; >>> + } >>> >>> public var highlightColor:uint = 0xCEDBEF; >>> public var selectedColor:uint = 0xA8C6EE; >>> diff --git >>> a/frameworks/projects/Basic/src/main/royale/org/apache/royale/managers/ISystemManager.as >>> >>> b/frameworks/projects/Basic/src/main/royale/org/apache/royale/managers/ISystemManager.as >>> new file mode 100644 >>> index 0000000000..4dbdd2c84b >>> --- /dev/null >>> +++ >>> b/frameworks/projects/Basic/src/main/royale/org/apache/royale/managers/ISystemManager.as >>> @@ -0,0 +1,135 @@ >>> +//////////////////////////////////////////////////////////////////////////////// >>> +// >>> +// 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 org.apache.royale.managers >>> +{ >>> + >>> +import org.apache.royale.events.IEventDispatcher; >>> +import org.apache.royale.core.IChildList; >>> +//import mx.core.UIComponent; >>> +//import flash.display.Stage; >>> +/** >>> + * An ISystemManager manages an "application window". >>> + * Every application that runs on the desktop or in a browser >>> + * has an area where the visuals of the application will be >>> + * displayed. It may be a window in the operating system >>> + * or an area within the browser. That is an "application window" >>> + * and different from an instance of <code>mx.core.Application</code>, >>> which >>> + * is the main "top-level" window within an application. >>> + * >>> + * <p>Every application has an ISystemManager. >>> + * The ISystemManager sends an event if >>> + * the size of the application window changes (you cannot change it from >>> + * within the application, but only through interaction with the operating >>> + * system window or browser). It parents all displayable items within the >>> + * application, such as the main mx.core.Application instance and all >>> popups, >>> + * tooltips, cursors, an so on. Any object parented by the >>> ISystemManager is >>> + * considered to be a "top-level" window, even tooltips and cursors.</p> >>> + * >>> + * <p>The ISystemManager also switches focus between top-level windows >>> + * if there are more than one IFocusManagerContainer displayed and users >>> + * are interacting with components within the IFocusManagerContainers.</p> >>> + * >>> + * <p>All keyboard and mouse activity that is not expressly trapped is >>> seen >>> + * by the ISystemManager, making it a good place to monitor activity >>> + * should you need to do so.</p> >>> + * >>> + * <p>If an application is loaded into another application, an >>> ISystemManager >>> + * will still be created, but will not manage an "application window", >>> + * depending on security and domain rules. >>> + * Instead, it will be the <code>content</code> of the >>> <code>Loader</code> >>> + * that loaded it and simply serve as the parent of the >>> sub-application</p> >>> + * >>> + * <p>The ISystemManager maintains multiple lists of children, one each >>> for >>> + * tooltips, cursors, popup windows. >>> + * This is how it ensures that popup windows "float" above the main >>> + * application windows and that tooltips "float" above that >>> + * and cursors above that. >>> + * If you examine the <code>numChildren</code> property >>> + * or <code>getChildAt()</code> method on the ISystemManager >>> + * you are accessing the main application window and any other windows >>> + * that aren't popped up. >>> + * To get the list of all windows, including popups, tooltips and cursors, >>> + * use the <code>rawChildren</code> property.</p> >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Royale 0.9.4 >>> + */ >>> +public interface ISystemManager extends IEventDispatcher, IChildList /*, >>> IFlexModuleFactory */ >>> +{ >>> + >>> //-------------------------------------------------------------------------- >>> + // >>> + // Properties >>> + // >>> + >>> //-------------------------------------------------------------------------- >>> + >>> + //---------------------------------- >>> + // component >>> + //---------------------------------- >>> + >>> + /** >>> + * A reference to the document object. >>> + * A document object is an Object at the top of the hierarchy of a >>> + * Flex application, MXML component, or AS component. >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Royale 0.9.4 >>> + */ >>> + function get mxmlDocument():Object; >>> + >>> + /** >>> + * @private >>> + */ >>> + function set mxmlDocument(value:Object):void; >>> + function get rawChildren():IChildList; >>> + function get numModalWindows():int; >>> + function set numModalWindows(value:int):void; >>> + /* COMPILE::SWF { >>> + function get stage():Stage; >>> + } >>> + COMPILE::JS { >>> + function get stage():Object; >>> + } */ >>> + >>> + >>> + >>> //-------------------------------------------------------------------------- >>> + // >>> + // Methods >>> + // >>> + >>> //-------------------------------------------------------------------------- >>> + /** >>> + * Gets the system manager that is the root of all >>> + * top level system managers in this SecurityDomain. >>> + * >>> + * @return the highest-level systemManager in the sandbox >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Royale 0.9.4 >>> + */ >>> + function getSandboxRoot():Object; >>> + >>> +} >>> + >>> +} >>> diff --git >>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IUIBase.as >>> >>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IUIBase.as >>> index f35f6d0049..f87437804f 100644 >>> --- >>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IUIBase.as >>> +++ >>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IUIBase.as >>> @@ -42,6 +42,13 @@ package org.apache.royale.core >>> */ >>> function addedToParent():void; >>> >>> + function get mxmlDocument():Object >>> + >>> + /** >>> + * @private >>> + */ >>> + function set mxmlDocument(value:Object):void >>> + >>> /** >>> * The alpha or opacity in the range of 0 to 1. >>> * >>> diff --git >>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/UIButtonBase.as >>> >>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/UIButtonBase.as >>> index 38bc88c599..1612b18866 100644 >>> --- >>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/UIButtonBase.as >>> +++ >>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/UIButtonBase.as >>> @@ -97,6 +97,39 @@ package org.apache.royale.core >>> { >>> >>> } >>> + >>> + //---------------------------------- >>> + // document >>> + //---------------------------------- >>> + >>> + /** >>> + * @private >>> + * Storage for the enabled property. >>> + */ >>> + private var _mxmlDocument:Object; >>> + >>> + /** >>> + * A reference to the document object associated with this >>> UITextField object. >>> + * A document object is an Object at the top of the hierarchy >>> of a Flex application, >>> + * MXML component, or AS component. >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + public function get mxmlDocument():Object >>> + { >>> + return _mxmlDocument; >>> + } >>> + >>> + /** >>> + * @private >>> + */ >>> + public function set mxmlDocument(value:Object):void >>> + { >>> + _mxmlDocument = value; >>> + } >>> >>> private var _x:Number; >>> >>> diff --git >>> a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DateField.as >>> >>> b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DateField.as >>> index 0d6fa25698..b378646c1e 100644 >>> --- >>> a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DateField.as >>> +++ >>> b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DateField.as >>> @@ -24,6 +24,7 @@ package org.apache.royale.jewel >>> import org.apache.royale.core.StyledUIBase; >>> import org.apache.royale.events.Event; >>> import org.apache.royale.utils.loadBeadFromValuesManager; >>> + import org.apache.royale.jewel.beads.views.DateFieldView; >>> >>> /** >>> * The change event is dispatched when the selectedDate is changed. >>> @@ -135,5 +136,88 @@ package org.apache.royale.jewel >>> { >>> _dateFormat = value.toUpperCase(); >>> } >>> - } >>> + >>> + //---------------------------------- >>> + // formatString >>> + //---------------------------------- >>> + >>> + /** >>> + * @private >>> + * Storage for the formatString property. >>> + */ >>> + // private var _formatString:String = "MM/DD/YYYY"; >>> + >>> + // [Bindable("formatStringChanged")] >>> + // [Inspectable(defaultValue="null")] >>> + >>> + // /** >>> + // * @private >>> + // */ >>> + // private var formatStringOverride:String; >>> + >>> + /** >>> + * The format of the displayed date in the text field. >>> + * This property can contain any combination of >>> <code>"M"</code>, >>> + * <code>"MM"</code>, <code>"MMM"</code> (3 letter month >>> names), >>> + * <code>"MMMM"</code> (month names), <code>"D"</code>, >>> <code>"DD"</code>, >>> + * <code>"YY"</code>, <code>"YYYY"</code>, >>> + * delimiter, and punctuation characters. >>> + * >>> + * <p>Only upper case characters are supported.</p> >>> + * >>> + * @default "MM/DD/YYYY" >>> + * >>> + * @langversion 3.0 >>> + * @playerversion Flash 9 >>> + * @playerversion AIR 1.1 >>> + * @productversion Flex 3 >>> + */ >>> + // public function get formatString():String >>> + // { >>> + // return _formatString; >>> + // } >>> + >>> + // /** >>> + // * @private >>> + // */ >>> + // public function set formatString(value:String):void >>> + // { >>> + // formatStringOverride = value; >>> + >>> + // if (value != _formatString) >>> + // { >>> + // _formatString = value /* != null ? >>> + // value : >>> + // >>> resourceManager.getString( >>> + // >>> "SharedResources", "dateFormat")*/; >>> + // var formatter:IBead = >>> getBeadByType(IFormatter); >>> + // if (formatter) >>> + // removeBead(formatter); >>> + // if (value == "MM/DD/YYYY") >>> + // addBead(new DateFormatMMDDYYYY()); >>> + // else if (value == "DD/MM/YYYY") >>> + // addBead(new DateFormatDDMMYYYY()); >>> + // else if (value == "YYYY/MM/DD") >>> + // addBead(new DateFormatYYYYMMDD()); >>> + // } >>> + // } >>> + >>> + /** >>> + * @private >>> + */ >>> + public function get text():String >>> + { >>> + // var s:String = ((view as >>> DateFieldView).textInputField as TextInput).text; >>> + // return s == null ? "" : s; >>> + return ""; >>> + } >>> + >>> + /** >>> + * @private >>> + */ >>> + public function set text(value:String):void >>> + { >>> + // ((view as DateFieldView).textInputField as >>> TextInput).text = value == null ? "" : value; >>> + } >>> +} >>> } >>> diff --git >>> a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as >>> >>> b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as >>> index 30b717f2c2..0dcae179e2 100644 >>> --- >>> a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as >>> +++ >>> b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as >>> @@ -800,7 +800,7 @@ public class AdvancedDataGridItemRenderer extends >>> StringItemRenderer >>> * @playerversion AIR 1.1 >>> * @productversion Flex 3 >>> */ >>> - public function get mxmlDocument():Object >>> + override public function get mxmlDocument():Object >>> { >>> return _mxmlDocument; >>> } >>> @@ -808,7 +808,7 @@ public class AdvancedDataGridItemRenderer extends >>> StringItemRenderer >>> /** >>> * @private >>> */ >>> - public function set mxmlDocument(value:Object):void >>> + override public function set mxmlDocument(value:Object):void >>> { >>> _mxmlDocument = value; >>> } >>> diff --git >>> a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridItemRenderer.as >>> >>> b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridItemRenderer.as >>> index 727630cae4..6b86afd51b 100644 >>> --- >>> a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridItemRenderer.as >>> +++ >>> b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/dataGridClasses/DataGridItemRenderer.as >>> @@ -960,7 +960,7 @@ public class DataGridItemRenderer extends >>> StringItemRenderer >>> * @playerversion AIR 1.1 >>> * @productversion Flex 3 >>> */ >>> - public function get mxmlDocument():Object >>> + override public function get mxmlDocument():Object >>> { >>> return _mxmlDocument; >>> } >>> @@ -968,7 +968,7 @@ public class DataGridItemRenderer extends >>> StringItemRenderer >>> /** >>> * @private >>> */ >>> - public function set mxmlDocument(value:Object):void >>> + override public function set mxmlDocument(value:Object):void >>> { >>> _mxmlDocument = value; >>> } >>> diff --git >>> a/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as >>> b/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as >>> index da171add4b..1e51d1f061 100644 >>> --- a/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as >>> +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as >>> @@ -2391,7 +2391,7 @@ COMPILE::JS >>> * @playerversion AIR 1.1 >>> * @productversion Flex 3 >>> */ >>> - public function get mxmlDocument():Object >>> + override public function get mxmlDocument():Object >>> { >>> if (!_mxmlDocument && MXMLDescriptor != null) >>> _mxmlDocument = this; >>> @@ -2408,7 +2408,7 @@ COMPILE::JS >>> * @playerversion AIR 1.1 >>> * @productversion Flex 3 >>> */ >>> - public function set mxmlDocument(value:Object):void >>> + override public function set mxmlDocument(value:Object):void >>> { >>> var n:int = numChildren; >>> for (var i:int = 0; i < n; i++) >>> @@ -2519,7 +2519,7 @@ COMPILE::JS >>> * @playerversion AIR 1.1 >>> * @productversion Flex 3 >>> */ >>> - public function get parentApplication():Object >>> + override public function get parentApplication():Object >>> { >>> // Look for the SystemManager's document, >>> // which should be the Application. >>> @@ -2572,7 +2572,7 @@ COMPILE::JS >>> * @playerversion AIR 1.1 >>> * @productversion Flex 3 >>> */ >>> - public function get parentMxmlDocument():Object >>> + override public function get parentMxmlDocument():Object >>> { >>> if (mxmlDocument == this) >>> { >>> diff --git >>> a/frameworks/projects/MXRoyale/src/main/royale/mx/managers/SystemManager.as >>> b/frameworks/projects/MXRoyale/src/main/royale/mx/managers/SystemManager.as >>> index af6debe60a..af94fd5825 100644 >>> --- >>> a/frameworks/projects/MXRoyale/src/main/royale/mx/managers/SystemManager.as >>> +++ >>> b/frameworks/projects/MXRoyale/src/main/royale/mx/managers/SystemManager.as >>> @@ -833,7 +833,9 @@ public class SystemManager extends SystemManagerBase >>> implements ISystemManager, >>> >>> return _densityScale; >>> } */ >>> - >>> + >>> + >>> + >>> //---------------------------------- >>> // component (was 'document' in Flex, but collides with browser >>> 'document' >>> //---------------------------------- >>> @@ -842,7 +844,8 @@ public class SystemManager extends SystemManagerBase >>> implements ISystemManager, >>> * @private >>> * Storage for the mxmlDocument property. >>> */ >>> - private var _mxmlDocument:Object; >>> + >>> + private var _mxmlDocument:Object; >>> >>> /** >>> * @inheritDoc >>> @@ -852,18 +855,31 @@ public class SystemManager extends SystemManagerBase >>> implements ISystemManager, >>> * @playerversion AIR 1.1 >>> * @productversion Royale 0.9.4 >>> */ >>> - public function get mxmlDocument():Object >>> + COMPILE::JS { >>> + override public function get mxmlDocument():Object >>> { >>> return _mxmlDocument; >>> } >>> >>> - /** >>> - * @private >>> - */ >>> + >>> + override public function set mxmlDocument(value:Object):void >>> + { >>> + _mxmlDocument = value; >>> + } >>> + } >>> + >>> + COMPILE::SWF { >>> + public function get mxmlDocument():Object >>> + { >>> + return _mxmlDocument; >>> + } >>> + >>> + >>> public function set mxmlDocument(value:Object):void >>> { >>> _mxmlDocument = value; >>> } >>> + } >>> >>> //---------------------------------- >>> // embeddedFontList >>> diff --git >>> a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/core/IUIComponent.as >>> b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/core/IUIComponent.as >>> index 497dbe2532..8478678a43 100644 >>> --- >>> a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/core/IUIComponent.as >>> +++ >>> b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/core/IUIComponent.as >>> @@ -56,12 +56,12 @@ public interface IUIComponent extends >>> IFlexDisplayObject, IChild, IUIBase, IChil >>> * @playerversion AIR 1.1 >>> * @productversion Flex 3 >>> */ >>> - function get mxmlDocument():Object >>> + // function get mxmlDocument():Object >>> >>> /** >>> * @private >>> */ >>> - function set mxmlDocument(value:Object):void >>> + // function set mxmlDocument(value:Object):void >>> >>> //---------------------------------- >>> // enabled >>> >> >