This is an automated email from the ASF dual-hosted git repository.
gregdove 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 69ae7a9 WIP on getting mx emulation renderers to support more of the
original Flex behavior.
69ae7a9 is described below
commit 69ae7a9a892567dfdb96a26d0ffe096bb38ed729
Author: greg-dove <[email protected]>
AuthorDate: Wed Feb 2 15:55:16 2022 +1300
WIP on getting mx emulation renderers to support more of the original Flex
behavior.
---
.../MXRoyale/src/main/royale/mx/controls/Button.as | 41 +++++++++++-
.../src/main/royale/mx/controls/CheckBox.as | 6 +-
.../AdvancedDataGridItemRendererInitializer.as | 50 +++++++++-----
.../beads/DataGridItemRendererInitializer.as | 38 +++++------
.../controls/beads/ListItemRendererInitializer.as | 74 +++++++++++++++++---
.../controls/beads/TreeItemRendererInitializer.as | 78 +++++++++++-----------
.../src/main/royale/mx/core/UIComponent.as | 15 -----
7 files changed, 198 insertions(+), 104 deletions(-)
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as
index 5fdd7c8..706d206 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as
@@ -343,6 +343,11 @@ public class Button extends UIComponent implements
IDataRenderer, IListItemRende
//----------------------------------
private var labelSet:Boolean;
+ private var selectedSet:Boolean;
+
+
+
+
public function get label():String
{
return ITextModel(model).text;
@@ -493,10 +498,10 @@ public class Button extends UIComponent implements
IDataRenderer, IListItemRende
newSelected = _data;
}
- if (newSelected !== undefined/* && !selectedSet*/)
+ if (newSelected !== undefined && !selectedSet)
{
selected = newSelected as Boolean;
- //selectedSet = false;
+ selectedSet = false;
}
if (newLabel !== undefined && !labelSet)
{
@@ -569,8 +574,40 @@ public class Button extends UIComponent implements
IDataRenderer, IListItemRende
*/
public function set selected(value:Boolean):void
{
+ selectedSet = true;
_selected = value;
}
+
+
+ //----------------------------------
+ // selectedField
+ //----------------------------------
+
+
+ private var _selectedField:String = null;
+
+ /**
+ * The name of the field in the <code>data</code> property which
specifies
+ * the value of the Button control's <code>selected</code> property.
+ * You can set this property when you use the Button control in an
item renderer.
+ * The default value is null, which means that the Button control does
+ * not set its selected state based on a property in the
<code>data</code> property.
+ *
+ * @default null
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.9
+ */
+ public function get selectedField():String
+ {
+ return _selectedField;
+ }
+ public function set selectedField(value:String):void
+ {
+ _selectedField = value;
+ }
//----------------------------------
// labelPlacement
diff --git
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/CheckBox.as
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/CheckBox.as
index 1bd665d..ff70c50 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/CheckBox.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/CheckBox.as
@@ -173,7 +173,8 @@ public class CheckBox extends Button implements IStrand,
ISelectable
*/
override public function set selected(value:Boolean):void
{
- IToggleButtonModel(model).selected = value;
+ //this is strange, but the base class needs to have its private
flag set also
+ IToggleButtonModel(model).selected = super.selected = value;
}
private function
internalMouseHandler(event:org.apache.royale.events.MouseEvent) : void
@@ -242,7 +243,8 @@ public class CheckBox extends Button implements IStrand,
ISelectable
override public function set selected(value:Boolean):void
{
- (_icon.element as HTMLInputElement).checked = value;
+ //this is strange, but the base class needs to have its private flag
set also
+ (_icon.element as HTMLInputElement).checked = super.selected = value;
}
//----------------------------------
diff --git
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridItemRendererInitializer.as
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridItemRendererInitializer.as
index 108fa42..c308a25 100644
---
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridItemRendererInitializer.as
+++
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridItemRendererInitializer.as
@@ -19,7 +19,8 @@
package mx.controls.beads
{
-import mx.controls.AdvancedDataGrid;
+ import mx.controls.AdvancedDataGrid;
+ import mx.controls.listClasses.BaseListData;
import org.apache.royale.collections.TreeData;
import org.apache.royale.core.Bead;
@@ -69,19 +70,36 @@ import mx.controls.AdvancedDataGrid;
{
if (!dataProviderModel)
return;
-
+ _tempIR = ir;
super.initializeIndexedItemRenderer(ir, data, index);
-
- var adgColumnList:AdvancedDataGridColumnList = _strand as
AdvancedDataGridColumnList;
+ _tempIR = null;
- if (!adgColumnList.grid) return;
+ }
+
+
+ private var _tempIR:IIndexedItemRenderer;
+ /**
+ *
+ *
+ * @royaleignorecoercion
mx.controls.advancedDataGridClasses.AdvancedDataGridColumnList
+ * @royaleignorecoercion mx.controls.AdvancedDataGrid
+ * @royaleignorecoercion
mx.controls.beads.models.DataGridColumnICollectionViewModel
+ * @royaleignorecoercion XML
+ *
+ */
+ override protected function makeListData(data:Object,
uid:String,
+
rowNum:int):BaseListData
+ {
+ var adgColumnList:AdvancedDataGridColumnList = _strand
as AdvancedDataGridColumnList;
+
+ if (!adgColumnList.grid) return null;
- var adgColumnListModel:DataGridColumnICollectionViewModel =
adgColumnList.model as DataGridColumnICollectionViewModel;
+ var
adgColumnListModel:DataGridColumnICollectionViewModel = adgColumnList.model as
DataGridColumnICollectionViewModel;
var adg:AdvancedDataGrid = (adgColumnList.grid as
AdvancedDataGrid);
var depth:int = adg.getDepth(data);
var isOpen:Boolean = adg.isItemOpen(data);
var hasChildren:Boolean = adg.hasChildren(data);
- var firstColumn:Boolean = adgColumnListModel.columnIndex == 0;
+ var firstColumn:Boolean =
adgColumnListModel.columnIndex == 0;
var dataField:String =
adg.columns[adgColumnListModel.columnIndex].dataField;
var text:String = "";
@@ -94,17 +112,19 @@ import mx.controls.AdvancedDataGrid;
{
}
// Set the listData with the depth of this item
- var treeListData:AdvancedDataGridListData = new
AdvancedDataGridListData(text, dataField, adgColumnListModel.columnIndex, "",
(adgColumnList.grid as AdvancedDataGrid), index);
+ var treeListData:AdvancedDataGridListData = new
AdvancedDataGridListData(text, dataField, adgColumnListModel.columnIndex, uid,
(adgColumnList.grid as AdvancedDataGrid), rowNum);
treeListData.depth = depth;
treeListData.open = isOpen;
treeListData.hasChildren = hasChildren;
-
- (ir as IListDataItemRenderer).listData = treeListData;
- if (firstColumn && adg.groupLabelField)
- (ir as ILabelFieldItemRenderer).labelField =
adg.groupLabelField;
- }
- override protected function
setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void
+
+ if (firstColumn && adg.groupLabelField)
+ (_tempIR as ILabelFieldItemRenderer).labelField
= adg.groupLabelField;
+
+ return treeListData;
+ }
+
+ /*override protected function
setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void
{
super.setupVisualsForItemRenderer(ir);
COMPILE::JS
@@ -115,7 +135,7 @@ import mx.controls.AdvancedDataGrid;
(ir as
UIComponent).element.style.position = 'relative';
}
}
- }
+ }*/
}
}
diff --git
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridItemRendererInitializer.as
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridItemRendererInitializer.as
index 39314d2..74d65f9 100644
---
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridItemRendererInitializer.as
+++
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridItemRendererInitializer.as
@@ -25,10 +25,10 @@ package mx.controls.beads
import mx.controls.dataGridClasses.DataGridColumn;
import mx.controls.dataGridClasses.DataGridColumnList;
import mx.controls.dataGridClasses.DataGridListData;
+ import mx.controls.listClasses.BaseListData;
import mx.core.UIComponent;
import org.apache.royale.core.IIndexedItemRenderer;
- import org.apache.royale.core.IListDataItemRenderer;
/**
* The DataGridItemRendererInitializer class initializes item renderers
@@ -53,25 +53,24 @@ package mx.controls.beads
{
}
+
+
/**
- * @private
- * @royaleignorecoercion
org.apache.royale.core.HTMLElementWrapper
+ *
*
* @royaleignorecoercion
mx.controls.dataGridClasses.DataGridColumn
+ * @royaleignorecoercion
mx.controls.dataGridClasses.DataGridColumnList
+ * @royaleignorecoercion
mx.controls.beads.models.DataGridColumnICollectionViewModel
+ *
*/
- override public function
initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object,
index:int):void
- {
- if (!dataProviderModel)
- return;
-
- super.initializeIndexedItemRenderer(ir, data, index);
-
- var dgColumnList:DataGridColumnList = _strand as
DataGridColumnList;
+ override protected function makeListData(data:Object,
uid:String,
+
rowNum:int):BaseListData
+ { var dgColumnList:DataGridColumnList = _strand as
DataGridColumnList;
+ var dg:DataGrid = (dgColumnList.grid as DataGrid);
+ if (data == null || !dgColumnList.grid) return null;
- if (!dgColumnList.grid) return;
+ var
dgColumnListModel:DataGridColumnICollectionViewModel = dgColumnList.model as
DataGridColumnICollectionViewModel;
- var dgColumnListModel:DataGridColumnICollectionViewModel =
dgColumnList.model as DataGridColumnICollectionViewModel;
- var dg:DataGrid = (dgColumnList.grid as DataGrid);
var dgColumn:DataGridColumn =
dg.columns[dgColumnListModel.columnIndex] as DataGridColumn;
var text:String = "";
@@ -83,13 +82,10 @@ package mx.controls.beads
}*/
text = dgColumn.itemToLabel(data);
- // Set the listData with the depth of this item
- var listData:DataGridListData = new
DataGridListData(text, dgColumn.dataField, dgColumnListModel.columnIndex, "",
dg, index);
-
- (ir as IListDataItemRenderer).listData = listData;
- }
+ return new DataGridListData(text, dgColumn.dataField,
dgColumnListModel.columnIndex, "", dg, rowNum);
+ }
- override protected function
setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void
+ /*override protected function
setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void
{
super.setupVisualsForItemRenderer(ir);
COMPILE::JS
@@ -100,7 +96,7 @@ package mx.controls.beads
(ir as
UIComponent).element.style.position = 'relative';
}
}
- }
+ }*/
}
}
diff --git
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ListItemRendererInitializer.as
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ListItemRendererInitializer.as
index 17448eb..4142672 100644
---
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ListItemRendererInitializer.as
+++
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ListItemRendererInitializer.as
@@ -17,10 +17,17 @@
//
////////////////////////////////////////////////////////////////////////////////
package mx.controls.beads
-{
-
- import org.apache.royale.core.Bead;
- import org.apache.royale.core.IDataProviderModel;
+{
+
+ import mx.controls.listClasses.BaseListData;
+ import mx.controls.listClasses.IDropInListItemRenderer;
+ import mx.controls.listClasses.IListItemRenderer;
+ import mx.controls.listClasses.ListBase;
+ import mx.controls.listClasses.ListData;
+
+ import org.apache.royale.core.Bead;
+ import org.apache.royale.core.IBeadController;
+ import org.apache.royale.core.IDataProviderModel;
import org.apache.royale.core.IIndexedItemRenderer;
import org.apache.royale.core.IOwnerViewItemRenderer;
import org.apache.royale.core.IItemRendererOwnerView;
@@ -36,7 +43,10 @@ package mx.controls.beads
import mx.controls.treeClasses.TreeListData;
import mx.core.UIComponent;
-
+
+ import
org.apache.royale.html.beads.controllers.ItemRendererMouseController;
+ import org.apache.royale.utils.loadBeadFromValuesManager;
+
/**
* The TreeItemRendererInitializer class initializes item renderers
* in tree classes.
@@ -61,6 +71,11 @@ package mx.controls.beads
}
private var ownerView:IItemRendererOwnerView;
+
+
+ protected function getDefaultController():IBeadController{
+ return new ItemRendererMouseController();
+ }
override public function set strand(value:IStrand):void
{
@@ -71,25 +86,62 @@ package mx.controls.beads
/**
* @private
* @royaleignorecoercion
org.apache.royale.core.HTMLElementWrapper
+ *
+ * @royalaignorecoercion
mx.controls.listClasses.IDropInListItemRenderer
*/
override public function
initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object,
index:int):void
{
if (!dataProviderModel)
return;
- if (ir is UIComponent) {
- COMPILE::JS{
- //we are using a UIComponent as a
renderer, but it is too late to use .isAbsolute = false
- //so swap it out here:
- ir.element.style.position = 'relative';
- }
+ if (!loadBeadFromValuesManager(IBeadController,
'iBeadController', ir)) {
+ ir.addBead(getDefaultController());
}
super.initializeIndexedItemRenderer(ir, data, index);
if (ir is IOwnerViewItemRenderer)
(ir as
IOwnerViewItemRenderer).itemRendererOwnerView = ownerView;
+
+ if (ir is IDropInListItemRenderer) {
+ (ir as IDropInListItemRenderer).listData =
makeListData(data,'', index);
+ }
}
+
+
+ /**
+ *
+ * @royaleignorecoercion mx.controls.listClasses.ListBase
+ */
+ protected function makeListData(data:Object, uid:String,
+
rowNum:int):BaseListData
+ {
+ var listBaseOwner:ListBase = _strand as ListBase;
+ return new
ListData(listBaseOwner.itemToLabel(data),null, labelField, uid, listBaseOwner,
rowNum);
+ }
+
+
+ /**
+ *
+ * @royaleignorecoercion mx.core.UIComponent
+ */
+ override protected function
setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void{
+ super.setupVisualsForItemRenderer(ir);
+ adjustItemRendererForMX(ir);
+ }
+
+ protected function
adjustItemRendererForMX(ir:IIndexedItemRenderer):void{
+ COMPILE::JS
+ {
+ if (ir is UIComponent)
+ {
+ (ir as UIComponent).isAbsolute = false;
+ //we are using a UIComponent as a
renderer, but it is too late to rely on .isAbsolute = false
+ //so swap it out here:
+ (ir as
UIComponent).element.style.position = 'relative';
+ }
+ }
+ }
}
}
diff --git
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/TreeItemRendererInitializer.as
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/TreeItemRendererInitializer.as
index 6bda18f..5a2526d 100644
---
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/TreeItemRendererInitializer.as
+++
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/TreeItemRendererInitializer.as
@@ -17,23 +17,18 @@
//
////////////////////////////////////////////////////////////////////////////////
package mx.controls.beads
-{
-
+{
+
+ import mx.controls.listClasses.BaseListData;
+
import org.apache.royale.collections.ITreeData;
- import org.apache.royale.core.Bead;
- import org.apache.royale.core.IDataProviderModel;
- import org.apache.royale.core.IIndexedItemRenderer;
- import org.apache.royale.core.IIndexedItemRendererInitializer;
- import org.apache.royale.core.IItemRenderer;
- import org.apache.royale.core.IListDataItemRenderer;
- import org.apache.royale.core.IStrand;
- import org.apache.royale.core.IUIBase;
- import org.apache.royale.core.SimpleCSSStyles;
- import org.apache.royale.core.UIBase;
import mx.controls.treeClasses.TreeListData;
import mx.controls.listClasses.ListBase;
-
- /**
+
+ import org.apache.royale.core.IBeadController;
+import org.apache.royale.core.IIndexedItemRenderer;
+
+/**
* The TreeItemRendererInitializer class initializes item renderers
* in tree classes.
*
@@ -55,33 +50,40 @@ package mx.controls.beads
public function TreeItemRendererInitializer()
{
}
-
+
+
+ override protected function
getDefaultController():IBeadController{
+ return new TreeItemRendererMouseController();
+ }
+
/**
- * @private
- * @royaleignorecoercion
org.apache.royale.core.HTMLElementWrapper
+ *
+ * @royaleignorecoercion
org.apache.royale.collections.ITreeData
+ *
*/
- override public function
initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object,
index:int):void
+ override protected function makeListData(data:Object,
uid:String,
+
rowNum:int):BaseListData
{
- if (!dataProviderModel)
- return;
-
- super.initializeItemRenderer(ir, data, index);
-
- var treeData:ITreeData = dataProviderModel.dataProvider as
ITreeData;
- var depth:int = treeData.getDepth(data);
- var isOpen:Boolean = treeData.isOpen(data);
- var hasChildren:Boolean = treeData.hasChildren(data);
-
- // Set the listData with the depth of this item
- var treeListData:TreeListData = new TreeListData("", "", _strand
as ListBase);
- treeListData.depth = depth;
- treeListData.isOpen = isOpen;
- treeListData.hasChildren = hasChildren;
- treeListData.item = data;
-
- (ir as IListDataItemRenderer).listData = treeListData;
-
- }
+ var treeData:ITreeData = dataProviderModel.dataProvider
as ITreeData;
+ var depth:int = treeData.getDepth(data);
+ var isOpen:Boolean = treeData.isOpen(data);
+ var hasChildren:Boolean = treeData.hasChildren(data);
+
+ // Set the listData with the depth of this item
+ var treeListData:TreeListData = new TreeListData("",
uid, _strand as ListBase);
+ treeListData.depth = depth;
+ treeListData.isOpen = isOpen;
+ treeListData.hasChildren = hasChildren;
+ treeListData.item = data;
+
+ return treeListData;
+
+ }
+
+
+ override protected function
adjustItemRendererForMX(ir:IIndexedItemRenderer):void{
+ //JS: do nothing, we want to keep isAbsolute = true for
this component, so avoid the setting for 'relative' in the super
+ }
}
}
diff --git
a/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as
b/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as
index f59a169..672f5e9 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/core/UIComponent.as
@@ -5804,21 +5804,6 @@ COMPILE::JS
}
[Inspectable(category="General")]
- /*
- * @langversion 3.0
- * @playerversion Flash 9
- * @playerversion AIR 1.1
- * @productversion Flex 3
- */
- public function get selectedField():Object
- {
- trace("selectedField not implemented");
- return 0;
- }
- public function set selectedField(value:Object):void
- {
- trace("selectedField not implemented");
- }
private var _contentMouseX:Number;
public function get contentMouseX():Number