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 2018/11/06 17:25:42 UTC
[royale-asjs] branch develop updated: fix selectedItem in Jewel
DropDownList
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 6f686a1 fix selectedItem in Jewel DropDownList
6f686a1 is described below
commit 6f686a1043ce177f56d82b68e0f1a803b85e095b
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Tue Nov 6 18:25:34 2018 +0100
fix selectedItem in Jewel DropDownList
---
.../src/main/royale/DropDownListPlayGround.mxml | 6 +-
.../projects/Jewel/src/main/resources/defaults.css | 1 +
.../projects/Jewel/src/main/royale/JewelClasses.as | 1 +
.../royale/org/apache/royale/jewel/DropDownList.as | 4 +
.../beads/controllers/DropDownListController.as | 129 ++++++++++++++-------
.../royale/jewel/beads/models/DropDownListModel.as | 6 +-
.../royale/jewel/beads/views/DropDownListView.as | 32 +++++
.../apache/royale/jewel/beads/views/ListView.as | 7 +-
.../src/main/sass/components/_dropdownlist.sass | 2 +-
9 files changed, 136 insertions(+), 52 deletions(-)
diff --git a/examples/royale/JewelExample/src/main/royale/DropDownListPlayGround.mxml b/examples/royale/JewelExample/src/main/royale/DropDownListPlayGround.mxml
index 8d8d7bf..152939c 100644
--- a/examples/royale/JewelExample/src/main/royale/DropDownListPlayGround.mxml
+++ b/examples/royale/JewelExample/src/main/royale/DropDownListPlayGround.mxml
@@ -297,7 +297,11 @@ limitations under the License.
tabletNumerator="1" tabletDenominator="3"
phoneNumerator="1" phoneDenominator="1"
itemsVerticalAlign="itemsCentered" width="290">
- <j:DropDownList id="avengersDropDownList_withSelectedItem" selectedItem="{listModel.avengers.getItemAt(4)}" labelField="label" dataProvider="{listModel.avengers}" change="avengersDropDownListHandler_withSelectedItem(event)">
+ <j:DropDownList id="avengersDropDownList_withSelectedItem"
+ labelField="label"
+ dataProvider="{listModel.avengers}"
+ selectedItem="{listModel.avengers.getItemAt(4)}"
+ change="avengersDropDownListHandler_withSelectedItem(event)">
<j:beads>
<j:DropDownListTextPrompt prompt="Select Avengers..."/>
</j:beads>
diff --git a/frameworks/projects/Jewel/src/main/resources/defaults.css b/frameworks/projects/Jewel/src/main/resources/defaults.css
index 40a5949..670d18a 100644
--- a/frameworks/projects/Jewel/src/main/resources/defaults.css
+++ b/frameworks/projects/Jewel/src/main/resources/defaults.css
@@ -707,6 +707,7 @@ j|DropDownList {
IDataProviderItemRendererMapper: ClassReference("org.apache.royale.jewel.beads.itemRenderers.DropDownListItemRendererFactoryForCollectionView");
IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
IItemRenderer: ClassReference("org.apache.royale.jewel.itemRenderers.DropDownListItemRenderer");
+ IBeadController: ClassReference("org.apache.royale.jewel.beads.controllers.DropDownListController");
}
@media -royale-swf {
diff --git a/frameworks/projects/Jewel/src/main/royale/JewelClasses.as b/frameworks/projects/Jewel/src/main/royale/JewelClasses.as
index 270034b..f422325 100644
--- a/frameworks/projects/Jewel/src/main/royale/JewelClasses.as
+++ b/frameworks/projects/Jewel/src/main/royale/JewelClasses.as
@@ -49,6 +49,7 @@ package
import org.apache.royale.jewel.beads.controllers.TableCellSelectionMouseController; TableCellSelectionMouseController;
import org.apache.royale.jewel.beads.controllers.ComboBoxController; ComboBoxController;
import org.apache.royale.jewel.beads.controllers.SnackbarController; SnackbarController;
+ import org.apache.royale.jewel.beads.controllers.DropDownListController; DropDownListController;
import org.apache.royale.jewel.beads.views.ImageView; ImageView;
import org.apache.royale.jewel.beads.views.SpinnerView; SpinnerView;
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as
index df99ae0..09d023d 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DropDownList.as
@@ -234,6 +234,10 @@ package org.apache.royale.jewel
public function set selectedItem(value:Object):void
{
ISelectionModel(model).selectedItem = value;
+ COMPILE::JS
+ {
+ (element as HTMLSelectElement).selectedIndex = ISelectionModel(model).selectedIndex + 1;
+ }
}
/**
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 9a75211..162e103 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
@@ -18,19 +18,18 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.royale.jewel.beads.controllers
{
- import flash.display.DisplayObject;
- import flash.geom.Point;
+ // import flash.display.DisplayObject;
+ // import flash.geom.Point;
- import org.apache.royale.core.IBead;
import org.apache.royale.core.IBeadController;
- import org.apache.royale.core.ISelectionModel;
import org.apache.royale.core.IStrand;
- import org.apache.royale.core.IUIBase;
- import org.apache.royale.core.UIBase;
import org.apache.royale.events.Event;
import org.apache.royale.events.IEventDispatcher;
- import org.apache.royale.events.MouseEvent;
- import org.apache.royale.html.beads.IDropDownListView;
+ import org.apache.royale.events.ItemAddedEvent;
+ 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.views.DropDownListView;
/**
* The DropDownListController class is the controller for
@@ -46,7 +45,7 @@ package org.apache.royale.jewel.beads.controllers
* @playerversion AIR 2.6
* @productversion Royale 0.9.4
*/
- public class DropDownListController implements IBead, IBeadController
+ public class DropDownListController implements IBeadController
{
/**
* Constructor.
@@ -60,8 +59,27 @@ package org.apache.royale.jewel.beads.controllers
{
}
+ /**
+ * The model.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.4
+ */
+ protected var model:DropDownListModel;
+
+ /**
+ * The view.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.9.4
+ */
+ protected var view:DropDownListView;
+
private var _strand:IStrand;
-
/**
* @copy org.apache.royale.core.IBead#strand
*
@@ -73,45 +91,72 @@ package org.apache.royale.jewel.beads.controllers
public function set strand(value:IStrand):void
{
_strand = value;
- IEventDispatcher(value).addEventListener(org.apache.royale.events.MouseEvent.CLICK, clickHandler);
+ model = value.getBeadByType(DropDownListModel) as DropDownListModel;
+ IEventDispatcher(_strand).addEventListener("itemAdded", handleItemAdded);
+ IEventDispatcher(_strand).addEventListener("itemRemoved", handleItemRemoved);
+ //IEventDispatcher(value).addEventListener(org.apache.royale.events.MouseEvent.CLICK, clickHandler);
+ }
+
+ /**
+ * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+ */
+ protected function handleItemAdded(event:ItemAddedEvent):void
+ {
+ IEventDispatcher(event.item).addEventListener("itemClicked", selectedHandler);
}
- private function clickHandler(event:org.apache.royale.events.MouseEvent):void
+ /**
+ * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+ */
+ protected function handleItemRemoved(event:ItemRemovedEvent):void
+ {
+ IEventDispatcher(event.item).removeEventListener("itemClicked", selectedHandler);
+ }
+
+ protected function selectedHandler(event:ItemClickedEvent):void
{
- var viewBead:IDropDownListView = _strand.getBeadByType(IDropDownListView) as IDropDownListView;
- var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
- var popUpModel:ISelectionModel = UIBase(viewBead.popUp).model as ISelectionModel;
- DisplayObject(viewBead.popUp).width = DisplayObject(_strand).width;
- popUpModel.dataProvider = selectionModel.dataProvider;
- popUpModel.labelField = selectionModel.labelField;
- viewBead.popUpVisible = true; // adds to display list as well
- popUpModel.selectedIndex = selectionModel.selectedIndex;
- var pt:Point = new Point(DisplayObject(_strand).x, DisplayObject(_strand).y + DisplayObject(_strand).height);
- pt = DisplayObject(_strand).parent.localToGlobal(pt);
- DisplayObject(viewBead.popUp).x = pt.x;
- DisplayObject(viewBead.popUp).y = pt.y;
- IEventDispatcher(viewBead.popUp).addEventListener(Event.CHANGE, changeHandler);
- IUIBase(_strand).topMostEventDispatcher.addEventListener(org.apache.royale.events.MouseEvent.CLICK, dismissHandler);
+ model.selectedIndex = event.index;
+ model.selectedItem = event.data;
+ view.host.dispatchEvent(new Event(Event.CHANGE));
+ trace(model, model.selectedIndex, model.selectedItem, view.host);
}
+
+ // private function clickHandler(event:org.apache.royale.events.MouseEvent):void
+ // {
+ // var viewBead:IDropDownListView = _strand.getBeadByType(IDropDownListView) as IDropDownListView;
+ // var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+ // var popUpModel:ISelectionModel = UIBase(viewBead.popUp).model as ISelectionModel;
+ // DisplayObject(viewBead.popUp).width = DisplayObject(_strand).width;
+ // popUpModel.dataProvider = selectionModel.dataProvider;
+ // popUpModel.labelField = selectionModel.labelField;
+ // viewBead.popUpVisible = true; // adds to display list as well
+ // popUpModel.selectedIndex = selectionModel.selectedIndex;
+ // var pt:Point = new Point(DisplayObject(_strand).x, DisplayObject(_strand).y + DisplayObject(_strand).height);
+ // pt = DisplayObject(_strand).parent.localToGlobal(pt);
+ // DisplayObject(viewBead.popUp).x = pt.x;
+ // DisplayObject(viewBead.popUp).y = pt.y;
+ // IEventDispatcher(viewBead.popUp).addEventListener(Event.CHANGE, changeHandler);
+ // IUIBase(_strand).topMostEventDispatcher.addEventListener(org.apache.royale.events.MouseEvent.CLICK, dismissHandler);
+ // }
- private function dismissHandler(event:org.apache.royale.events.MouseEvent):void
- {
- if (event.target == _strand) return;
+ // private function dismissHandler(event:org.apache.royale.events.MouseEvent):void
+ // {
+ // if (event.target == _strand) return;
- IUIBase(_strand).topMostEventDispatcher.removeEventListener(org.apache.royale.events.MouseEvent.CLICK, dismissHandler);
- var viewBead:IDropDownListView = _strand.getBeadByType(IDropDownListView) as IDropDownListView;
- viewBead.popUpVisible = false;
- }
+ // IUIBase(_strand).topMostEventDispatcher.removeEventListener(org.apache.royale.events.MouseEvent.CLICK, dismissHandler);
+ // var viewBead:IDropDownListView = _strand.getBeadByType(IDropDownListView) as IDropDownListView;
+ // viewBead.popUpVisible = false;
+ // }
- private function changeHandler(event:Event):void
- {
- var viewBead:IDropDownListView = _strand.getBeadByType(IDropDownListView) as IDropDownListView;
- viewBead.popUpVisible = false;
- var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
- var popUpModel:ISelectionModel = UIBase(viewBead.popUp).model as ISelectionModel;
- selectionModel.selectedIndex = popUpModel.selectedIndex;
- IEventDispatcher(_strand).dispatchEvent(new Event(Event.CHANGE));
- }
+ // private function changeHandler(event:Event):void
+ // {
+ // var viewBead:IDropDownListView = _strand.getBeadByType(IDropDownListView) as IDropDownListView;
+ // viewBead.popUpVisible = false;
+ // var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+ // var popUpModel:ISelectionModel = UIBase(viewBead.popUp).model as ISelectionModel;
+ // selectionModel.selectedIndex = popUpModel.selectedIndex;
+ // IEventDispatcher(_strand).dispatchEvent(new Event(Event.CHANGE));
+ // }
}
}
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 9deb18c..f2204a3 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
@@ -121,12 +121,12 @@ package org.apache.royale.jewel.beads.models
if (value == _selectedItem) return;
_selectedItem = value;
- var n:int = _dataProvider.length + offset;
- for (var i:int = 1; i < n; i++)
+ var n:int = _dataProvider.length;
+ for (var i:int = 0; i < n; i++)
{
if (_dataProvider.getItemAt(i) == value)
{
- _selectedIndex = i - offset;
+ _selectedIndex = i;
break;
}
}
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 66822fa..0a25b9a 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
@@ -27,6 +27,7 @@ package org.apache.royale.jewel.beads.views
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;
/**
* The DropDownListView class creates the visual elements of the org.apache.royale.jewel.DropDownList
@@ -91,6 +92,36 @@ package org.apache.royale.jewel.beads.views
changedSelection();
}
+ /**
+ * @private
+ * @royaleignorecoercion org.apache.royale.core.ISelectionModel
+ */
+ override protected function handleInitComplete(event:Event):void
+ {
+ model = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+ model.addEventListener("selectedIndexChanged", selectionChangeHandler);
+
+ super.handleInitComplete(event);
+ }
+
+
+ protected var lastSelectedIndex:int = -1;
+ /**
+ * @private
+ * @royaleignorecoercion org.apache.royale.core.ISelectableItemRenderer
+ */
+ protected function selectionChangeHandler(event:Event):void
+ {
+ var ir:ISelectableItemRenderer = dataGroup.getItemRendererAt(lastSelectedIndex) as ISelectableItemRenderer;
+ if(ir)
+ ir.selected = false;
+ ir = dataGroup.getItemRendererAt(model.selectedIndex) as ISelectableItemRenderer;
+ if(ir)
+ ir.selected = true;
+
+ lastSelectedIndex = model.selectedIndex;
+ }
+
override protected function itemsCreatedHandler(event:org.apache.royale.events.Event):void
{
super.itemsCreatedHandler(event);
@@ -108,6 +139,7 @@ package org.apache.royale.jewel.beads.views
if (model.selectedIndex > -1 && model.dataProvider)
{
dropDownList.selectedIndex = model.selectedIndex;
+ dropDownList.selectedItem = model.selectedItem;
}
}
}
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ListView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ListView.as
index a9bad6c..3f6ab5d 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ListView.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ListView.as
@@ -18,7 +18,8 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.royale.jewel.beads.views
{
- import org.apache.royale.core.IBead;
+ import org.apache.royale.core.IItemRendererParent;
+ import org.apache.royale.core.ILayoutView;
import org.apache.royale.core.IRollOverModel;
import org.apache.royale.core.ISelectableItemRenderer;
import org.apache.royale.core.ISelectionModel;
@@ -26,10 +27,6 @@ package org.apache.royale.jewel.beads.views
import org.apache.royale.events.Event;
import org.apache.royale.events.IEventDispatcher;
import org.apache.royale.html.beads.DataContainerView;
- import org.apache.royale.core.IItemRendererParent;
- import org.apache.royale.core.IContentView;
- import org.apache.royale.utils.loadBeadFromValuesManager;
- import org.apache.royale.core.ILayoutView;
/**
* The ListView class creates the visual elements of the org.apache.royale.jewel.List
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_dropdownlist.sass b/frameworks/projects/Jewel/src/main/sass/components/_dropdownlist.sass
index 5c3fcdb..1349890 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_dropdownlist.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_dropdownlist.sass
@@ -50,7 +50,7 @@ j|DropDownList
IDataProviderItemRendererMapper: ClassReference("org.apache.royale.jewel.beads.itemRenderers.DropDownListItemRendererFactoryForCollectionView")
IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory")
IItemRenderer: ClassReference("org.apache.royale.jewel.itemRenderers.DropDownListItemRenderer")
- // IBeadController: ClassReference("org.apache.royale.mdl.beads.controllers.DropDownListController")
+ IBeadController: ClassReference("org.apache.royale.jewel.beads.controllers.DropDownListController")
// IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData")