FLEX-35328 - Add ability to programmatic selection in MDL DropDownList

Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/4b6de169
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/4b6de169
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/4b6de169

Branch: refs/heads/tlf
Commit: 4b6de1691e02e2226deb5af4b81909907fff8bc1
Parents: f74836d
Author: piotrz <pio...@apache.org>
Authored: Sat Jun 24 16:24:56 2017 +0200
Committer: piotrz <pio...@apache.org>
Committed: Sat Jun 24 16:24:56 2017 +0200

----------------------------------------------------------------------
 .../beads/controllers/DropDownListController.as | 12 +++--
 .../flex/mdl/beads/views/DropDownListView.as    | 47 +++++++++++++++++++-
 2 files changed, 53 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4b6de169/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/controllers/DropDownListController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/controllers/DropDownListController.as
 
b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/controllers/DropDownListController.as
index ed1a90c..149be7d 100644
--- 
a/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/controllers/DropDownListController.as
+++ 
b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/controllers/DropDownListController.as
@@ -83,10 +83,14 @@ package org.apache.flex.mdl.beads.controllers
                COMPILE::JS
         private function onSelectChanged(event:Event):void
         {
-                       var eventTarget:Object = event.target;
-                       
-                       model.selectedIndex = eventTarget.selectedIndex;
-                       model.selectedItem = 
model.dataProvider[model.selectedIndex];
+            var eventTarget:Object = event.target;
+                       var selectedIndex:int = eventTarget.selectedIndex - 1;
+
+                       if (model.selectedIndex != selectedIndex)
+            {
+                model.selectedIndex = selectedIndex;
+                model.selectedItem = model.dataProvider[selectedIndex];
+            }
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4b6de169/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/views/DropDownListView.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/views/DropDownListView.as
 
b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/views/DropDownListView.as
index e3c1658..cad3e0d 100644
--- 
a/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/views/DropDownListView.as
+++ 
b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/views/DropDownListView.as
@@ -18,6 +18,7 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.mdl.beads.views
 {
+    import org.apache.flex.core.ISelectionModel;
     import org.apache.flex.core.IStrand;
     import org.apache.flex.html.Option;
     import org.apache.flex.html.Select;
@@ -27,8 +28,7 @@ package org.apache.flex.mdl.beads.views
 
     /**
      *  The DropDownListView class creates the visual elements of the 
org.apache.flex.mdl.DropDownList
-     *  component. The job of the view bead is to put together the parts of 
the DropDownList such as the Label
-     *  control and material icon ARROW_DROP_DOWN to trigger the pop-up.
+     *  component. The job of the view bead is to put together the parts of 
the DropDownList such as the Select and Label
      *
      *  @viewbead
      *  @langversion 3.0
@@ -79,9 +79,39 @@ package org.apache.flex.mdl.beads.views
             }
         }
 
+        override protected function dataProviderChangeHandler(event:Event):void
+        {
+            super.dataProviderChangeHandler(event);
+
+            COMPILE::JS
+            {
+                setProgrammaticallyChangedSelection();
+            }
+        }
+
+        override protected function 
itemsCreatedHandler(event:org.apache.flex.events.Event):void
+        {
+            super.itemsCreatedHandler(event);
+
+            COMPILE::JS
+            {
+                setProgrammaticallyChangedSelection();
+            }
+        }
+
+        private function selectionChangeHandler(event:Event):void
+        {
+            COMPILE::JS
+            {
+                setProgrammaticallyChangedSelection();
+            }
+        }
+
         override protected function handleInitComplete(event:Event):void
         {
             super.handleInitComplete(event);
+            
+            dataModel.addEventListener("selectedIndexChanged", 
selectionChangeHandler);
 
             COMPILE::JS
             {
@@ -98,5 +128,18 @@ package org.apache.flex.mdl.beads.views
             dropDownList.labelDisplay.htmlFor = name;
             dropDownList.dropDown.element.name = name;
         }
+
+        COMPILE::JS
+        private function setProgrammaticallyChangedSelection():void
+        {
+            var dropDownList:DropDownList = (_strand as DropDownList);
+            var selectedIndex:int = 
dropDownList.dropDown.element["selectedIndex"] - 1;
+            var model:ISelectionModel = dataModel as ISelectionModel;
+
+            if (model.selectedIndex > -1 && model.dataProvider && 
model.selectedIndex != selectedIndex)
+            {
+                dropDownList.dropDown.element["selectedIndex"] = 
model.selectedIndex + 1;
+            }
+        }
     }
 }
\ No newline at end of file

Reply via email to