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 <carlosrov...@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 + } + } +}