You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ca...@apache.org on 2019/02/28 16:54:11 UTC

[royale-asjs] branch develop updated: Jewel DropDownList : RequireSelection bead & TDJ demo

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 4c92b2b  Jewel DropDownList : RequireSelection bead & TDJ demo
4c92b2b is described below

commit 4c92b2bfe5391e92f446bc50915f7e031d0d9e45
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Thu Feb 28 17:54:02 2019 +0100

    Jewel DropDownList : RequireSelection bead & TDJ demo
---
 .../src/main/royale/DropDownListPlayGround.mxml    |  23 ++++
 .../Jewel/src/main/resources/jewel-manifest.xml    |   1 +
 .../beads/controllers/DropDownListController.as    |   5 +-
 .../controls/dropdownlist/RequireSelection.as      | 120 +++++++++++++++++++++
 ...DownListItemRendererFactoryForCollectionView.as |   6 +-
 .../royale/jewel/beads/models/DropDownListModel.as |  15 ++-
 .../jewel/beads/models/IDropDownListModel.as       |   1 +
 .../royale/jewel/beads/views/DropDownListView.as   |  11 +-
 8 files changed, 168 insertions(+), 14 deletions(-)

diff --git a/examples/royale/TourDeJewel/src/main/royale/DropDownListPlayGround.mxml b/examples/royale/TourDeJewel/src/main/royale/DropDownListPlayGround.mxml
index c3bc657..04cadbc 100644
--- a/examples/royale/TourDeJewel/src/main/royale/DropDownListPlayGround.mxml
+++ b/examples/royale/TourDeJewel/src/main/royale/DropDownListPlayGround.mxml
@@ -256,6 +256,29 @@ limitations under the License.
 				</j:Grid>
 			</j:Card>
 		</j:GridCell>
+		
+		<j:GridCell desktopNumerator="1" desktopDenominator="1" tabletNumerator="1" tabletDenominator="1" phoneNumerator="1" phoneDenominator="1">
+			<j:Card>
+				<html:H3 text="Jewel DropDownList requireSelection"/>
+
+				<j:Grid gap="true" itemsVerticalAlign="itemsCentered">
+					<j:GridCell desktopNumerator="1" desktopDenominator="3" tabletNumerator="1" tabletDenominator="3" phoneNumerator="1" phoneDenominator="1" itemsVerticalAlign="itemsCentered" width="290">
+						<j:DropDownList localId="rqddl" labelField="label" dataProvider="{listModel.avengers}" selectedIndex="2">
+							<j:beads>
+								<j:DropDownListTextPrompt prompt="Required Selection..."/>
+								<j:RequireSelection requireSelection="{requiredSelecion_ddl.selected}"/>
+							</j:beads>
+						</j:DropDownList>
+					</j:GridCell>
+					<j:GridCell desktopNumerator="1" desktopDenominator="3" tabletNumerator="1" tabletDenominator="3" phoneNumerator="1" phoneDenominator="1" itemsVerticalAlign="itemsCentered" width="290">
+						<j:CheckBox localId="requiredSelecion_ddl" text="Require Selection?"/>
+					</j:GridCell>
+					<j:GridCell desktopNumerator="1" desktopDenominator="3" tabletNumerator="1" tabletDenominator="3" phoneNumerator="1" phoneDenominator="1" itemsVerticalAlign="itemsCentered" width="290">
+						<j:Button text="deselect" click="rqddl.selectedIndex = -1"/>
+					</j:GridCell>
+				</j:Grid>
+			</j:Card>
+		</j:GridCell>
 	</j:Grid>
 
 </c:ExampleAndSourceCodeTabbedSectionContent>
diff --git a/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml b/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
index 265c2b6..7cfe7ec 100644
--- a/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
+++ b/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
@@ -125,6 +125,7 @@
     
     <component id="DispatchChangeOnStartup" class="org.apache.royale.jewel.beads.controls.DispatchChangeOnStartup"/>
     <component id="DropDownListTextPrompt" class="org.apache.royale.jewel.beads.controls.dropdownlist.DropDownListTextPrompt"/>
+    <component id="RequireSelection" class="org.apache.royale.jewel.beads.controls.dropdownlist.RequireSelection"/>
     <component id="ComboBoxTextPrompt" class="org.apache.royale.jewel.beads.controls.combobox.ComboBoxTextPrompt"/>
     <component id="SearchFilter" class="org.apache.royale.jewel.beads.controls.combobox.SearchFilter"/>
     <component id="DateFieldTextPrompt" class="org.apache.royale.jewel.beads.controls.datefield.DateFieldTextPrompt"/>
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/DropDownListController.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/DropDownListController.as
index 1bddf92..8c04456 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/DropDownListController.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/DropDownListController.as
@@ -29,8 +29,8 @@ package org.apache.royale.jewel.beads.controllers
 	import org.apache.royale.events.ItemClickedEvent;
 	import org.apache.royale.events.ItemRemovedEvent;
 	import org.apache.royale.jewel.beads.models.DropDownListModel;
