This is an automated email from the ASF dual-hosted git repository.
carlosrovira 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 75e2ba4 Basic: Add SelectionDataItemRendererFactoryForCollectionView
to handle ISelectionModel for components that uses selection and
add/remove/update items at runtime.
75e2ba4 is described below
commit 75e2ba48417408f932049bf8acf0ef15ce3ada41
Author: Carlos Rovira <[email protected]>
AuthorDate: Fri Jun 12 13:37:11 2020 +0200
Basic: Add SelectionDataItemRendererFactoryForCollectionView to handle
ISelectionModel for components that uses selection and add/remove/update items
at runtime.
---
.../Basic/src/main/resources/basic-manifest.xml | 1 +
.../DataItemRendererFactoryForCollectionView.as | 29 -------
...tionDataItemRendererFactoryForCollectionView.as | 92 ++++++++++++++++++++++
.../projects/Jewel/src/main/resources/defaults.css | 8 +-
.../Jewel/src/main/sass/components/_buttonbar.sass | 2 +-
.../Jewel/src/main/sass/components/_list.sass | 2 +-
.../src/main/sass/components/_navigation.sass | 2 +-
.../Jewel/src/main/sass/components/_tabbar.sass | 2 +-
8 files changed, 101 insertions(+), 37 deletions(-)
diff --git a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
index a666835..3db2977 100644
--- a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
@@ -220,6 +220,7 @@
<component id="DynamicUpdateItemRendererForArrayListData"
class="org.apache.royale.html.beads.DynamicUpdateItemRendererForArrayListData"/>
<component id="DataItemRendererFactoryForHierarchicalData"
class="org.apache.royale.html.beads.DataItemRendererFactoryForHierarchicalData"
/>
<component id="DataItemRendererFactoryForCollectionView"
class="org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView" />
+ <component id="SelectionDataItemRendererFactoryForCollectionView"
class="org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView"
/>
<component id="DynamicRemoveAllItemRendererForArrayListData"
class="org.apache.royale.html.beads.DynamicRemoveAllItemRendererForArrayListData"
/>
<component id="DynamicRemoveAllByNullItemRendererForArrayListData"
class="org.apache.royale.html.beads.DynamicRemoveAllByNullItemRendererForArrayListData"
/>
<component id="TextItemRendererFactoryForArrayData"
class="org.apache.royale.html.beads.TextItemRendererFactoryForArrayData" />
diff --git
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as
index 5d67e74..d532595 100644
---
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as
+++
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as
@@ -22,14 +22,12 @@ package org.apache.royale.html.beads
import org.apache.royale.core.IIndexedItemRenderer;
import org.apache.royale.core.IIndexedItemRendererInitializer;
import org.apache.royale.core.IItemRendererOwnerView;
- import org.apache.royale.core.ISelectionModel;
import org.apache.royale.core.IStrandWithModelView;
import org.apache.royale.events.CollectionEvent;
import org.apache.royale.events.Event;
import org.apache.royale.events.IEventDispatcher;
import org.apache.royale.html.beads.IListView;
import org.apache.royale.utils.sendStrandEvent;
-
/**
* This class creates itemRenderer instances from the data contained
within an ICollectionView
@@ -112,13 +110,6 @@ package org.apache.royale.html.beads
//var ubase:UIItemRendererBase = ir as
UIItemRendererBase;
//if (ubase) ubase.updateRenderer()
}
-
- //adjust the model's selectedIndex, if applicable
- if(dataProviderModel is ISelectionModel) {
- if (event.index <=
ISelectionModel(dataProviderModel).selectedIndex) {
-
ISelectionModel(dataProviderModel).selectedIndex =
ISelectionModel(dataProviderModel).selectedIndex + 1;
- }
- }
sendStrandEvent(_strand,"itemsCreated");
sendStrandEvent(_strand,"layoutNeeded");
@@ -159,18 +150,6 @@ package org.apache.royale.html.beads
//if (ubase) ubase.updateRenderer()
}
- //adjust the model's selectedIndex, if applicable
- if(dataProviderModel is ISelectionModel) {
- if (event.index <
ISelectionModel(dataProviderModel).selectedIndex)
- {
-
ISelectionModel(dataProviderModel).selectedIndex =
ISelectionModel(dataProviderModel).selectedIndex - 1;
- }
- else if (event.index ==
ISelectionModel(dataProviderModel).selectedIndex)
- {
-
ISelectionModel(dataProviderModel).selectedIndex = -1;
- }
- }
-
sendStrandEvent(_strand,"layoutNeeded");
}
@@ -197,14 +176,6 @@ package org.apache.royale.html.beads
var data:Object = event.item;
(itemRendererInitializer as
IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data,
event.index);
ir.data = data;
-
- if(dataProviderModel is ISelectionModel) {
- if (event.index ==
ISelectionModel(dataProviderModel).selectedIndex) {
- //manually trigger a selection change,
even if there was actually none.
- //This causes selection-based bindings
to work
-
IEventDispatcher(dataProviderModel).dispatchEvent(new
Event('selectedIndexChanged'));
- }
- }
}
override protected function get dataProviderLength():int
diff --git
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SelectionDataItemRendererFactoryForCollectionView.as
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SelectionDataItemRendererFactoryForCollectionView.as
new file mode 100644
index 0000000..a7595c8
--- /dev/null
+++
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SelectionDataItemRendererFactoryForCollectionView.as
@@ -0,0 +1,92 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.ISelectionModel;
+ import org.apache.royale.events.CollectionEvent;
+ import org.apache.royale.events.Event;
+ import org.apache.royale.events.IEventDispatcher;
+
+
+ /**
+ * This class is an extension of
DataItemRendererFactoryForCollectionView for components using ISelectionModel
+ * that will need special handling of selected index for items added,
removed or updated at runtime from the dataprovider.
+ */
+ public class SelectionDataItemRendererFactoryForCollectionView extends
DataItemRendererFactoryForCollectionView
+ {
+ public function
SelectionDataItemRendererFactoryForCollectionView(target:Object = null)
+ {
+ super(target);
+ }
+
+ /**
+ * @private
+ * @royaleignorecoercion org.apache.royale.core.ISelectionModel
+ */
+ override protected function
itemAddedHandler(event:CollectionEvent):void
+ {
+ super.itemAddedHandler(event);
+
+ //adjust the model's selectedIndex, if applicable
+ if(dataProviderModel is ISelectionModel) {
+ if (event.index <=
ISelectionModel(dataProviderModel).selectedIndex) {
+
ISelectionModel(dataProviderModel).selectedIndex =
ISelectionModel(dataProviderModel).selectedIndex + 1;
+ }
+ }
+ }
+
+ /**
+ * @private
+ * @royaleignorecoercion org.apache.royale.core.ISelectionModel
+ */
+ override protected function
itemRemovedHandler(event:CollectionEvent):void
+ {
+ super.itemRemovedHandler(event);
+
+ //adjust the model's selectedIndex, if applicable
+ if(dataProviderModel is ISelectionModel) {
+ if (event.index <
ISelectionModel(dataProviderModel).selectedIndex)
+ {
+
ISelectionModel(dataProviderModel).selectedIndex =
ISelectionModel(dataProviderModel).selectedIndex - 1;
+ }
+ else if (event.index ==
ISelectionModel(dataProviderModel).selectedIndex)
+ {
+
ISelectionModel(dataProviderModel).selectedIndex = -1;
+ }
+ }
+ }
+
+ /**
+ * @private
+ * @royaleignorecoercion org.apache.royale.core.ISelectionModel
+ */
+ override protected function
itemUpdatedHandler(event:CollectionEvent):void
+ {
+ super.itemUpdatedHandler(event);
+
+ if(dataProviderModel is ISelectionModel) {
+ if (event.index ==
ISelectionModel(dataProviderModel).selectedIndex) {
+ //manually trigger a selection change,
even if there was actually none.
+ //This causes selection-based bindings
to work
+
IEventDispatcher(dataProviderModel).dispatchEvent(new
Event('selectedIndexChanged'));
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/frameworks/projects/Jewel/src/main/resources/defaults.css
b/frameworks/projects/Jewel/src/main/resources/defaults.css
index 47e46d1..9b88fb8 100644
--- a/frameworks/projects/Jewel/src/main/resources/defaults.css
+++ b/frameworks/projects/Jewel/src/main/resources/defaults.css
@@ -292,7 +292,7 @@ j|ButtonBar {
IBeadView:
ClassReference("org.apache.royale.jewel.beads.views.ButtonBarView");
IBeadController:
ClassReference("org.apache.royale.jewel.beads.controllers.ListSingleSelectionMouseController");
IBeadLayout:
ClassReference("org.apache.royale.jewel.beads.layouts.ButtonBarLayout");
- IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView");
+ IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView");
IItemRendererClassFactory:
ClassReference("org.apache.royale.core.ItemRendererClassFactory");
IItemRenderer:
ClassReference("org.apache.royale.jewel.itemRenderers.ButtonBarItemRenderer");
IItemRendererInitializer:
ClassReference("org.apache.royale.jewel.beads.itemRenderers.ButtonBarItemRendererInitializer");
@@ -3263,7 +3263,7 @@ j|List {
IViewport:
ClassReference("org.apache.royale.jewel.supportClasses.scrollbar.ScrollingViewport");
IViewportModel:
ClassReference("org.apache.royale.html.beads.models.ViewportModel");
IBeadModel:
ClassReference("org.apache.royale.jewel.beads.models.ArrayListSelectionModel");
- IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView");
+ IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView");
}
@media -royale-swf {
@@ -3289,7 +3289,7 @@ j|Navigation {
IViewport:
ClassReference("org.apache.royale.jewel.supportClasses.scrollbar.ScrollingViewport");
IViewportModel:
ClassReference("org.apache.royale.html.beads.models.ViewportModel");
IBeadModel:
ClassReference("org.apache.royale.jewel.beads.models.ArrayListSelectionModel");
- IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView");
+ IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView");
}
j|NavigationLinkItemRenderer {
@@ -3704,7 +3704,7 @@ j|TabBar {
IViewport: ClassReference("org.apache.royale.jewel.supportClasses.Viewport");
IViewportModel:
ClassReference("org.apache.royale.html.beads.models.ViewportModel");
IBeadModel:
ClassReference("org.apache.royale.jewel.beads.models.ArrayListSelectionModel");
- IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView");
+ IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView");
}
.jewel.tabbarbutton {
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_buttonbar.sass
b/frameworks/projects/Jewel/src/main/sass/components/_buttonbar.sass
index 55c30de..64ff363 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_buttonbar.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_buttonbar.sass
@@ -39,7 +39,7 @@ j|ButtonBar
IBeadView:
ClassReference("org.apache.royale.jewel.beads.views.ButtonBarView")
IBeadController:
ClassReference("org.apache.royale.jewel.beads.controllers.ListSingleSelectionMouseController")
IBeadLayout:
ClassReference("org.apache.royale.jewel.beads.layouts.ButtonBarLayout")
- IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView")
+ IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView")
IItemRendererClassFactory:
ClassReference("org.apache.royale.core.ItemRendererClassFactory")
IItemRenderer:
ClassReference("org.apache.royale.jewel.itemRenderers.ButtonBarItemRenderer")
IItemRendererInitializer:
ClassReference("org.apache.royale.jewel.beads.itemRenderers.ButtonBarItemRendererInitializer")
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_list.sass
b/frameworks/projects/Jewel/src/main/sass/components/_list.sass
index e6aae70..f92b744 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_list.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_list.sass
@@ -50,7 +50,7 @@ j|List
IViewport:
ClassReference("org.apache.royale.jewel.supportClasses.scrollbar.ScrollingViewport")
IViewportModel:
ClassReference("org.apache.royale.html.beads.models.ViewportModel")
IBeadModel:
ClassReference("org.apache.royale.jewel.beads.models.ArrayListSelectionModel")
- IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView")
+ IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView")
//IBeadModel:
ClassReference("org.apache.royale.html.beads.models.ArraySelectionModel")
//IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData")
diff --git
a/frameworks/projects/Jewel/src/main/sass/components/_navigation.sass
b/frameworks/projects/Jewel/src/main/sass/components/_navigation.sass
index 33256e3..a31d9e2 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_navigation.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_navigation.sass
@@ -36,7 +36,7 @@ j|Navigation
IViewport:
ClassReference("org.apache.royale.jewel.supportClasses.scrollbar.ScrollingViewport")
IViewportModel:
ClassReference("org.apache.royale.html.beads.models.ViewportModel")
IBeadModel:
ClassReference("org.apache.royale.jewel.beads.models.ArrayListSelectionModel")
- IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView")
+ IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView")
// Jewel NavigationLinkItemRenderer
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_tabbar.sass
b/frameworks/projects/Jewel/src/main/sass/components/_tabbar.sass
index 05c3479..6805e11 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_tabbar.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_tabbar.sass
@@ -58,7 +58,7 @@ j|TabBar
IViewport:
ClassReference("org.apache.royale.jewel.supportClasses.Viewport")
IViewportModel:
ClassReference("org.apache.royale.html.beads.models.ViewportModel")
IBeadModel:
ClassReference("org.apache.royale.jewel.beads.models.ArrayListSelectionModel")
- IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView")
+ IDataProviderItemRendererMapper:
ClassReference("org.apache.royale.html.beads.SelectionDataItemRendererFactoryForCollectionView")
// Jewel TabBarButtonItemRenderer
$tabbarbutton-margin: 0 !default