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