Thanks for adding this. Since this behavior could be desirable in all component 
sets I’d like to suggest the following:


  1.  Move it to Basic
  2.  Create an interface ITooltipBead which includes removeTip()
  3.  Have all tooltip beads implement it
  4.  Use strand.getBeadByType(ITooltipBead) instead of requiring a tooltip 
param

Do you agree?

If you don’t have time I can do this.

From: [email protected]<mailto:[email protected]>
Sent: Tuesday, January 28, 2020 11:34 AM
To: [email protected]<mailto:[email protected]>
Subject: [royale-asjs] branch develop updated: ToolTipRemovalWhenItemRemoved: 
new bead to abstract best practice showcased in #697

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 93c5612  ToolTipRemovalWhenItemRemoved: new bead to abstract best 
practice showcased in #697
93c5612 is described below

commit 93c5612fb36e8c450d6b8c2ff2b69b789c8461ee
Author: Carlos Rovira <[email protected]>
AuthorDate: Tue Jan 28 10:34:22 2020 +0100

    ToolTipRemovalWhenItemRemoved: new bead to abstract best practice showcased 
in #697
---
 .../royale/itemRenderers/IconListItemRenderer.mxml |  27 +----
 .../Jewel/src/main/resources/jewel-manifest.xml    |   2 +
 .../itemRenderers/ToolTipRemovalWhenItemRemoved.as | 116 +++++++++++++++++++++
 3 files changed, 119 insertions(+), 26 deletions(-)

diff --git 
a/examples/royale/TourDeJewel/src/main/royale/itemRenderers/IconListItemRenderer.mxml
 
b/examples/royale/TourDeJewel/src/main/royale/itemRenderers/IconListItemRenderer.mxml
index 906630b..b7c54d0 100644
--- 
a/examples/royale/TourDeJewel/src/main/royale/itemRenderers/IconListItemRenderer.mxml
+++ 
b/examples/royale/TourDeJewel/src/main/royale/itemRenderers/IconListItemRenderer.mxml
@@ -29,32 +29,6 @@ limitations under the License.
                         import org.apache.royale.jewel.beads.views.ListView;

                         import vos.IconListVO;
-
-            private var host:List;
-
-            /**
-             * listen to "itemRemoved" event dispatched from the List
-             */
-            override public function addedToParent():void
-            {
-                super.addedToParent();
-
-                var view:ListView = this.itemRendererParent as ListView;
-                host = view.host as List;
-                IEventDispatcher(host).addEventListener("itemRemoved", 
handleItemRemoved);
-            }
-
-            /**
-             * check if the renderer (item) is the current and in that case 
ensure remove listener and tip.
-             */
-            protected function handleItemRemoved(event:ItemRemovedEvent):void
-            {
-                if(event.item == this)
-                {
-                    IEventDispatcher(host).removeEventListener("itemRemoved", 
handleItemRemoved);
-                    tt.removeTip();
-                }
-            }

             [Bindable("dataChange")]
             public function get iconList():IconListVO
@@ -83,6 +57,7 @@ limitations under the License.
     <j:beads>
         <js:ItemRendererDataBinding />
         <j:ToolTip localId="tt" toolTip="{getToolTip(text)}"/>
+        <j:ToolTipRemovalWhenItemRemoved tooltip="{tt}"/>
     </j:beads>

     <js:FontIcon text="{iconList ? iconList.icon : ''}" material="true" 
visible="{iconList ? iconList.icon != null : false}" 
click="clickCloseButton()"/>
diff --git a/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml 
b/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
index 1b6d9a9..44d1bce 100644
--- a/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
+++ b/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
@@ -222,6 +222,8 @@
     <component id="UpdateTableRowForArrayListData" 
class="org.apache.royale.jewel.beads.itemRenderers.UpdateTableRowForArrayListData"
 />

     <component id="RemoveAllItemRendererForArrayListData" 
class="org.apache.royale.jewel.beads.itemRenderers.RemoveAllItemRendererForArrayListData"
 />
+
+    <component id="ToolTipRemovalWhenItemRemoved" 
class="org.apache.royale.jewel.beads.itemRenderers.ToolTipRemovalWhenItemRemoved"
 />

     <!-- <component id="JewelLabelViewBead" 
class="org.apache.royale.jewel.beads.views.JewelLabelViewBead"/> -->

diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/ToolTipRemovalWhenItemRemoved.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/ToolTipRemovalWhenItemRemoved.as
new file mode 100644
index 0000000..2ddeb2d
--- /dev/null
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/ToolTipRemovalWhenItemRemoved.as
@@ -0,0 +1,116 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.itemRenderers
+{
+       import org.apache.royale.core.IBead;
+       import org.apache.royale.core.IBeadView;
+       import org.apache.royale.core.IItemRenderer;
+       import org.apache.royale.core.IStrand;
+       import org.apache.royale.core.IUIBase;
+       import org.apache.royale.events.IEventDispatcher;
+       import org.apache.royale.events.ItemRemovedEvent;
+       import org.apache.royale.jewel.beads.controls.ToolTip;
+
+    /**
+     *  The ToolTipRemovalWhenItemRemoved class can be used in renderers that
+     *  can be removed and uses ToolTip, to ensure the tooltip popup is removed
+     *  with the item renderer.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.9.7
+     */
+       public class ToolTipRemovalWhenItemRemoved implements IBead
+       {
+        /**
+         *  Constructor.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.7
+         */
+               public function ToolTipRemovalWhenItemRemoved()
+               {
+               }
+
+               private var _strand:IStrand;
+        private var host:IUIBase;
+
+        /**
+         *  listen to "itemRemoved" event dispatched from the List
+         *
+         *  @copy org.apache.royale.core.IBead#strand
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.7
+         */
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+
+            var view:IBeadView = (_strand as IItemRenderer).itemRendererParent 
as IBeadView;
+            host = view.host as IUIBase;
+            IEventDispatcher(host).addEventListener("itemRemoved", 
handleItemRemoved);
+               }
+
+        /**
+         * check if the renderer (item) is the current and in that case ensure 
remove listener and tip.
+         */
+        protected function handleItemRemoved(event:ItemRemovedEvent):void
+        {
+            if(event.item == this)
+            {
+                IEventDispatcher(host).removeEventListener("itemRemoved", 
handleItemRemoved);
+                if(tooltip)
+                {
+                    tooltip.removeTip();
+                }
+            }
+        }
+
+        private var _tooltip:ToolTip = null;
+        /**
+         *  The ToolTip that manages the tip popup to be removed
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.7
+         */
+               public function get tooltip():ToolTip
+               {
+                       return _tooltip;
+               }
+
+        /**
+         *  @private
+         */
+               public function set tooltip(value:ToolTip):void
+               {
+                       if (value != _tooltip)
+                       {
+                _tooltip = value;
+                       }
+               }
+       }
+}

Reply via email to