You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2020/02/20 02:07:14 UTC
[royale-asjs] 07/13: mxtests pass
This is an automated email from the ASF dual-hosted git repository.
aharui pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit ea9279bb16da91dec0c16019044af2b7ec77387a
Author: Alex Harui <ah...@apache.org>
AuthorDate: Tue Feb 18 23:39:27 2020 -0800
mxtests pass
---
.../royale/org/apache/royale/html/DataContainer.as | 9 +-
.../MXRoyale/src/main/resources/defaults.css | 2 +
.../MXRoyale/src/main/royale/MXRoyaleClasses.as | 1 +
.../main/royale/mx/collections/ICollectionView.as | 1 -
.../MXRoyale/src/main/royale/mx/controls/Button.as | 6 +-
.../controls/beads/ListItemRendererInitializer.as | 2 +-
.../controls/beads/models/ListPresentationModel.as | 47 +++++++++
...ataItemRendererFactoryForICollectionViewData.as | 108 ++++++++++++++++++++-
.../royale/mx/controls/listClasses/ListBase.as | 1 +
9 files changed, 168 insertions(+), 9 deletions(-)
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as
index d3dae3d..be71a3a 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as
@@ -35,6 +35,7 @@ package org.apache.royale.html
import org.apache.royale.core.IDataProviderModel;
import org.apache.royale.core.UIBase;
import org.apache.royale.core.ValuesManager;
+ import org.apache.royale.utils.loadBeadFromValuesManager;
COMPILE::JS
{
import org.apache.royale.core.WrappedHTMLElement;
@@ -146,8 +147,12 @@ package org.apache.royale.html
{
var presModel:IListPresentationModel = getBeadByType(IListPresentationModel) as IListPresentationModel;
if (presModel == null) {
- presModel = new ListPresentationModel();
- addBead(presModel);
+ presModel = loadBeadFromValuesManager(IListPresentationModel, "iListPresentationModel", this) as IListPresentationModel;
+ if (presModel == null)
+ {
+ presModel = new ListPresentationModel();
+ addBead(presModel);
+ }
}
return presModel;
}
diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
index b0f4e39..3f18c00 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css
+++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
@@ -59,12 +59,14 @@ Basic|CascadingMenu
IDataProviderItemRendererMapper: ClassReference("mx.controls.listClasses.DataItemRendererFactoryForICollectionViewData");
IBeadController: ClassReference("mx.controls.beads.controllers.CascadingMenuSelectionMouseController");
IMenu: ClassReference("mx.controls.menuClasses.CascadingMenuWithOnScreenCheck");
+ IListPresentationModel: ClassReference("mx.controls.beads.models.ListPresentationModel");
}
Basic|ComboBoxList
{
IDataProviderItemRendererMapper: ClassReference("mx.controls.listClasses.DataItemRendererFactoryForICollectionViewData");
IBeadModel: ClassReference("mx.controls.beads.models.SingleSelectionICollectionViewModel");
+ IListPresentationModel: ClassReference("mx.controls.beads.models.ListPresentationModel");
}
Basic|DataGridColumnList {
diff --git a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
index cd54e79..b2de5ae 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
@@ -257,6 +257,7 @@ internal class MXRoyaleClasses
import mx.controls.beads.models.DataGridColumnICollectionViewModel; DataGridColumnICollectionViewModel;
import mx.controls.beads.models.DataGridICollectionViewModel; DataGridICollectionViewModel;
import mx.controls.beads.models.DataGridPresentationModel; DataGridPresentationModel;
+ import mx.controls.beads.models.ListPresentationModel; ListPresentationModel;
import mx.controls.beads.models.SingleSelectionIListModel; SingleSelectionIListModel;
import mx.controls.buttonBarClasses.TextButtonDataGridColumnItemRenderer; TextButtonDataGridColumnItemRenderer;
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/ICollectionView.as b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/ICollectionView.as
index d9ea7e0..33e4b94 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/collections/ICollectionView.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/collections/ICollectionView.as
@@ -21,7 +21,6 @@ package mx.collections
{
import mx.events.CollectionEvent;
-import org.apache.royale.collections.ICollectionView;
import org.apache.royale.events.IEventDispatcher;
/**
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 311b077..fc3ea48 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Button.as
@@ -479,7 +479,7 @@ public class Button extends UIComponent implements IDataRenderer, IListItemRende
* @private
* Storage for the listData property.
*/
- private var _listData:BaseListData;
+ private var _listData:Object;
[Bindable("dataChange")]
[Inspectable(environment="none")]
@@ -504,7 +504,7 @@ public class Button extends UIComponent implements IDataRenderer, IListItemRende
* @playerversion AIR 1.1
* @productversion Flex 3
*/
- public function get listData():BaseListData
+ public function get listData():Object
{
return _listData;
}
@@ -512,7 +512,7 @@ public class Button extends UIComponent implements IDataRenderer, IListItemRende
/**
* @private
*/
- public function set listData(value:BaseListData):void
+ public function set listData(value:Object):void
{
_listData = value;
}
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 439ce92..642e72c 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
@@ -75,7 +75,7 @@ package mx.controls.beads
if (!dataProviderModel)
return;
- super.initializeItemRenderer(ir, data, index);
+ super.initializeIndexedItemRenderer(ir, data, index);
if (ir is IOwnerViewItemRenderer)
(ir as IOwnerViewItemRenderer).itemRendererOwnerView = ownerView;
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/ListPresentationModel.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/ListPresentationModel.as
new file mode 100644
index 0000000..6dfaa74
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/ListPresentationModel.as
@@ -0,0 +1,47 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 mx.controls.beads.models
+{
+ import org.apache.royale.html.beads.models.ListPresentationModel;
+
+ /**
+ * DataGrid Presentation Model
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.0
+ */
+ public class ListPresentationModel extends org.apache.royale.html.beads.models.ListPresentationModel
+ {
+ /**
+ * Constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.0
+ */
+ public function ListPresentationModel()
+ {
+ super();
+ rowHeight = 22;
+ }
+ }
+}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as
index ee6d141..7ecf118 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/DataItemRendererFactoryForICollectionViewData.as
@@ -30,7 +30,9 @@ package mx.controls.listClasses
import org.apache.royale.core.IItemRendererOwnerView;
import org.apache.royale.core.IListPresentationModel;
import org.apache.royale.core.IIndexedItemRenderer;
+ import org.apache.royale.core.IIndexedItemRendererInitializer;
import org.apache.royale.core.IStrand;
+ import org.apache.royale.core.IStrandWithModelView;
import org.apache.royale.core.IUIBase;
import org.apache.royale.core.SimpleCSSStyles;
import org.apache.royale.core.UIBase;
@@ -41,7 +43,8 @@ package mx.controls.listClasses
import org.apache.royale.events.IEventDispatcher;
import org.apache.royale.events.ItemRendererEvent;
import org.apache.royale.html.List;
- import org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView;
+ import org.apache.royale.html.beads.IListView;
+ import org.apache.royale.html.beads.DataItemRendererFactoryBase;
import org.apache.royale.html.supportClasses.TreeListData;
/**
@@ -56,7 +59,7 @@ package mx.controls.listClasses
* @playerversion AIR 2.6
* @productversion Royale 0.0
*/
- public class DataItemRendererFactoryForICollectionViewData extends DataItemRendererFactoryForCollectionView
+ public class DataItemRendererFactoryForICollectionViewData extends DataItemRendererFactoryBase
{
/**
* Constructor.
@@ -122,5 +125,106 @@ package mx.controls.listClasses
cursor.moveNext();
return obj;
}
+
+ /**
+ * @private
+ * @royaleignorecoercion org.apache.royale.collections.ICollectionView
+ * @royaleignorecoercion org.apache.royale.core.IListPresentationModel
+ * @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer
+ * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+ */
+ protected function itemAddedHandler(event:CollectionEvent):void
+ {
+ if (!dataProviderModel)
+ return;
+ dp = dataProviderModel.dataProvider as ICollectionView;
+ if (!dp)
+ return;
+
+ var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+ var dataGroup:IItemRendererOwnerView = view.dataGroup;
+
+ var ir:IIndexedItemRenderer = itemRendererFactory.createItemRenderer() as IIndexedItemRenderer;
+ dataGroup.addItemRendererAt(ir, event.index);
+
+ var data:Object = event.item;
+ (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, event.index);
+ ir.data = data;
+
+ // update the index values in the itemRenderers to correspond to their shifted positions.
+ var n:int = dataGroup.numItemRenderers;
+ for (var i:int = event.index; i < n; i++)
+ {
+ ir = dataGroup.getItemRendererAt(i) as IIndexedItemRenderer;
+ ir.index = i;
+
+ // could let the IR know its index has been changed (eg, it might change its
+ // UI based on the index). Instead (PAYG), allow another bead to detect
+ // this event and do this as not every IR will need to be updated.
+ //var ubase:UIItemRendererBase = ir as UIItemRendererBase;
+ //if (ubase) ubase.updateRenderer()
+ }
+
+ (_strand as IEventDispatcher).dispatchEvent(new Event("itemsCreated"));
+ (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
+ }
+
+ protected function itemRemovedHandler(event:CollectionEvent):void
+ {
+ if (!dataProviderModel)
+ return;
+ dp = dataProviderModel.dataProvider as ICollectionView;
+ if (!dp)
+ return;
+
+ var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+ var dataGroup:IItemRendererOwnerView = view.dataGroup;
+
+ var ir:IIndexedItemRenderer = dataGroup.getItemRendererAt(event.index) as IIndexedItemRenderer;
+ if (!ir) return; // may have already been cleaned up, possibly when a tree node closes
+ dataGroup.removeItemRenderer(ir);
+
+ // adjust the itemRenderers' index to adjust for the shift
+ var n:int = dataGroup.numItemRenderers;
+ for (var i:int = event.index; i < n; i++)
+ {
+ ir = dataGroup.getItemRendererAt(i) as IIndexedItemRenderer;
+ ir.index = i;
+
+ // could let the IR know its index has been changed (eg, it might change its
+ // UI based on the index). Instead (PAYG), allow another bead to detect
+ // this event and do this as not every IR will need to be updated.
+ //var ubase:UIItemRendererBase = ir as UIItemRendererBase;
+ //if (ubase) ubase.updateRenderer()
+ }
+
+ (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
+ }
+
+ /**
+ * @private
+ * @royaleignorecoercion org.apache.royale.collections.ICollectionView
+ * @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer
+ */
+ protected function itemUpdatedHandler(event:CollectionEvent):void
+ {
+ if (!dataProviderModel)
+ return;
+ dp = dataProviderModel.dataProvider as ICollectionView;
+ if (!dp)
+ return;
+
+ var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+ var dataGroup:IItemRendererOwnerView = view.dataGroup;
+
+ // update the given renderer with (possibly) new information so it can change its
+ // appearence or whatever.
+ var ir:IIndexedItemRenderer = dataGroup.getItemRendererAt(event.index) as IIndexedItemRenderer;
+
+ var data:Object = event.item;
+ (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, event.index);
+ ir.data = data;
+ }
+
}
}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as
index 13fa268..ef9b9b0 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/ListBase.as
@@ -733,6 +733,7 @@ use namespace mx_internal;
public function ListBase()
{
super();
+ rowHeight = 22; //match Flex?
}
private var _DCinitialized:Boolean = true;