You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2018/12/03 07:19:19 UTC

[royale-asjs] 07/08: Spark Scroller, DataGroup, ItemRenderer as used by TDF DataGroupExample

This is an automated email from the ASF dual-hosted git repository.

aharui pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit fce4b1d1332dd8f9ee8eebf421850f60eb04baf8
Author: Alex Harui <ah...@apache.org>
AuthorDate: Sun Dec 2 22:26:18 2018 -0800

    Spark Scroller, DataGroup, ItemRenderer as used by TDF DataGroupExample
---
 .../SparkRoyale/src/main/resources/defaults.css    |  25 ++-
 .../src/main/royale/spark/components/DataGroup.as  |  27 +++-
 .../main/royale/spark/components/DataRenderer.as   |  77 +++++++++
 .../src/main/royale/spark/components/Scroller.as   |  31 +++-
 .../components/supportClasses/ItemRenderer.as      | 173 +++++++++++++++++++--
 5 files changed, 307 insertions(+), 26 deletions(-)

diff --git a/frameworks/projects/SparkRoyale/src/main/resources/defaults.css b/frameworks/projects/SparkRoyale/src/main/resources/defaults.css
index 2e2c802..ddde944 100644
--- a/frameworks/projects/SparkRoyale/src/main/resources/defaults.css
+++ b/frameworks/projects/SparkRoyale/src/main/resources/defaults.css
@@ -65,18 +65,28 @@ Image
 }
 
 
-List
+DataGroup
 {
-	IBeadModel: ClassReference("org.apache.royale.html.beads.models.ArraySelectionModel");
-	IBeadView:  ClassReference("org.apache.royale.html.beads.ListView");			
+	IDataProviderItemRendererMapper: ClassReference("mx.controls.listClasses.VirtualDataItemRendererFactoryForICollectionViewData");
+	IBeadModel: ClassReference("mx.controls.beads.models.SingleSelectionICollectionViewModel");
+	IBeadView:  ClassReference("org.apache.royale.html.beads.VirtualDataContainerView");			
 	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController");
-	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
-	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData");
+	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VirtualListVerticalLayout");
 	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
 	IItemRenderer: ClassReference("mx.controls.listClasses.ListItemRenderer");
 	IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
 	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
 }
+
+List
+{
+	IBeadView: ClassReference("spark.components.beads.SkinnableContainerView");
+	IBeadLayout: ClassReference("spark.layouts.supportClasses.SparkLayoutBead");
+	IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
+	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
+	IContentView: ClassReference("spark.components.DataGroup");
+}
+
 NumericStepper
 {
 	IBeadModel: ClassReference("org.apache.royale.html.beads.models.RangeModel");
@@ -102,6 +112,11 @@ Panel .TitleBar
 	background-color: #FFFFFF;
 }
 
