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
//----------------------------------