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/04/16 14:44:23 UTC

[royale-asjs] branch develop updated: jewel-tabbar: improve renderer for tabbar and make INavigationRenderer extend ITextItemRenderer

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 934bb5d  jewel-tabbar: improve renderer for tabbar and make INavigationRenderer extend ITextItemRenderer
934bb5d is described below

commit 934bb5d4388ac8acb32cd8434bd51469023b6abf
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Tue Apr 16 16:44:17 2019 +0200

    jewel-tabbar: improve renderer for tabbar and make INavigationRenderer extend ITextItemRenderer
---
 .../itemRenderers/NavigationLinkItemRenderer.as    |  38 +++--
 .../itemRenderers/TabBarButtonItemRenderer.as      | 153 ++++++++++++++-------
 .../jewel/supportClasses/INavigationRenderer.as    |  15 +-
 3 files changed, 140 insertions(+), 66 deletions(-)

diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/NavigationLinkItemRenderer.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/NavigationLinkItemRenderer.as
index 2d0e86d..af3a196 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/NavigationLinkItemRenderer.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/NavigationLinkItemRenderer.as
@@ -18,18 +18,16 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.itemRenderers
 {
-	import org.apache.royale.core.StyledMXMLItemRenderer;
-	import org.apache.royale.jewel.supportClasses.INavigationRenderer;
-	import org.apache.royale.jewel.supportClasses.util.getLabelFromData;
-	import org.apache.royale.events.Event;
-    
     COMPILE::JS
     {
-        import org.apache.royale.core.WrappedHTMLElement;
-		import org.apache.royale.html.util.addElementToWrapper;
+	import org.apache.royale.core.WrappedHTMLElement;
+	import org.apache.royale.html.util.addElementToWrapper;
     }
+	import org.apache.royale.core.StyledMXMLItemRenderer;
+	import org.apache.royale.events.Event;
+	import org.apache.royale.jewel.beads.controls.TextAlign;
+	import org.apache.royale.jewel.supportClasses.INavigationRenderer;
 
-    
 	/**
 	 *  The NavigationLinkItemRenderer defines the basic Item Renderer for a Jewel 
      *  Navigation List Component. It handles Objects with "label" and "href" data.
@@ -61,6 +59,30 @@ package org.apache.royale.jewel.itemRenderers
 			{
 				addClass("mxmlContent");
 			}
+
+			textAlign = new TextAlign();
+			textAlign.align = TextAlign.CENTER;
+			addBead(textAlign);
+		}
+
+		private var textAlign:TextAlign;
+
+		/**
+		 *  How text align in the itemRenderer instance.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.4
+		 */
+		public function get align():String
+		{
+			return textAlign.align;
+		}
+
+		public function set align(value:String):void
+		{
+			textAlign.align = value;
 		}
 
 		private var _href:String = "#";
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/TabBarButtonItemRenderer.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/TabBarButtonItemRenderer.as
index 68fb39c..648d7dc 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/TabBarButtonItemRenderer.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/TabBarButtonItemRenderer.as
@@ -18,17 +18,16 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.itemRenderers
 {
-	import org.apache.royale.core.StyledMXMLItemRenderer;
-	import org.apache.royale.jewel.supportClasses.INavigationRenderer;
-	import org.apache.royale.jewel.supportClasses.util.getLabelFromData;
-	import org.apache.royale.events.Event;
-    
     COMPILE::JS
     {
-        import org.apache.royale.core.WrappedHTMLElement;
-		import org.apache.royale.html.util.addElementToWrapper;
+	import org.apache.royale.core.WrappedHTMLElement;
+	import org.apache.royale.html.util.addElementToWrapper;
     }
-
+	import org.apache.royale.core.StyledMXMLItemRenderer;
+	import org.apache.royale.events.Event;
+	import org.apache.royale.jewel.supportClasses.INavigationRenderer;
+	import org.apache.royale.jewel.beads.controls.TextAlign;
+	import org.apache.royale.jewel.supportClasses.util.getLabelFromData;
     
 	/**
 	 *  The TabBarButtonItemRenderer defines the basic Item Renderer for a Jewel 
@@ -56,6 +55,15 @@ package org.apache.royale.jewel.itemRenderers
 
 			typeNames = "jewel tabbarbutton";
 			addClass("selectable");
+
+			if(MXMLDescriptor != null)
+			{
+				addClass("mxmlContent");
+			}
+
+			textAlign = new TextAlign();
+			textAlign.align = TextAlign.CENTER;
+			addBead(textAlign);
 		}
 
 		private var _href:String = "#";
@@ -78,6 +86,7 @@ package org.apache.royale.jewel.itemRenderers
 
 		private var _text:String = "";
 
+		[Bindable(event="textChange")]
         /**
          *  The text of the navigation link
          *  
@@ -93,11 +102,38 @@ package org.apache.royale.jewel.itemRenderers
 
 		public function set text(value:String):void
 		{
-             _text = value;
+            if(value != _text) {
+				_text = value;
+				COMPILE::JS
+				{
+				if(MXMLDescriptor == null)
+				{
+					element.innerHTML = _text;
+				}
+				}
+				dispatchEvent(new Event('textChange'));
+			}
 		}
 
-		COMPILE::JS
-        private var textNode:Text;
+		private var textAlign:TextAlign;
+
+		/**
+		 *  How text align in the itemRenderer instance.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.4
+		 */
+		public function get align():String
+		{
+			return textAlign.align;
+		}
+
+		public function set align(value:String):void
+		{
+			textAlign.align = value;
+		}
 
 		/**
 		 *  Sets the data value and uses the String version of the data for display.
@@ -111,60 +147,85 @@ package org.apache.royale.jewel.itemRenderers
 		 */
 		override public function set data(value:Object):void
 		{
-			super.data = value;
-
-			if(value == null) return;
-
-			if (labelField)
-			{
-                text = String(value[labelField]);
-            }
-			else if(value.label !== undefined)
-			{
-                text = String(value.label);
-			}
-			else
-			{
-				text = String(value);
-			}
-			// text = getLabelFromData(this, value);
+			text = getLabelFromData(this, value);
+            super.data = value;
 			
             if(value.href !== undefined)
 			{
                 href = String(value.href);
 			}
 
-			COMPILE::JS
-			{
-			if(textNode != null)
-			{
-				textNode.nodeValue = text;
-				(element as HTMLElement).setAttribute('href', href);
-			}	
-			}
-
-			dispatchEvent(new Event("dataChange"));
+			// COMPILE::JS
+			// {
+			// if(textNode != null)
+			// {
+			// 	textNode.nodeValue = text;
+			// 	(element as HTMLElement).setAttribute('href', href);
+			// }	
+			// }
 		}
 
         /**
          * @royaleignorecoercion org.apache.royale.core.WrappedHTMLElement
-		 * @royaleignorecoercion Text
+		 * @royaleignorecoercion HTMLSpanElement
          */
         COMPILE::JS
         override protected function createElement():WrappedHTMLElement
         {
-            var a:WrappedHTMLElement = addElementToWrapper(this, 'a');
-            a.setAttribute('href', href);
+            var span:HTMLSpanElement = addElementToWrapper(this, 'span') as HTMLSpanElement;
+			span.className = "content";
+			positioner = document.createElement('button') as WrappedHTMLElement;
+            //a.setAttribute('href', href);
 
-			if(MXMLDescriptor == null)
-			{
-				textNode = document.createTextNode('') as Text;
-				a.appendChild(textNode);
-			}
+			// if(MXMLDescriptor == null)
+			// {
+			// 	textNode = document.createTextNode('') as Text;
+			// 	a.appendChild(textNode);
+			// }
 
             return element;
         }
 
+		COMPILE::JS
+		private var _positioner:WrappedHTMLElement;
+
+		COMPILE::JS
+		override public function get positioner():WrappedHTMLElement
+		{
+			return _positioner;
+		}
+
+		COMPILE::JS
+		override public function set positioner(value:WrappedHTMLElement):void
+		{
+			_positioner = value;
+            _positioner.royale_wrapper = this;
+			_positioner.appendChild(element);
+		}
+
+		private var _selectable:Boolean = true;
+		/**
+         *  <code>true</code> if the item renderer is can be selected
+         *  false otherwise. Use to configure a renderer to be non 
+         *  selectable.
+         *  
+         *  Defaults to true
+         * 
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.4
+         */
+		override public function get selectable():Boolean
+		{
+			return _selectable;
+		}
+		override public function set selectable(value:Boolean):void
+		{
+			_selectable = value;
+			toggleClass("selectable", _selectable);	
+		}
+
 		/**
 		 * @private
 		 * 
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/INavigationRenderer.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/INavigationRenderer.as
index 793b633..e0da1e6 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/INavigationRenderer.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/INavigationRenderer.as
@@ -18,6 +18,8 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.supportClasses
 {
+    import org.apache.royale.jewel.beads.itemRenderers.ITextItemRenderer;
+
     /**
      *  INavigationRenderer is the interface that all item renderers used with
      *  Navigation List component must implement.
@@ -30,7 +32,7 @@ package org.apache.royale.jewel.supportClasses
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9.4
      */
-    public interface INavigationRenderer
+    public interface INavigationRenderer extends ITextItemRenderer
     {
         /**
          *  the navigation link url
@@ -42,16 +44,5 @@ package org.apache.royale.jewel.supportClasses
          */
         function get href():String;
         function set href(value:String):void;
-
-        /**
-         *  The text of the navigation link
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9.4
-         */
-        function get text():String;
-        function set text(value:String):void;
     }
 }