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;
         }

Reply via email to