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 <[email protected]>
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

Reply via email to