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 10359a1  jewel-prompt-beads: update all prompt beads to support 
changes at runtime and data binding
10359a1 is described below

commit 10359a18bfd1503692e3bc0bb50413ba4ce3c2f7
Author: Carlos Rovira <[email protected]>
AuthorDate: Wed Mar 4 17:49:34 2020 +0100

    jewel-prompt-beads: update all prompt beads to support changes at runtime 
and data binding
---
 .../beads/controls/combobox/ComboBoxTextPrompt.as  | 53 +++++----------------
 .../controls/datefield/DateFieldTextPrompt.as      | 55 +++++-----------------
 .../dropdownlist/DropDownListTextPrompt.as         | 46 +++++-------------
 .../jewel/beads/controls/textinput/TextPrompt.as   | 50 ++++++++++++++------
 .../royale/jewel/beads/views/ComboBoxView.as       |  7 ++-
 5 files changed, 76 insertions(+), 135 deletions(-)

diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/ComboBoxTextPrompt.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/ComboBoxTextPrompt.as
index 2e7cc59..bb6cb94 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/ComboBoxTextPrompt.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/ComboBoxTextPrompt.as
@@ -22,9 +22,6 @@ package org.apache.royale.jewel.beads.controls.combobox
        {
                import flash.utils.setTimeout;
     }
-       import org.apache.royale.core.IStrand;
-       import org.apache.royale.events.Event;
-       import org.apache.royale.events.IEventDispatcher;
        import org.apache.royale.jewel.beads.controls.combobox.IComboBoxView;
        import org.apache.royale.jewel.beads.controls.textinput.TextPrompt;
        
@@ -51,46 +48,20 @@ package org.apache.royale.jewel.beads.controls.combobox
                public function ComboBoxTextPrompt()
                {
                }
-               
-               private var _strand:IStrand;
-               
-               /**
-                *  @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
-                */
-               override public function set strand(value:IStrand):void
-               {
-                       _strand = value;
-                       
IEventDispatcher(_strand).addEventListener("beadsAdded", addPrompt);
-               }       
 
                /**
-                *  add prompt when beads are added and we can access the view 
to retrieve the textinput
-                *   
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion Royale 0.9.4
-                *  @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
-                *  @royaleignorecoercion 
org.apache.royale.jewel.beads.controls.combobox.IComboBoxView
-                *  @royaleignorecoercion HTMLInputElement
-                */
-               private function addPrompt(event:Event):void
-        {
-                       
IEventDispatcher(_strand).removeEventListener("beadsAdded", addPrompt);
-
-                       var viewBead:IComboBoxView = 
_strand.getBeadByType(IComboBoxView) as IComboBoxView;
-                       
-                       COMPILE::JS
-                       {
-                               var e:HTMLInputElement = 
viewBead.textinput.element as HTMLInputElement;
-                               e.placeholder = prompt;
-                       }
+         *  @copy 
org.apache.royale.jewel.beads.controls.textinput.TextPrompt#updatePromptText()
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.7
+         */
+               COMPILE::JS
+               override protected function updatePromptText():void
+               {
+                       var e:HTMLInputElement = (host.view as 
IComboBoxView).textinput.element as HTMLInputElement;
+                       e.placeholder = prompt;
                }
        }
 }
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datefield/DateFieldTextPrompt.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datefield/DateFieldTextPrompt.as
index 82fb55b..d2c4212 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datefield/DateFieldTextPrompt.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datefield/DateFieldTextPrompt.as
@@ -22,11 +22,8 @@ package org.apache.royale.jewel.beads.controls.datefield
        {
                import flash.utils.setTimeout;
     }
-       import org.apache.royale.core.IStrand;
-       import org.apache.royale.events.Event;
-       import org.apache.royale.events.IEventDispatcher;
-       import org.apache.royale.jewel.beads.views.DateFieldView;
        import org.apache.royale.jewel.beads.controls.textinput.TextPrompt;
