You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by yi...@apache.org on 2019/09/27 14:20:45 UTC
[royale-asjs] 01/01: ListItemRenderer needs to be a UIComponent.
This is an automated email from the ASF dual-hosted git repository.
yishayw pushed a commit to branch mx_list_item_renderer
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit 222816dedf903b0c526fb268cf41ee2a5e86e821
Author: DESKTOP-RH4S838\Yishay <yi...@hotmail.com>
AuthorDate: Fri Sep 27 17:19:04 2019 +0300
ListItemRenderer needs to be a UIComponent.
It is now, but still not rendering correctly.
Reference #475.
---
.../mx/controls/listClasses/ListItemRenderer.as | 294 +++++++++++++++++++--
1 file changed, 276 insertions(+), 18 deletions(-)
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListItemRenderer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListItemRenderer.as
index 3e8d21e..b6120c5 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListItemRenderer.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListItemRenderer.as
@@ -33,6 +33,13 @@ import org.apache.royale.core.layout.EdgeData;
import org.apache.royale.events.IEventDispatcher;
import org.apache.royale.events.MouseEvent;
import org.apache.royale.html.supportClasses.StringItemRenderer;
+import org.apache.royale.html.util.getLabelFromData;
+COMPILE::SWF
+{
+ import flash.text.TextFieldAutoSize;
+ import flash.text.TextFieldType;
+ import org.apache.royale.core.CSSTextField;
+}
/**
* The ListItemRenderer is the default renderer for mx.controls.List
@@ -43,13 +50,153 @@ import org.apache.royale.html.supportClasses.StringItemRenderer;
* @productversion Flex 3
*/
-public class ListItemRenderer extends StringItemRenderer
+public class ListItemRenderer extends UIComponent implements IListItemRenderer
{
public function ListItemRenderer()
{
addEventListener("click", clickHandler);
+ COMPILE::SWF
+ {
+ textField = new CSSTextField();
+ textField.type = TextFieldType.DYNAMIC;
+ textField.autoSize = TextFieldAutoSize.LEFT;
+ textField.selectable = false;
+ textField.parentDrawsBackground = true;
+ }
}
-
+
+ COMPILE::SWF
+ public var textField:CSSTextField;
+
+ /**
+ * @private
+ */
+ COMPILE::SWF
+ override public function addedToParent():void
+ {
+ super.addedToParent();
+ $sprite_addChild(textField);
+ adjustSize();
+ }
+
+ /**
+ * @private
+ */
+ COMPILE::SWF
+ public function adjustSize():void
+ {
+ var cy:Number = height/2;
+
+ textField.x = 0;
+ textField.y = cy - textField.height/2;
+ textField.width = width;
+
+ updateRenderer();
+ }
+ private var _selected:Boolean;
+
+ /**
+ * Whether or not the itemRenderer is in a selected state.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.0
+ */
+ public function get selected():Boolean
+ {
+ return _selected;
+ }
+ public function set selected(value:Boolean):void
+ {
+ _selected = value;
+ updateRenderer();
+ }
+ /**
+ * @private
+ */
+ public function updateRenderer():void
+ {
+
+ COMPILE::SWF
+ {
+ // super.updateRenderer();
+
+ graphics.clear();
+ graphics.beginFill(0xFFFFFF, (down||selected||hovered)?1:0);
+ graphics.drawRect(0, 0, width, height);
+ graphics.endFill();
+ }
+ COMPILE::JS
+ {
+ if (selected)
+ element.style.backgroundColor = '#9C9C9C';
+ else if (hovered)
+ element.style.backgroundColor = '#ECECEC';
+ else
+ element.style.backgroundColor = 'transparent';
+ }
+ }
+
+ private var _down:Boolean;
+
+ /**
+ * Whether or not the itemRenderer is in a down (or pre-selected) state.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.0
+ */
+ public function get down():Boolean
+ {
+ return _down;
+ }
+ public function set down(value:Boolean):void
+ {
+ _down = value;
+ updateRenderer();
+ }
+
+ private var _hovered:Boolean;
+
+ /**
+ * Whether or not the itemRenderer is in a hovered state.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.0
+ */
+ public function get hovered():Boolean
+ {
+ return _hovered;
+ }
+ public function set hovered(value:Boolean):void
+ {
+ _hovered = value;
+ updateRenderer();
+ }
+
+ 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;
+ }
+
/**
* @royaleignorecoercion mx.core.UIComponent
* @royaleignorecoercion org.apache.royale.events.IEventDispatcher
@@ -63,6 +210,41 @@ public class ListItemRenderer extends StringItemRenderer
getComponentDispatcher().dispatchEvent(le);
}
+ private var _itemRendererParent:Object;
+
+ /**
+ * The parent container for the itemRenderer instance.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.0
+ */
+ public function get itemRendererParent():Object
+ {
+ return _itemRendererParent;
+ }
+ public function set itemRendererParent(value:Object):void
+ {
+ _itemRendererParent = 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;
+ }
+
protected function getComponentDispatcher():IEventDispatcher
{
var irp:Object = itemRendererParent;
@@ -78,28 +260,104 @@ public class ListItemRenderer extends StringItemRenderer
}
return null;
}
- override public function set text(value:String):void
- {
- super.text = value;
- COMPILE::SWF
+
+ /**
+ * The text currently displayed by the itemRenderer instance.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.0
+ */
+ public function get text():String
+ {
+ COMPILE::SWF
+ {
+ return textField.text;
+ }
+ COMPILE::JS
+ {
+ return this.element.textContent;
+ }
+ }
+
+ public function set text(value:String):void
+ {
+ COMPILE::SWF
+ {
+ textField.text = value;
+ var edge:EdgeData = (ValuesManager.valuesImpl as IBorderPaddingMarginValuesImpl).getPaddingMetrics(this);
+ var h:Number = textField.textHeight + edge.top + edge.bottom;
+ textField.autoSize = "none";
+ textField.height = h;
+ }
+ COMPILE::JS
+ {
+ this.element.textContent = value;
+ }
+ }
+
+ protected function dataToString(value:Object):String
{
- var edge:EdgeData = (ValuesManager.valuesImpl as IBorderPaddingMarginValuesImpl).getPaddingMetrics(this);
- var h:Number = textField.textHeight + edge.top + edge.bottom;
- textField.autoSize = "none";
- textField.height = h;
+ if (value is XML)
+ {
+ var xml:XML = value as XML;
+ return xml[labelField];
+ }
+ return getLabelFromData(this,value);
}
+ 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;
}
-
- override protected function dataToString(value:Object):String
+
+ public function set data(value:Object):void
{
- if (value is XML)
- {
- var xml:XML = value as XML;
- return xml[labelField];
- }
- return super.dataToString(value);
+ _data = value;
+ text = dataToString(value);
+ }
+
+ public function get nestLevel():int
+ {
+ throw new Error("Method not implemented.");
+ }
+
+ public function set nestLevel(value:int):void
+ {
+ throw new Error("Method not implemented.");
+ }
+
+ public function get processedDescriptors():Boolean
+ {
+ throw new Error("Method not implemented.");
+ }
+
+ public function set processedDescriptors(value:Boolean):void
+ {
+ throw new Error("Method not implemented.");
}
+ public function get updateCompletePendingFlag():Boolean
+ {
+ throw new Error("Method not implemented.");
+ }
+
+ public function set updateCompletePendingFlag(value:Boolean):void
+ {
+ throw new Error("Method not implemented.");
+ }
}
}