-import org.apache.royale.jewel.beads.models.IJewelSelectionModel;
-import org.apache.royale.jewel.beads.views.DropDownListView;
+	import org.apache.royale.jewel.beads.models.IJewelSelectionModel;
+	import org.apache.royale.jewel.beads.views.DropDownListView;
 
     /**
      *  The DropDownListController class is the controller for
@@ -103,7 +103,6 @@ import org.apache.royale.jewel.beads.views.DropDownListView;
                 IEventDispatcher(model).addEventListener('selectionChanged', modelChangeHandler);
                 IEventDispatcher(model).addEventListener('dataProviderChanged', modelChangeHandler);
             }
-
 		}
 
         /**
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/dropdownlist/RequireSelection.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/dropdownlist/RequireSelection.as
new file mode 100644
index 0000000..febbcb8
--- /dev/null
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/dropdownlist/RequireSelection.as
@@ -0,0 +1,120 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.jewel.beads.controls.dropdownlist
+{
+	import org.apache.royale.core.IBead;
+	import org.apache.royale.core.IStrand;
+	import org.apache.royale.events.Event;
+	import org.apache.royale.jewel.DropDownList;
+	import org.apache.royale.jewel.beads.models.IDropDownListModel;
+	
+	/**
+	 *  The RequireSelection bead is a specialty bead that can be used with
+	 *  any DropDownList control to force a data item always be selected in the control
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.9.4
+	 */
+	public class RequireSelection implements IBead
+	{
+		/**
+		 *  constructor.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.4
+		 */
+		public function RequireSelection()
+		{
+		}
+		
+		private var ddl:DropDownList;
+		
+		/**
+		 *  @copy org.apache.royale.core.IBead#strand
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.4
+		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+		 */
+		public function set strand(value:IStrand):void
+		{
+			ddl = value as DropDownList;
+			ddl.addEventListener('selectionChanged', selectionChangeHandler);
+		}
+
+		/**
+         *  @private
+         *  Storage for the requireSelection property.
+         */
+        private var _requireSelection:Boolean = false;
+
+        /**
+         *  If <code>true</code>, a data item must always be selected in the control.
+         *  If the value is <code>true</code>, the <code>selectedIndex</code> property 
+         *  is always set to a value between 0 and (<code>dataProvider.length</code> - 1).
+         * 
+         * <p>The default value is <code>false</code> for most subclasses, except TabBar. In that case, the default is <code>true</code>.</p>
+         *
+         *  @default false
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10
+         *  @playerversion AIR 1.5
+         *  @productversion Flex 4
+         */
+        public function get requireSelection():Boolean
+        {
+            return _requireSelection;
+        }
+
+        /**
+         *  @private
+         */
+        public function set requireSelection(value:Boolean):void
+        {
+            if (value != _requireSelection)
+            {
+                _requireSelection = value;
+
+                var ddModel:IDropDownListModel = ddl.model as IDropDownListModel;
+                if (ddModel) {
+                    ddModel.offset = _requireSelection ? 0 : 1;
+                    forceSelection();
+                }
+            }
+        }
+
+		private function selectionChangeHandler(event:Event):void {
+			forceSelection();
+		}
+
+		private function forceSelection():void {
+			if(_requireSelection && ddl.selectedIndex == -1)
+			{
+				ddl.selectedIndex = 0;
+			}	
+		}
+	}
+}
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/DropDownListItemRendererFactoryForCollectionView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/DropDownListItemRendererFactoryForCollectionView.as
index cc37ae5..f33901c 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/DropDownListItemRendererFactoryForCollectionView.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/DropDownListItemRendererFactoryForCollectionView.as
@@ -23,6 +23,7 @@ package org.apache.royale.jewel.beads.itemRenderers
 	import org.apache.royale.core.ISelectableItemRenderer;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.jewel.beads.models.IDropDownListModel;
 	import org.apache.royale.jewel.itemRenderers.DropDownListItemRenderer;
 
 	/**
@@ -57,8 +58,9 @@ package org.apache.royale.jewel.beads.itemRenderers
 			
 			var ir:ISelectableItemRenderer;
 			var item:Object;
-
-			var offset:int = 1;
+			
+			var model:IDropDownListModel = _strand.getBeadByType(IDropDownListModel) as IDropDownListModel;
+			var offset:int = model.offset;
 
 			if(offset == 1)
 			{
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/DropDownListModel.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/DropDownListModel.as
index bbb9422..25183c9 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/DropDownListModel.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/DropDownListModel.as
@@ -18,6 +18,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.beads.models
 {
+    import org.apache.royale.events.Event;
 
     /**
      *  The DropDownListModel class defines the data associated with an org.apache.royale.jewel.DropDownListModel
@@ -35,11 +36,19 @@ package org.apache.royale.jewel.beads.models
             super();
         }
 
-
         private var _offset:int = 1;
-        public function get offset():int{
+        public function get offset():int
+        {
             return _offset;
         }
-
+        
+        public function set offset(value:int):void
+        {
+            if(_offset != value)
+            {
+                _offset = value;
+                dispatchEvent(new Event("dataProviderChanged"))
+            }
+        }
     }
 }
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/IDropDownListModel.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/IDropDownListModel.as
index eec3c8d..b66c97f 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/IDropDownListModel.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/IDropDownListModel.as
@@ -30,5 +30,6 @@ package org.apache.royale.jewel.beads.models
     {
 
         function get offset():int;
+        function set offset(value:int):void;
     }
 }
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DropDownListView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DropDownListView.as
index a43aba0..975bd0f 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DropDownListView.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DropDownListView.as
@@ -18,18 +18,17 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.beads.views
 {
-import org.apache.royale.jewel.beads.models.IDropDownListModel;
-
 COMPILE::JS
-    {
-        import org.apache.royale.html.elements.Select;
-    }
+{
+    import org.apache.royale.html.elements.Select;
+}
+    import org.apache.royale.core.ISelectableItemRenderer;
     import org.apache.royale.core.ISelectionModel;
     import org.apache.royale.core.IStrand;
     import org.apache.royale.events.Event;
     import org.apache.royale.html.beads.DataContainerView;
     import org.apache.royale.jewel.DropDownList;
-    import org.apache.royale.core.ISelectableItemRenderer;
+    import org.apache.royale.jewel.beads.models.IDropDownListModel;
 
     /**
      *  The DropDownListView class creates the visual elements of the org.apache.royale.jewel.DropDownList