+       import org.apache.royale.jewel.beads.views.DateFieldView;
        
        /**
         *  The DateFieldTextPrompt class is a specialty bead that can be used 
with
@@ -51,46 +48,20 @@ package org.apache.royale.jewel.beads.controls.datefield
                public function DateFieldTextPrompt()
                {
                }
-               
-               private var _strand:IStrand;
-               
-               /**
-                *  @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
-                */
-               override public function set strand(value:IStrand):void
-               {
-                       _strand = value;
-                       
IEventDispatcher(_strand).addEventListener("beadsAdded", addPrompt);
-               }       
 
                /**
-                *  add prompt when beads are added and we can access the view 
to retrieve the textinput
-                *   
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion Royale 0.9.4
-                *  @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
-                *  @royaleignorecoercion 
org.apache.royale.jewel.beads.controls.combobox.IComboBoxView
-                *  @royaleignorecoercion HTMLInputElement
-                */
-               private function addPrompt(event:Event):void
-        {
-                       
IEventDispatcher(_strand).removeEventListener("beadsAdded", addPrompt);
-
-                       var viewBead:DateFieldView = 
_strand.getBeadByType(DateFieldView) as DateFieldView;
-                       
-                       COMPILE::JS
-                       {
-                               var e:HTMLInputElement = 
viewBead.textInput.element as HTMLInputElement;
-                               e.placeholder = prompt;
-                       }
+         *  @copy 
org.apache.royale.jewel.beads.controls.textinput.TextPrompt#updatePromptText()
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.7
+         */
+               COMPILE::JS
+               override protected function updatePromptText():void
+               {
+                       var e:HTMLInputElement = (host.view as 
DateFieldView).textInput.element as HTMLInputElement;
+                       e.placeholder = prompt;
                }
        }
 }
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/dropdownlist/DropDownListTextPrompt.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/dropdownlist/DropDownListTextPrompt.as
index 8533278..e2b8cb3 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/dropdownlist/DropDownListTextPrompt.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/dropdownlist/DropDownListTextPrompt.as
@@ -18,9 +18,6 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.beads.controls.dropdownlist
 {
-       import org.apache.royale.core.IStrand;
-       import org.apache.royale.events.Event;
-       import org.apache.royale.events.IEventDispatcher;
        import org.apache.royale.jewel.beads.controls.textinput.TextPrompt;
        import org.apache.royale.jewel.beads.views.DropDownListView;
        
@@ -46,40 +43,19 @@ package org.apache.royale.jewel.beads.controls.dropdownlist
                public function DropDownListTextPrompt()
                {
                }
-               
-               private var _strand:IStrand;
-               
-               /**
-                *  @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
-                */
-               override public function set strand(value:IStrand):void
-               {
-                       _strand = value;
-                       
IEventDispatcher(_strand).addEventListener("beadsAdded", addPrompt);
-               }       
 
                /**
-                *  add prompt when beads are added and we can access the view 
to retrieve the textinput
-                *   
-                *  @langversion 3.0
-                *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
-                *  @productversion Royale 0.9.4
-                *  @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
-                *  @royaleignorecoercion 
org.apache.royale.jewel.beads.controls.dropdownlist.DropDownListView
-                */
-               private function addPrompt(event:Event):void
-        {
-                       
IEventDispatcher(_strand).removeEventListener("beadsAdded", addPrompt);
-
-                       var viewBead:DropDownListView = 
_strand.getBeadByType(DropDownListView) as DropDownListView;
-                       viewBead.prompt = prompt;
+         *  @copy 
org.apache.royale.jewel.beads.controls.textinput.TextPrompt#updatePromptText()
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.7
+         */
+               COMPILE::JS
+               override protected function updatePromptText():void
+               {
+                       (host.view as DropDownListView).prompt = prompt;
                }
        }
 }
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/TextPrompt.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/TextPrompt.as
index 3c92894..41fb366 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/TextPrompt.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/TextPrompt.as
@@ -21,6 +21,7 @@ package org.apache.royale.jewel.beads.controls.textinput
        COMPILE::SWF
        {
                import flash.text.TextFieldType;
+
                import org.apache.royale.core.CSSTextField;
        }
        
@@ -28,7 +29,6 @@ package org.apache.royale.jewel.beads.controls.textinput
        import org.apache.royale.core.IStrand;
        import org.apache.royale.core.UIBase;
        import org.apache.royale.events.Event;
