This is an automated email from the ASF dual-hosted git repository. gregdove pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit c90fbce7a83d96612c3fd73acdfbb3118854f46c Author: greg-dove <[email protected]> AuthorDate: Tue May 17 16:12:46 2022 +1200 mx MenuBar incremental improvements. Should fix mx-tests problem. --- .../MXRoyale/src/main/resources/defaults.css | 2 +- .../MXRoyale/src/main/royale/MXRoyaleClasses.as | 1 + .../src/main/royale/mx/controls/MenuBar.as | 16 ++++--- .../mx/controls/beads/models/MenuBarModel.as | 19 +++++++- ...ataItemRendererFactoryForICollectionViewData.as | 12 +++-- ...taItemRendererFactoryForICollectionViewData.as} | 56 ++++++++++++++-------- 6 files changed, 72 insertions(+), 34 deletions(-) diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css b/frameworks/projects/MXRoyale/src/main/resources/defaults.css index 8c46a61d8f..904f41102c 100644 --- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css +++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css @@ -362,7 +362,7 @@ MenuBar { IItemRenderer: ClassReference("mx.controls.menuClasses.MenuBarItemRenderer"); IBeadController: ClassReference("mx.controls.beads.controllers.MenuBarMouseController"); IMenuFactory: ClassReference("mx.controls.menuClasses.CascadingMenuFactory"); - IDataProviderItemRendererMapper: ClassReference("mx.controls.listClasses.DataItemRendererFactoryForICollectionViewData"); + IDataProviderItemRendererMapper: ClassReference("mx.controls.menuClasses.MenuDataItemRendererFactoryForICollectionViewData"); IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory"); IItemRendererInitializer: ClassReference("org.apache.royale.html.beads.IndexedItemRendererInitializer"); IViewport: ClassReference("org.apache.royale.html.supportClasses.Viewport"); diff --git a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as index bf192520ff..10b8564c0a 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as +++ b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as @@ -106,6 +106,7 @@ internal class MXRoyaleClasses import mx.controls.treeClasses.TreeListData; TreeListData; import mx.controls.listClasses.ListVerticalLayout; ListVerticalLayout; import mx.controls.listClasses.DataItemRendererFactoryForICollectionViewData; DataItemRendererFactoryForICollectionViewData; + import mx.controls.menuClasses.MenuDataItemRendererFactoryForICollectionViewData; MenuDataItemRendererFactoryForICollectionViewData; import mx.controls.listClasses.VirtualDataItemRendererFactoryForICollectionViewData; VirtualDataItemRendererFactoryForICollectionViewData; import mx.controls.listClasses.VirtualDataItemRendererFactoryForIListData; VirtualDataItemRendererFactoryForIListData; import mx.controls.treeClasses.DataItemRendererFactoryForICollectionViewHierarchicalData; DataItemRendererFactoryForICollectionViewHierarchicalData; diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as index b1f9f602f4..0c4cb01043 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/MenuBar.as @@ -48,6 +48,9 @@ import mx.managers.IFocusManagerComponent; import mx.styles.ISimpleStyleClient; import mx.styles.StyleProxy; import mx.controls.beads.models.MenuBarModel; +import mx.controls.treeClasses.DefaultDataDescriptor; +import mx.controls.menuClasses.IMenuDataDescriptor; + import org.apache.royale.core.IBeadLayout; import org.apache.royale.core.IContainer; @@ -528,6 +531,7 @@ public class MenuBar extends UIComponent implements IFocusManagerComponent, ICon //-------------------------------------------------------------------------- // // Overridden properties + // Overridden properties // //-------------------------------------------------------------------------- @@ -605,10 +609,10 @@ public class MenuBar extends UIComponent implements IFocusManagerComponent, ICon /** * @private */ - /* mx_internal var _dataDescriptor:IMenuDataDescriptor = + mx_internal var _dataDescriptor:IMenuDataDescriptor = new DefaultDataDescriptor(); - [Inspectable(category="Data")] */ + [Inspectable(category="Data")] /** * The object that accesses and manipulates data in the data provider. @@ -640,21 +644,21 @@ public class MenuBar extends UIComponent implements IFocusManagerComponent, ICon * @playerversion AIR 1.1 * @productversion Royale 0.9.3 */ - /* public function get dataDescriptor():IMenuDataDescriptor + public function get dataDescriptor():IMenuDataDescriptor { return IMenuDataDescriptor(_dataDescriptor); - } */ + } /** * @private */ - /* public function set dataDescriptor(value:IMenuDataDescriptor):void + public function set dataDescriptor(value:IMenuDataDescriptor):void { _dataDescriptor = value; //force all the menus to be re-created with the new dataDescriptor menus = []; - } */ + } //---------------------------------- // dataProvider diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/MenuBarModel.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/MenuBarModel.as index b18834e963..113a2f0ce2 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/MenuBarModel.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/MenuBarModel.as @@ -21,6 +21,8 @@ package mx.controls.beads.models import mx.collections.ArrayCollection; import mx.collections.ICollectionView; import mx.collections.XMLListCollection; + import mx.controls.MenuBar; + import mx.controls.menuClasses.IMenuDataDescriptor; import mx.events.CollectionEvent; import mx.events.CollectionEventKind; @@ -71,6 +73,14 @@ package mx.controls.beads.models dispatchEvent(new Event("submenuFieldChanged")); } + + public function get dataDescriptor():IMenuDataDescriptor + { + return MenuBar(_strand).dataDescriptor; + } + + + private var _showRoot:Boolean = true; /** @@ -87,7 +97,14 @@ package mx.controls.beads.models } public function set showRoot(value:Boolean):void { - _showRoot = value; + if (_showRoot != value) { + _showRoot = value; + if (_rootModel) { + + } + } + + } diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as index b854e5cf6c..05907b6966 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as @@ -87,24 +87,26 @@ package mx.controls.listClasses { if (!dataProviderModel) return; + var dped:IEventDispatcher = dp as IEventDispatcher; dp = dataProviderModel.dataProvider as ICollectionView; if (!dp) { - // temporary until descriptor is used in MenuBarModel + /* // temporary until descriptor is used in MenuBarModel var obj:Object = dataProviderModel.dataProvider; if (obj is Array) { dp = new ArrayCollection(obj as Array); } - else + else*/ return; } // listen for individual items being added in the future. - var dped:IEventDispatcher = dp as IEventDispatcher; - //First remove if it's already added - dped.removeEventListener(mx.events.CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler); + //First remove if it's already added to previous dp instance + if (dped) dped.removeEventListener(mx.events.CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler); + + dped = dp as IEventDispatcher; // get latest dped.addEventListener(mx.events.CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler); super.dataProviderChangeHandler(event); diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/MenuDataItemRendererFactoryForICollectionViewData.as similarity index 86% copy from frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as copy to frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/MenuDataItemRendererFactoryForICollectionViewData.as index b854e5cf6c..1a54b6120b 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/MenuDataItemRendererFactoryForICollectionViewData.as @@ -16,13 +16,15 @@ // limitations under the License. // //////////////////////////////////////////////////////////////////////////////// -package mx.controls.listClasses +package mx.controls.menuClasses { import mx.collections.ArrayCollection; import mx.collections.ICollectionView; import mx.collections.IViewCursor; import mx.events.CollectionEvent; import mx.events.CollectionEventKind; + + import mx.controls.beads.models.MenuBarModel; import org.apache.royale.core.IBead; import org.apache.royale.core.IBeadModel; @@ -60,7 +62,7 @@ package mx.controls.listClasses * @playerversion AIR 2.6 * @productversion Royale 0.0 */ - public class DataItemRendererFactoryForICollectionViewData extends DataItemRendererFactoryBase + public class MenuDataItemRendererFactoryForICollectionViewData extends DataItemRendererFactoryBase { /** * Constructor. @@ -70,7 +72,7 @@ package mx.controls.listClasses * @playerversion AIR 2.6 * @productversion Royale 0.0 */ - public function DataItemRendererFactoryForICollectionViewData() + public function MenuDataItemRendererFactoryForICollectionViewData() { super(); } @@ -87,25 +89,36 @@ package mx.controls.listClasses { if (!dataProviderModel) return; - dp = dataProviderModel.dataProvider as ICollectionView; - if (!dp) - { - // temporary until descriptor is used in MenuBarModel - var obj:Object = dataProviderModel.dataProvider; - if (obj is Array) - { - dp = new ArrayCollection(obj as Array); - } - else - return; - } - - // listen for individual items being added in the future. - var dped:IEventDispatcher = dp as IEventDispatcher; - //First remove if it's already added - dped.removeEventListener(mx.events.CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler); + var menuBarModel:MenuBarModel =MenuBarModel(dataProviderModel); + if (dp) { + //First remove if it's already added + dp.removeEventListener(mx.events.CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler); + } + dp = menuBarModel.dataProvider as ICollectionView; - dped.addEventListener(mx.events.CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler); + if (dp) { + if (menuBarModel.hasRoot && !menuBarModel.showRoot) { + //this corresponds roughly to part of the code inside commitProperties in the original Flex MenuBar code: + var rootItem:* = dp.createCursor().current; + var tmpCollection:ICollectionView; + if (rootItem != null && + menuBarModel.dataDescriptor.isBranch(rootItem, dp) && + menuBarModel.dataDescriptor.hasChildren(rootItem, dp)) + { + // then get rootItem children + tmpCollection = + menuBarModel.dataDescriptor.getChildren(rootItem, dp); + + dp = tmpCollection; + } + //not part of the original Flex code, but should we not do this? (it is a root node with no children - i.e. should it not be an empty menubar? ) : + /*else { + dp = new ArrayCollection(); + }*/ + } + + dp.addEventListener(mx.events.CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler); + } super.dataProviderChangeHandler(event); } @@ -116,6 +129,7 @@ package mx.controls.listClasses // assumes will be called in a loop, not random access override protected function get dataProviderLength():int { + if (!dp) return 0; cursor = dp.createCursor(); return dp.length; }
