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 2020/04/10 17:14:47 UTC

[royale-asjs] branch develop updated: styled-renderer-classes: rework the jewel item renderer classes to use StyledUIBase instead of UIBase

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 04ec6e7  styled-renderer-classes: rework the jewel item renderer classes to use StyledUIBase instead of UIBase
04ec6e7 is described below

commit 04ec6e74483923b7caae37984a9ee9cd9733beb5
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Fri Apr 10 19:14:41 2020 +0200

    styled-renderer-classes: rework the jewel item renderer classes to use StyledUIBase instead of UIBase
---
 .../Basic/src/main/resources/basic-manifest.xml    |   4 +-
 .../supportClasses/StyledBaseMXMLItemRenderer.as   |  92 +++++++++++
 .../html/supportClasses/StyledDataItemRenderer.as  | 137 +++++++++++++++
 .../supportClasses/StyledMXMLStatesItemRenderer.as | 184 +++++++++++++++++++++
 .../supportClasses/StyledUIItemRendererBase.as     | 183 ++++++++++++++++++++
 5 files changed, 598 insertions(+), 2 deletions(-)

diff --git a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
index 4e0b5b5..589f0e0 100644
--- a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
@@ -137,8 +137,10 @@
     <component id="Slider" class="org.apache.royale.html.Slider"/>
     <component id="NumericStepper" class="org.apache.royale.html.NumericStepper" />
     <component id="DataItemRenderer" class="org.apache.royale.html.supportClasses.DataItemRenderer"/>
+    <component id="StyledDataItemRenderer" class="org.apache.royale.html.supportClasses.StyledDataItemRenderer"/>
     <component id="MXMLBeadView" class="org.apache.royale.html.MXMLBeadView"/>
     <component id="MXMLItemRenderer" class="org.apache.royale.html.supportClasses.MXMLItemRenderer"/>
+    <component id="StyledMXMLItemRenderer" class="org.apache.royale.core.StyledMXMLItemRenderer"/>
     <component id="MXMLStatesItemRenderer" class="org.apache.royale.html.supportClasses.MXMLStatesItemRenderer"/>
     <component id="AlternatingBackgroundColorStringItemRenderer" class="org.apache.royale.html.supportClasses.AlternatingBackgroundColorStringItemRenderer"/>
     <component id="StringItemRenderer" class="org.apache.royale.html.supportClasses.StringItemRenderer"/>
@@ -150,8 +152,6 @@
     <component id="DispatchKeyboardEventBead" class="org.apache.royale.html.beads.DispatchKeyboardEventBead"/>
     <component id="TreeItemRenderer" class="org.apache.royale.html.supportClasses.TreeItemRenderer"/>
     <component id="TreeXMLItemRenderer" class="org.apache.royale.html.supportClasses.TreeXMLItemRenderer"/>
