You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by pi...@apache.org on 2017/12/13 21:57:49 UTC
[royale-asjs] branch develop updated: Add
DynamicRemoveAllItemRendererForArrayListData
This is an automated email from the ASF dual-hosted git repository.
piotrz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
The following commit(s) were added to refs/heads/develop by this push:
new 23c00b3 Add DynamicRemoveAllItemRendererForArrayListData
23c00b3 is described below
commit 23c00b33bb5c6cb3019a50b265dd165d3e8ce78f
Author: Piotr Zarzycki <pi...@gmail.com>
AuthorDate: Wed Dec 13 22:57:42 2017 +0100
Add DynamicRemoveAllItemRendererForArrayListData
- Add DynamicRemoveAllItemRendererForArrayListData which helps to handle scenario where all items has been removed from ArrayList
- Introduce ALL_ITEMS_REMOVED (allItemsRemoved) event type in CollectionEvent
- Update MDLDynamicTableExample to reflect changes
---
.../MDLDynamicTableExample/src/MainView.mxml | 9 ++
.../Basic/src/main/resources/basic-manifest.xml | 1 +
...DynamicRemoveAllItemRendererForArrayListData.as | 164 +++++++++++++++++++++
.../org/apache/royale/collections/ArrayList.as | 13 +-
.../org/apache/royale/events/CollectionEvent.as | 1 +
5 files changed, 187 insertions(+), 1 deletion(-)
diff --git a/examples/royale/MDLDynamicTableExample/src/MainView.mxml b/examples/royale/MDLDynamicTableExample/src/MainView.mxml
index e7234d8..e484cac 100644
--- a/examples/royale/MDLDynamicTableExample/src/MainView.mxml
+++ b/examples/royale/MDLDynamicTableExample/src/MainView.mxml
@@ -35,6 +35,11 @@ limitations under the License.
usersListModel.users.removeItemAt(usersListModel.users.length - 1);
}
+ private function onRemoveAllClick(event:MouseEvent):void
+ {
+ usersListModel.users.removeAll();
+ }
+
private function onTblChange(event:Event):void
{
var selIndex:int = tblUsers.selectedIndex;
@@ -63,6 +68,7 @@ limitations under the License.
<mdl:beads>
<js:DynamicItemsRendererFactoryForArrayListData />
<js:DynamicRemoveItemRendererForArrayListData />
+ <js:DynamicRemoveAllItemRendererForArrayListData />
</mdl:beads>
</mdl:Table>
</mdl:GridCell>
@@ -72,4 +78,7 @@ limitations under the License.
<mdl:GridCell>
<mdl:Button text="Remove Last Employee" width="100" click="onRemoveEmployeeClick(event)"/>
</mdl:GridCell>
+ <mdl:GridCell>
+ <mdl:Button text="Remove All" width="130" click="onRemoveAllClick(event)"/>
+ </mdl:GridCell>
</mdl:Grid>
diff --git a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
index 81ad5b3..d0bf629 100644
--- a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
@@ -153,6 +153,7 @@
<component id="DynamicItemsRendererFactoryForArrayListData" class="org.apache.royale.html.beads.DynamicItemsRendererFactoryForArrayListData" />
<component id="DynamicRemoveItemRendererForArrayListData" class="org.apache.royale.html.beads.DynamicRemoveItemRendererForArrayListData" />
<component id="DataItemRendererFactoryForHierarchicalData" class="org.apache.royale.html.beads.DataItemRendererFactoryForHierarchicalData" />
+ <component id="DynamicRemoveAllItemRendererForArrayListData" class="org.apache.royale.html.beads.DynamicRemoveAllItemRendererForArrayListData" />
<component id="TextItemRendererFactoryForArrayData" class="org.apache.royale.html.beads.TextItemRendererFactoryForArrayData" />
<component id="TextItemRendererFactoryForStringVectorData" class="org.apache.royale.html.beads.TextItemRendererFactoryForStringVectorData" />
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllItemRendererForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllItemRendererForArrayListData.as
new file mode 100644
index 0000000..5111037
--- /dev/null
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllItemRendererForArrayListData.as
@@ -0,0 +1,164 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.royale.html.beads
+{
+ import org.apache.royale.core.IBead;
+ import org.apache.royale.core.IDataProviderModel;
+ import org.apache.royale.core.IItemRendererParent;
+ import org.apache.royale.core.IList;
+ import org.apache.royale.core.ISelectionModel;
+ import org.apache.royale.core.IStrand;
+ import org.apache.royale.core.UIBase;
+ import org.apache.royale.events.CollectionEvent;
+ import org.apache.royale.events.Event;
+ import org.apache.royale.events.IEventDispatcher;
+
+ /**
+ * Handles the removal of all itemRenderers once the corresponding datum has been removed
+ * from the IDataProviderModel.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.0
+ */
+ public class DynamicRemoveAllItemRendererForArrayListData implements IBead
+ {
+ /**
+ * Constructor
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.0
+ */
+ public function DynamicRemoveAllItemRendererForArrayListData()
+ {
+ }
+
+ private var _strand:IStrand;
+
+ /**
+ * @copy org.apache.royale.core.IStrand
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.0
+ */
+ public function set strand(value:IStrand):void
+ {
+ _strand = value;
+ IEventDispatcher(value).addEventListener("initComplete", initComplete);
+ }
+
+ /**
+ * finish setup
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.8
+ */
+ protected function initComplete(event:Event):void
+ {
+ IEventDispatcher(_strand).removeEventListener("initComplete", initComplete);
+
+ _dataProviderModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+ dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);
+
+ // invoke now in case "dataProviderChanged" has already been dispatched.
+ dataProviderChangeHandler(null);
+ }
+
+ /**
+ * @private
+ */
+ protected function dataProviderChangeHandler(event:Event):void
+ {
+ var dp:IEventDispatcher = dataProviderModel.dataProvider as IEventDispatcher;
+ if (!dp)
+ return;
+
+ // listen for all items being removed in the future.
+ dp.addEventListener(CollectionEvent.ALL_ITEMS_REMOVED, handleAllItemsRemoved);
+ }
+
+ /**
+ * Handles the itemRemoved event by removing the item.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.0
+ */
+ protected function handleAllItemsRemoved(event:CollectionEvent):void
+ {
+ if (dataProviderModel is ISelectionModel)
+ {
+ var model:ISelectionModel = dataProviderModel as ISelectionModel;
+ model.selectedIndex = -1;
+ model.selectedItem = null;
+ }
+ var parent:UIBase = itemRendererParent as UIBase;
+ itemRendererParent.removeAllItemRenderers();
+
+ (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
+ }
+
+ private var _dataProviderModel: IDataProviderModel;
+
+ /**
+ * The org.apache.royale.core.IDataProviderModel that contains the
+ * data source.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.0
+ */
+ public function get dataProviderModel(): IDataProviderModel
+ {
+ if (_dataProviderModel == null) {
+ _dataProviderModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
+ }
+ return _dataProviderModel;
+ }
+
+ private var _itemRendererParent: IItemRendererParent;
+
+ /**
+ * The org.apache.royale.core.IItemRendererParent used
+ * to generate instances of item renderers.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.0
+ */
+ public function get itemRendererParent():IItemRendererParent
+ {
+ if (_itemRendererParent == null) {
+ var list:IList = _strand as IList;
+ _itemRendererParent = list.dataGroup;
+ }
+ return _itemRendererParent;
+ }
+ }
+}
diff --git a/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/ArrayList.as b/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/ArrayList.as
index b7f1b98..9bf19f2 100644
--- a/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/ArrayList.as
+++ b/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/ArrayList.as
@@ -60,6 +60,16 @@ package org.apache.royale.collections
*/
[Event(name="itemRemoved", type="org.apache.royale.events.CollectionEvent")]
+ /**
+ * Dispatched when the collection has updated an item.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.0
+ */
+ [Event(name="allItemsRemoved", type="org.apache.royale.events.CollectionEvent")]
+
/**
* Dispatched when the collection has updated an item.
*
@@ -358,8 +368,9 @@ package org.apache.royale.collections
{
if (length > 0)
{
- var collectionEvent:CollectionEvent = new CollectionEvent(CollectionEvent.ITEM_REMOVED);
+ var collectionEvent:CollectionEvent = new CollectionEvent(CollectionEvent.ALL_ITEMS_REMOVED);
collectionEvent.items = source.splice(0, length);
+ collectionEvent.index = -1;
dispatchEvent(collectionEvent);
}
}
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/CollectionEvent.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/CollectionEvent.as
index 844fc9d..6831ca5 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/CollectionEvent.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/CollectionEvent.as
@@ -31,6 +31,7 @@ package org.apache.royale.events
{
public static const ITEM_ADDED:String = "itemAdded";
public static const ITEM_REMOVED:String = "itemRemoved";
+ public static const ALL_ITEMS_REMOVED:String = "allItemsRemoved";
public static const ITEM_UPDATED:String = "itemUpdated";
public static const COLLECTION_CHANGED:String = "collectionChanged";
--
To stop receiving notification emails like this one, please contact
['"commits@royale.apache.org" <co...@royale.apache.org>'].