+Scroller
+{
+	IBeadView: ClassReference("org.apache.royale.html.beads.GroupView");
+}
+
 SkinnableContainer
 {
 	IBeadView: ClassReference("spark.components.beads.SkinnableContainerView");
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/DataGroup.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/DataGroup.as
index d70b9ff..9459dd0 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/DataGroup.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/DataGroup.as
@@ -49,7 +49,12 @@ import mx.collections.IList;
  import mx.core.mx_internal;
 use namespace mx_internal;  // for mx_internal property contentChangeDelta
 
+import org.apache.royale.core.IBead;
 import org.apache.royale.core.ISelectionModel;
+import org.apache.royale.core.IItemRendererProvider;
+import org.apache.royale.core.IStrandWithPresentationModel;
+import org.apache.royale.core.IListPresentationModel;
+import org.apache.royale.html.beads.models.ListPresentationModel;
 
 /**
  *  Dispatched when a renderer is added to this dataGroup.
@@ -164,7 +169,7 @@ import org.apache.royale.core.ISelectionModel;
  *  @playerversion AIR 1.5
  *  @productversion Flex 4
  */
-public class DataGroup extends GroupBase 
+public class DataGroup extends GroupBase implements IItemRendererProvider, IStrandWithPresentationModel
 { //implements IItemRendererOwner
     /**
      *  Constructor.
@@ -177,11 +182,31 @@ public class DataGroup extends GroupBase
     public function DataGroup()
     {
         super();
+        typeNames = "DataGroup";
         
        // _rendererUpdateDelegate = this;
     }
     
     /**
+     *  The presentation model for the list.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.9
+     *  @royaleignorecoercion org.apache.royale.core.IListPresentationModel
+     */
+    public function get presentationModel():IBead
+    {
+        var presModel:IListPresentationModel = getBeadByType(IListPresentationModel) as IListPresentationModel;
+        if (presModel == null) {
+            presModel = new ListPresentationModel();
+            addBead(presModel);
+        }
+        return presModel;
+    }
+    
+    /**
      *  @private
      *  flag to indicate whether a child in the item renderer has a non-zero layer, requiring child re-ordering.
      */
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/DataRenderer.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/DataRenderer.as
index df28c86..439b3ec 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/DataRenderer.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/DataRenderer.as
@@ -19,6 +19,7 @@
 
 package spark.components { 
     
+import org.apache.royale.events.Event;
 import mx.core.IDataRenderer;
 import mx.events.FlexEvent;
 //import org.apache.royale.events.EventDispatcher;
@@ -83,6 +84,25 @@ public class DataRenderer extends Group implements IDataRenderer
         super();
     }
     
+    private var _itemRendererParent:Object;
+    
+    /**
+     * The parent container for the itemRenderer instance.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.0
+     */
+    public function get itemRendererParent():Object
+    {
+        return _itemRendererParent;
+    }
+    public function set itemRendererParent(value:Object):void
+    {
+        _itemRendererParent = value;
+    }
+    
     //--------------------------------------------------------------------------
     //
     //  Properties
@@ -131,6 +151,63 @@ public class DataRenderer extends Group implements IDataRenderer
 
         if (hasEventListener(FlexEvent.DATA_CHANGE))
             dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
+        callLater(runLayout);
     }
+    
+    public function runLayout():void
+    {
+        dispatchEvent(new Event("layoutNeeded"));
+    }
+    
+    private var _listData:Object;
+    
+    [Bindable("__NoChangeEvent__")]
+    /**
+     *  Additional data about the list structure the itemRenderer may
+     *  find useful.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.0
+     */
+    public function get listData():Object
+    {
+        return _listData;
+    }
+    public function set listData(value:Object):void
+    {
+        _listData = value;
+    }
+    
+    private var _labelField:String = "label";
+    
+    /**
+     * The name of the field within the data to use as a label. Some itemRenderers use this field to
+     * identify the value they should show while other itemRenderers ignore this if they are showing
+     * complex information.
+     */
+    public function get labelField():String
+    {
+        return _labelField;
+    }
+    public function set labelField(value:String):void
+    {
+        _labelField = value;
+    }
+    
+    override public function addedToParent():void
+    {
+        super.addedToParent();
+        COMPILE::JS
+        {
+            // UIComponent defaults everything to absolute positioning, but
+            // item renderers are likely to be positioned by the virtual layout
+            // and thus need to use default positioning.
+            element.style.position = "static";
+        }
+        
+    }
+
 }
 }
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Scroller.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Scroller.as
index 793eb36..2d3def5 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Scroller.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Scroller.as
@@ -69,6 +69,7 @@ import mx.core.IVisualElementContainer;
 import mx.managers.IFocusManagerComponent;
 
 import org.apache.royale.events.Event;
+import org.apache.royale.core.IChild;
 
 use namespace mx_internal;
 /* 
@@ -548,6 +549,8 @@ public class Scroller extends SkinnableComponent
     public function Scroller()
     {
         super();
+        typeNames = "Scroller";
+        
        /*  hasFocusableChildren = true;
         focusEnabled = false;
 
@@ -1087,9 +1090,9 @@ public class Scroller extends SkinnableComponent
         if (value == _viewport)
             return;
         
-       // uninstallViewport();
+       uninstallViewport();
         _viewport = value;
-       // installViewport();
+       installViewport();
         dispatchEvent(new Event("viewportChanged"));
     }
     
@@ -1097,10 +1100,15 @@ public class Scroller extends SkinnableComponent
      *  @private
      *  This is used to disable thinning for automated testing.
      */