-    <component id="DataItemRenderer" class="org.apache.royale.html.supportClasses.DataItemRenderer"/>
-    <component id="MXMLItemRenderer" class="org.apache.royale.html.supportClasses.MXMLItemRenderer"/>
     <component id="DateItemRenderer" class="org.apache.royale.html.supportClasses.DateItemRenderer"/>
     <component id="DayNameItemRenderer" class="org.apache.royale.html.supportClasses.DayNameItemRenderer"/>
     <component id="TextButtonItemRenderer" class="org.apache.royale.html.supportClasses.TextButtonItemRenderer"/>
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledBaseMXMLItemRenderer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledBaseMXMLItemRenderer.as
new file mode 100644
index 0000000..3049dec
--- /dev/null
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledBaseMXMLItemRenderer.as
@@ -0,0 +1,92 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.html.supportClasses
+{
+	import org.apache.royale.core.IBeadLayout;
+	import org.apache.royale.core.ILayoutHost;
+	import org.apache.royale.core.ILayoutParent;
+	import org.apache.royale.core.ILayoutView;
+	import org.apache.royale.core.IStrand;
+	import org.apache.royale.events.Event;
+    
+	/**
+	 *  The MXMLItemRenderer class is the base class for itemRenderers that are MXML-based
+	 *  and provides support for a layout and a data object.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.0
+	 */
+	public class StyledBaseMXMLItemRenderer extends StyledDataItemRenderer implements ILayoutParent, ILayoutHost, IStrand, ILayoutView
+	{
+		/**
+		 *  constructor.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.0
+		 */
+		public function StyledBaseMXMLItemRenderer()
+		{
+			super();
+            typeNames = "";
+		}
+
+        [Bindable("dataChange")]
+        override public function set data(value:Object):void
+        {
+            if (value != data)
+            {
+                super.data = value;
+                dispatchEvent(new Event("dataChange"));
+            }
+        }
+
+		public function getLayoutHost():ILayoutHost
+		{
+			return this;
+		}
+
+		public function get contentView():ILayoutView
+		{
+			return this;
+		}
+
+		override public function adjustSize():void
+		{
+			var layout:IBeadLayout = getBeadByType(IBeadLayout) as IBeadLayout;
+			if (layout != null) {
+				layout.layout();
+			}
+		}
+		
+		public function beforeLayout():Boolean
+		{
+			return true;
+		}
+		
+		public function afterLayout():void
+		{
+			
+		}
+
+	}
+}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledDataItemRenderer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledDataItemRenderer.as
new file mode 100644
index 0000000..7403bcb
--- /dev/null
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledDataItemRenderer.as
@@ -0,0 +1,137 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.html.supportClasses
+{
+	COMPILE::SWF
+	{
+		import flash.display.Sprite;
+	}
+	COMPILE::JS
+	{
+		import org.apache.royale.core.WrappedHTMLElement;
+        import org.apache.royale.html.util.addElementToWrapper;
+		import org.apache.royale.core.IBeadController;
+	}
+
+	/**
+	 *  The DataItemRenderer class is the base class for most itemRenderers. This class
+	 *  extends org.apache.royale.html.supportClasses.UIItemRendererBase and
+	 *  includes row and column index values.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.0
+	 */
+	public class StyledDataItemRenderer extends StyledUIItemRendererBase
+	{
+		/**
+		 *  constructor.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.0
+		 */
+		public function StyledDataItemRenderer()
+		{
+			super();
+		}
+
+		private var _columnIndex:int;
+
+		/**
+		 *  The index of the column the itemRenderer represents.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.0
+		 */
+		public function get columnIndex():int
+		{
+			return _columnIndex;
+		}
+		public function set columnIndex(value:int):void
+		{
+			_columnIndex = value;
+		}
+
+		private var _rowIndex:int;
+
+		/**
+		 *  The index of the row the itemRenderer represents.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.0
+		 */
+		public function get rowIndex():int
+		{
+			return _rowIndex;
+		}
+		public function set rowIndex(value:int):void
+		{
+			_rowIndex = value;
+		}
+
+		private var _dataField:String;
+
+		/**
+		 *  The name of the field within the data the itemRenderer should use.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.0
+		 */
+		public function get dataField():String
+		{
+			return _dataField;
+		}
+		public function set dataField(value:String):void
+		{
+			_dataField = value;
+		}
+
+		/**
+		 * This should be an implementation like ItemRendererMouseController
+		 */
+		COMPILE::JS
+        protected var controller:IBeadController;
+
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.WrappedHTMLElement
+		 *
+		 */
+		COMPILE::JS
+		override protected function createElement():WrappedHTMLElement
+		{
+			addElementToWrapper(this,'div');
+			className = 'DataItemRenderer';
+			//controller = new ItemRendererMouseController();
+			//controller.strand = this;
+
+			return element;
+		}
+
+
+	}
+}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledMXMLStatesItemRenderer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledMXMLStatesItemRenderer.as
new file mode 100644
index 0000000..e9438f6
--- /dev/null
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledMXMLStatesItemRenderer.as
@@ -0,0 +1,184 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.html.supportClasses
+{
+	import org.apache.royale.core.IState;
+	import org.apache.royale.core.IStatesImpl;
+	import org.apache.royale.core.IStatesObject;
+	import org.apache.royale.events.ValueChangeEvent;
+	import org.apache.royale.utils.loadBeadFromValuesManager;
+
+	/**
+     *  Indicates that the state change has completed.  All properties
+     *  that need to change have been changed, and all transitinos
+     *  that need to run have completed.  However, any deferred work
+     *  may not be completed, and the screen may not be updated until
+     *  code stops executing.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.9.7
+     */
+    [Event(name="stateChangeComplete", type="org.apache.royale.events.Event")]
+
+	/**
+	 *  The StyledMXMLStatesItemRenderer class gives view states support for MXML-based item renderers.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.9.7
+	 */
+	public class StyledMXMLStatesItemRenderer extends StyledBaseMXMLItemRenderer implements IStatesObject
+	{
+		/**
+		 *  constructor.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.7
+		 */
+		public function StyledMXMLStatesItemRenderer()
+		{
+			super();
+            typeNames = "";
+		}
+
+
+        /**
+         * IStatesObject 
+         */
+        
+		private var _states:Array;
+        
+        /**
+         *  The array of view states. These should
+         *  be instances of org.apache.royale.states.State.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.7
+         */
+        public function get states():Array
+        {
+            return _states;
+        }
+
+        /**
+         *  @private
+         *  @royaleignorecoercion Class
+         *  @royaleignorecoercion org.apache.royale.core.IBead
+         */
+        public function set states(value:Array):void
+        {
+            _states = value;
+            _currentState = _states[0].name;
+            
+			try{
+    			loadBeadFromValuesManager(IStatesImpl, "iStatesImpl", this);
+			}
+			//TODO:  Need to handle this case more gracefully
+			catch(e:Error)
+			{
+                COMPILE::SWF
+                {
+                    trace(e.message);                        
+                }
+			}
+            
+        }
+        
+        /**
+         *  <code>true</code> if the array of states
+         *  contains a state with this name.
+         * 
+         *  @param state The state namem.
+         *  @return True if state in state array
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.7
+         */
+        public function hasState(state:String):Boolean
+        {
+            for each (var s:IState in _states)
+            {
+                if (s.name == state)
+                    return true;
+            }
+            return false;
+        }
+        
+		
+        private var _currentState:String;
+        
+        [Bindable("currentStateChange")]
+        /**
+         *  The name of the current state.
+         * 
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.7
+         */
+        public function get currentState():String
+        {
+            return _currentState;   
+        }
+
+        /**
+         *  @private
+         */
+        public function set currentState(value:String):void
+        {
+			if (value == _currentState) return;
+            var event:ValueChangeEvent = new ValueChangeEvent("currentStateChange", false, false, _currentState, value)
+            _currentState = value;
+            dispatchEvent(event);
+        }
+        
+        private var _transitions:Array;
+        
+        /**
+         *  The array of transitions.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.7
+         */
+        public function get transitions():Array
+        {
+            return _transitions;   
+        }
+        
+        /**
+         *  @private
+         */
+        public function set transitions(value:Array):void
+        {
+            _transitions = value;   
+        }
+
+	}
+}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledUIItemRendererBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledUIItemRendererBase.as
new file mode 100644
index 0000000..04ce011
--- /dev/null
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/StyledUIItemRendererBase.as
@@ -0,0 +1,183 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.html.supportClasses
+{
+	import org.apache.royale.core.StyledUIBase;
+	import org.apache.royale.core.ValuesManager;
+	import org.apache.royale.events.Event;
+	import org.apache.royale.utils.MXMLDataInterpreter;
+	import org.apache.royale.core.ILabelFieldItemRenderer;
+		
+	[DefaultProperty("mxmlContent")]
+
+	/**
+	 *  The UIItemRendererBase class is the base class for all itemRenderers. An itemRenderer is used to
+	 *  display a single datum within a collection of data. Components such as a List use itemRenderers to 
+	 *  show their dataProviders.
+	 *
+ 	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.0
+	 */
+	public class StyledUIItemRendererBase extends StyledUIBase implements ILabelFieldItemRenderer
+	{
+		/**
+		 *  constructor.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.0
+		 */
+		public function StyledUIItemRendererBase()
+		{
+		}
+		
+		/**
+		 * @private
+		 */
+		override public function addedToParent():void
+		{
+			MXMLDataInterpreter.generateMXMLProperties(this, mxmlProperties);
+			MXMLDataInterpreter.generateMXMLInstances(this, this, MXMLDescriptor);
+			
+			super.addedToParent();
+			
+			// very common for item renderers to be resized by their containers,
+			addEventListener("widthChanged", sizeChangeHandler);
+			addEventListener("heightChanged", sizeChangeHandler);
+			addEventListener("sizeChanged", sizeChangeHandler);
+
+			// each MXML file can also have styles in fx:Style block
+			ValuesManager.valuesImpl.init(this);
+			
+			dispatchEvent(new Event("initBindings"));
+			dispatchEvent(new Event("initComplete"));
+		}
+		
+		/**
+		 *  @copy org.apache.royale.core.ItemRendererClassFactory#mxmlContent
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.0
+		 * 
+		 *  @royalesuppresspublicvarwarning
+		 */
+		public var mxmlContent:Array;
+		
+		/**
+		 * @private
+		 */
+		public function get MXMLDescriptor():Array
+		{
+			return null;
+		}
+		
+		private var mxmlProperties:Array ;
+		
+		/**
+		 * @private
+		 */
+		public function generateMXMLAttributes(data:Array):void
+		{
+			mxmlProperties = data;
+		}
+				
+		private var _data:Object;
+		
+		[Bindable("__NoChangeEvent__")]
+		/**
+		 *  The data being represented by this itemRenderer. This can be something simple like a String or
+		 *  a Number or something very complex.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.0
+		 */
+		public function get data():Object
+		{
+			return _data;
+		}
+		public function set data(value:Object):void
+		{
+			_data = value;
+		}
+		
+		private var _labelField:String = "label";
+		
+		/**
+		 * The name of the field within the data to use as a label. Some itemRenderers use this field to
+		 * identify the value they should show while other itemRenderers ignore this if they are showing
+		 * complex information.
+		 */
+		public function get labelField():String
+		{
+			return _labelField;
+		}
+		public function set labelField(value:String):void
+		{
+			_labelField = value;
+		}
+		
+		private var _index:int;
+		
+		/**
+		 *  The position with the dataProvider being shown by the itemRenderer instance.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.0
+		 */
+		public function get index():int
+		{
+			return _index;
+		}
+		public function set index(value:int):void
+		{
+			_index = value;
+		}
+				
+		/**
+		 * @private
+		 */
+		private function sizeChangeHandler(event:Event):void
+		{
+			adjustSize();
+		}
+		
+		/**
+		 *  This function is called whenever the itemRenderer changes size. Sub-classes should override
+		 *  this method an handle the size change.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.0
+		 */
+		public function adjustSize():void
+		{
+			// handle in subclass
+		}
+	}
+}