-       import org.apache.royale.events.IEventDispatcher;
        
        /**
         *  The TextPrompt class is a specialty bead that can be used with
@@ -55,7 +55,6 @@ package org.apache.royale.jewel.beads.controls.textinput
                }
                
                private var _prompt:String;
-               
                /**
                 *  The string to use as the placeholder prompt.
                 *
@@ -64,16 +63,25 @@ package org.apache.royale.jewel.beads.controls.textinput
                 *  @playerversion AIR 2.6
                 *  @productversion Royale 0.9.4
                 */
+               [Bindable("promptChanged")]
                public function get prompt():String
                {
                        return _prompt;
                }
                public function set prompt(value:String):void
                {
-                       _prompt = value;
+                       if(value != _prompt)
+                       {
+                               _prompt = value;
+                               if(host)
+                               {
+                                       updatePromptText();
+                                       host.dispatchEvent(new 
Event("promptChanged"));
+                               }       
+                       }
                }
                
-               private var _strand:IStrand;
+               protected var host:UIBase;
                
                /**
                 *  @copy org.apache.royale.core.IBead#strand
@@ -87,12 +95,12 @@ package org.apache.royale.jewel.beads.controls.textinput
                 */
                public function set strand(value:IStrand):void
                {
-                       _strand = value;
+                       host = value as UIBase;
                        
                        COMPILE::SWF
                        {
                                // listen for changes in text to hide or show 
the prompt
-                               var model:Object = UIBase(_strand).model;
+                               var model:Object = host.model;
                                if (!model.hasOwnProperty("text")) {
                                        throw new Error("Model requires a text 
property when used with TextPrompt");
                                }
@@ -113,11 +121,24 @@ package org.apache.royale.jewel.beads.controls.textinput
                        }
                        COMPILE::JS
                        {
-                               var host:UIBase = value as UIBase;
-                               var e:HTMLInputElement = host.element as 
HTMLInputElement;
-                               e.placeholder = prompt;
+                               updatePromptText();
                        }
                }
+
+               /**
+         *  Update the internal element placeholder with the prompt property
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.7
+         */
+               COMPILE::JS
+               protected function updatePromptText():void
+               {
+                       var e:HTMLInputElement = host.element as 
HTMLInputElement;
+                       e.placeholder = prompt;
+               }
                
                COMPILE::SWF
                private var promptField:CSSTextField
@@ -133,21 +154,20 @@ package org.apache.royale.jewel.beads.controls.textinput
                {       
                        // see what the model currently has to determine if the 
prompt should be
                        // displayed or not.
-                       var model:Object = UIBase(_strand).model;
+                       var model:Object = host.model;
                        
                        if (model.text != null && model.text.length > 0 ) {
-                               if (promptAdded) 
UIBase(_strand).removeChild(promptField);
+                               if (promptAdded) host.removeChild(promptField);
                                promptAdded = false;
                        }
                        else {
-                               if (!promptAdded) 
UIBase(_strand).addChild(promptField);
+                               if (!promptAdded) host.addChild(promptField);
                                promptField.text = prompt;
                                promptAdded = true;
                 promptField.x = 2;
                 promptField.y = 2;
-                promptField.width = UIBase(_strand).width-5;
-                promptField.height = UIBase(_strand).height-4;
-
+                promptField.width = host.width-5;
+                promptField.height = host.height-4;
                        }
                }
        }
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ComboBoxView.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ComboBoxView.as
index c547abb..7881abc 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ComboBoxView.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ComboBoxView.as
@@ -152,8 +152,11 @@ package org.apache.royale.jewel.beads.views
                                //this avoids the need to redispatch new event 
clones at the component level in the controller
                 IJewelSelectionModel(model).dispatcher = 
IEventDispatcher(value);
                        }
-                       model.addEventListener("selectionChanged", 
handleItemChange);
-                       model.addEventListener("dataProviderChanged", 
itemChangeAction);
+                       if(model)
+                       {
+                               model.addEventListener("selectionChanged", 
handleItemChange);
+                               model.addEventListener("dataProviderChanged", 
itemChangeAction);
+                       }
 
                        listenOnStrand("sizeChanged", handleSizeChange);
                }

Reply via email to