-   /*  mx_internal static var dragEventThinning:Boolean = true;
+    //mx_internal static var dragEventThinning:Boolean = true;
     
+    /**
+     *  @private
+     *  @royaleignorecoercion org.apache.royale.core.IChild
+     */
     private function installViewport():void
     {
+        /*  SWF?
         if (skin && viewport)
         {
             viewport.clipAndEnableScrolling = true;
@@ -1112,10 +1120,20 @@ public class Scroller extends SkinnableComponent
             verticalScrollBar.viewport = viewport;
         if (horizontalScrollBar)
             horizontalScrollBar.viewport = viewport;
+        */
+        COMPILE::JS
+        {
+            addElement(viewport as IChild);
+        }
     } 
     
+    /**
+     *  @private
+     *  @royaleignorecoercion org.apache.royale.core.IChild
+     */
     private function uninstallViewport():void
     {
+        /*
         if (horizontalScrollBar)
             horizontalScrollBar.viewport = null;
         if (verticalScrollBar)
@@ -1127,8 +1145,13 @@ public class Scroller extends SkinnableComponent
             viewport.removeEventListener(PropertyChangeEvent.PROPERTY_CHANGE, viewport_propertyChangeHandler);
             viewport.removeEventListener(Event.RESIZE, viewport_resizeHandler);
         }
+        */
+        COMPILE::JS
+        {
+            if (viewport)
+                removeElement(viewport as IChild);
+        }
     }
-    */
     
     //----------------------------------
     //  minViewportInset
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/ItemRenderer.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/ItemRenderer.as
index 90f3d3b..bd920ec 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/ItemRenderer.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/supportClasses/ItemRenderer.as
@@ -32,6 +32,7 @@ import spark.components.ResizeMode;
 
 use namespace mx_internal;  */
 
+import org.apache.royale.core.ISelectableItemRenderer;
 import spark.components.DataRenderer;
 /**
  *  The ItemRenderer class is the base class for Spark item renderers.
@@ -83,7 +84,7 @@ import spark.components.DataRenderer;
  *  @playerversion AIR 1.5
  *  @productversion Royale 0.9.4
  */
-public class ItemRenderer extends DataRenderer
+public class ItemRenderer extends DataRenderer implements ISelectableItemRenderer
 {    // implements IItemRenderer
     //--------------------------------------------------------------------------
     //
@@ -213,7 +214,7 @@ public class ItemRenderer extends DataRenderer
      *  @private
      *  storage for the down property 
      */    
-    //private var _down:Boolean = false;
+    private var _down:Boolean = false;
     
     /**
      *  Set to <code>true</code> when the user is pressing down on an item renderer.
@@ -225,27 +226,29 @@ public class ItemRenderer extends DataRenderer
      *  @playerversion AIR 1.5
      *  @productversion Royale 0.9.4
      */    
-    /* protected function get down():Boolean
+    public function get down():Boolean
     {
         return _down;
-    } */
+    }
     
     /**
      *  @private
      */    
-    /* protected function set down(value:Boolean):void
+    public function set down(value:Boolean):void
     {
         if (value != _down)
         {
             _down = value;
+            /*
             invalidateRendererState();
             if (autoDrawBackground)
             {
                 redrawRequested = true;
                 super.$invalidateDisplayList();
             }
+            */
         }
-    } */
+    }
     
     //----------------------------------
     //  hovered
@@ -254,7 +257,7 @@ public class ItemRenderer extends DataRenderer
      *  @private
      *  storage for the hovered property 
      */    
-    //private var _hovered:Boolean = false;
+    private var _hovered:Boolean = false;
     
     /**
      *  Set to <code>true</code> when the user is hovered over the item renderer.
@@ -266,27 +269,72 @@ public class ItemRenderer extends DataRenderer
      *  @playerversion AIR 1.5
      *  @productversion Royale 0.9.4
      */    
