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 <aha...@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 //----------------------------------