-    /* protected function get hovered():Boolean
+    public function get hovered():Boolean
     {
         return _hovered;
-    } */
+    }
     
     /**
      *  @private
      */    
-    /* protected function set hovered(value:Boolean):void
+    public function set hovered(value:Boolean):void
     {
         if (value != _hovered)
         {
             _hovered = value;
+            /*
             invalidateRendererState();
             if (autoDrawBackground)
             {
                 redrawRequested = true;
                 super.$invalidateDisplayList();
             }
+            */
         }
-    } */
+    }
+    
+    //----------------------------------
+    //  hoverable
+    //----------------------------------
+    /**
+     *  @private
+     *  storage for the hovered property 
+     */    
+    private var _hoverable:Boolean = false;
+    
+    /**
+     *  Set to <code>true</code> when the user is hovered over the item renderer.
+     *
+     *  @default false
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Royale 0.9.4
+     */    
+    public function get hoverable():Boolean
+    {
+        return _hoverable;
+    }
+    
+    /**
+     *  @private
+     */    
+    public function set hoverable(value:Boolean):void
+    {
+        if (value != _hoverable)
+        {
+            _hoverable = value;
+            /*
+            invalidateRendererState();
+            if (autoDrawBackground)
+            {
+            redrawRequested = true;
+            super.$invalidateDisplayList();
+            }
+            */
+        }
+    }
     
     //----------------------------------
     //  itemIndex
@@ -335,6 +383,54 @@ public class ItemRenderer extends DataRenderer
     } */
     
     //----------------------------------
+    //  index
+    //----------------------------------
+    
+    /**
+     *  @private
+     *  storage for the index property 
+     */    
+    private var _index:int;
+    
+    [Bindable("itemIndexChanged")]
+    
+    /**
+     *  @inheritDoc 
+     *
+     *  @default 0
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Royale 0.9.4
+     */    
+    public function get index():int
+    {
+        return _index;
+    }
+    
+    /**
+     *  @private
+     */    
+    public function set index(value:int):void
+    {
+        if (value == _index)
+        return;
+        
+        _index = value;
+
+        /*
+        if (autoDrawBackground)
+        {
+            redrawRequested = true;
+            super.$invalidateDisplayList();
+        }
+        
+        dispatchEvent(new Event("itemIndexChanged"));
+        */
+    }
+    
+    //----------------------------------
     //  labelDisplay
     //----------------------------------
     
@@ -401,7 +497,7 @@ public class ItemRenderer extends DataRenderer
      *  @private
      *  storage for the selected property 
      */    
-    //private var _selected:Boolean = false;
+    private var _selected:Boolean = false;
     
     /**
      *  @inheritDoc 
@@ -413,28 +509,73 @@ public class ItemRenderer extends DataRenderer
      *  @playerversion AIR 1.5
      *  @productversion Royale 0.9.4
      */    
-    /* public function get selected():Boolean
+    public function get selected():Boolean
     {
         return _selected;
-    } */
+    }
     
     /**
      *  @private
      */    
-    /* public function set selected(value:Boolean):void
+    public function set selected(value:Boolean):void
     {
         if (value != _selected)
         {
             _selected = value;
+            /*
             invalidateRendererState();
             if (autoDrawBackground)
             {
                 redrawRequested = true;
                 super.$invalidateDisplayList();
             }
+            */
+        }
+    }
+    
+    //----------------------------------
+    //  selected
+    //----------------------------------
+    /**
+     *  @private
+     *  storage for the selected property 
+     */    
+    private var _selectable:Boolean = false;
+    
+    /**
+     *  @inheritDoc 
+     *
+     *  @default false
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Royale 0.9.4
+     */    
+    public function get selectable():Boolean
+    {
+        return _selectable;
+    }
+    
+    /**
+     *  @private
+     */    
+    public function set selectable(value:Boolean):void
+    {
+        if (value != _selectable)
+        {
+            _selectable = value;
+            /*
+            invalidateRendererState();
+            if (autoDrawBackground)
+            {
+            redrawRequested = true;
+            super.$invalidateDisplayList();
+            }
+            */
         }
     }
-       */ 
+
     //----------------------------------
     //  dragging
     //----------------------------------