This is an automated email from the ASF dual-hosted git repository. piotrz pushed a commit to branch features/issue_472_label_function in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit e0bc3320629c048a2fe645c2a83f813756beca33 Author: Piotr Zarzycki <[email protected]> AuthorDate: Sun Oct 27 15:35:29 2019 +0100 ADG: Handle labelFunction in DataGridColumn trough item renderer (reference #472) --- .../MXRoyale/src/main/resources/defaults.css | 2 +- .../MXRoyale/src/main/royale/MXRoyaleClasses.as | 1 + .../AdvancedDataGridItemRenderer.as | 23 ++++++-- ...actoryForICollectionViewAdvancedDataGridData.as | 28 ++++++---- .../mx/controls/beads/AdvancedDataGridView.as | 5 +- .../models/DataGridColumnICollectionViewModel.as | 65 ++++++++++++++++++++++ 6 files changed, 106 insertions(+), 18 deletions(-) diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css b/frameworks/projects/MXRoyale/src/main/resources/defaults.css index 6c246f0..1324dc6 100644 --- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css +++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css @@ -95,7 +95,7 @@ AdvancedDataGrid } adg|AdvancedDataGridColumnList { - IBeadModel: ClassReference("mx.controls.beads.models.SingleSelectionICollectionViewModel"); + IBeadModel: ClassReference("mx.controls.beads.models.DataGridColumnICollectionViewModel"); IDataProviderItemRendererMapper: ClassReference("mx.controls.advancedDataGridClasses.DataItemRendererFactoryForICollectionViewAdvancedDataGridData"); IBeadView: ClassReference("org.apache.royale.html.beads.VirtualListView"); IBeadController: ClassReference("mx.controls.advancedDataGridClasses.AdvancedDataGridSingleSelectionMouseController"); diff --git a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as index 5216039..625bb27 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as +++ b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as @@ -237,6 +237,7 @@ internal class MXRoyaleClasses import mx.controls.beads.models.ComboBoxModel; ComboBoxModel; import mx.controls.beads.models.SingleSelectionICollectionViewModel; SingleSelectionICollectionViewModel; + import mx.controls.beads.models.DataGridColumnICollectionViewModel; DataGridColumnICollectionViewModel; import mx.controls.beads.models.DataGridICollectionViewModel; DataGridICollectionViewModel; import mx.controls.beads.models.SingleSelectionIListModel; SingleSelectionIListModel; import mx.controls.buttonBarClasses.TextButtonDataGridColumnItemRenderer; TextButtonDataGridColumnItemRenderer; diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as index 94e782e..573568d 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as @@ -27,7 +27,10 @@ import flash.utils.getQualifiedClassName; import flash.utils.getQualifiedSuperclassName; */ //import mx.controls.AdvancedDataGrid; -import mx.controls.listClasses.BaseListData; + import mx.controls.AdvancedDataGrid; + import mx.controls.beads.models.DataGridICollectionViewModel; + import mx.controls.dataGridClasses.DataGridColumn; + import mx.controls.listClasses.BaseListData; import mx.controls.listClasses.IDropInListItemRenderer; import mx.core.IDataRenderer; import mx.core.IFlexDisplayObject; @@ -43,7 +46,7 @@ use namespace mx_internal; import org.apache.royale.utils.CSSUtils; import org.apache.royale.html.supportClasses.StringItemRenderer; -import mx.core.UIComponent; +import mx.core.UIComponent; //-------------------------------------- // Events @@ -128,9 +131,20 @@ public class AdvancedDataGridItemRenderer extends StringItemRenderer */ override public function set data(value:Object):void { - super.data = value; - var treeListData:AdvancedDataGridListData = listData as AdvancedDataGridListData; + var owner:AdvancedDataGrid = treeListData.owner as AdvancedDataGrid; + var adgModel:DataGridICollectionViewModel = owner.getBeadByType(DataGridICollectionViewModel) as DataGridICollectionViewModel; + var column:DataGridColumn = adgModel.columns[treeListData.columnIndex]; + + if (column.labelFunction) + { + super.data = column.labelFunction(value, column); + } + else + { + super.data = value; + } + var indentSpace:String = " "; var extraSpace:String = " "; @@ -154,6 +168,7 @@ public class AdvancedDataGridItemRenderer extends StringItemRenderer COMPILE::JS { element.style.backgroundColor = CSSUtils.attributeFromColor(backgroundColor); } + this.text = indent + this.text; } diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as index d56315a..49854dd 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as @@ -22,7 +22,8 @@ package mx.controls.advancedDataGridClasses import mx.collections.IViewCursor; import mx.collections.CursorBookmark; import mx.controls.advancedDataGridClasses.AdvancedDataGridColumnList; - import mx.core.IUIComponent; + import mx.controls.beads.models.DataGridColumnICollectionViewModel; + import mx.core.IUIComponent; import org.apache.royale.collections.FlattenedList; import org.apache.royale.collections.HierarchicalData; @@ -141,23 +142,26 @@ package mx.controls.advancedDataGridClasses */ protected function setData(ir:ISelectableItemRenderer, data:Object, index:int):void { - if (!(_strand as AdvancedDataGridColumnList).adg) return; - - var depth:int = (_strand as AdvancedDataGridColumnList).adg.getDepth(data); - var isOpen:Boolean = (_strand as AdvancedDataGridColumnList).adg.isItemOpen(data); - var hasChildren:Boolean = (_strand as AdvancedDataGridColumnList).adg.hasChildren(data); - var listID:String = (_strand as AdvancedDataGridColumnList).id; - var firstColumn:Boolean = listID == "dataGridColumn0"; - + var adgColumnList:AdvancedDataGridColumnList = _strand as AdvancedDataGridColumnList; + + if (!adgColumnList.adg) return; + + var adgColumnListModel:DataGridColumnICollectionViewModel = adgColumnList.getBeadByType(DataGridColumnICollectionViewModel) as DataGridColumnICollectionViewModel; + + var depth:int = adgColumnList.adg.getDepth(data); + var isOpen:Boolean = adgColumnList.adg.isItemOpen(data); + var hasChildren:Boolean = adgColumnList.adg.hasChildren(data); + var firstColumn:Boolean = adgColumnListModel.columnIndex == 0; + // Set the listData with the depth of this item - var treeListData:AdvancedDataGridListData = new AdvancedDataGridListData("", "", firstColumn ? 0 : 1, "", (_strand as AdvancedDataGridColumnList).adg, index); + var treeListData:AdvancedDataGridListData = new AdvancedDataGridListData("", "", adgColumnListModel.columnIndex, "", adgColumnList.adg, index); treeListData.depth = depth; treeListData.open = isOpen; treeListData.hasChildren = hasChildren; ir.listData = treeListData; - if (firstColumn && (_strand as AdvancedDataGridColumnList).adg.groupLabelField) - ir.labelField = (_strand as AdvancedDataGridColumnList).adg.groupLabelField; + if (firstColumn && adgColumnList.adg.groupLabelField) + ir.labelField = adgColumnList.adg.groupLabelField; ir.data = data; ir.index = index; diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridView.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridView.as index beef3b4..38764f6 100644 --- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridView.as +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridView.as @@ -18,6 +18,8 @@ //////////////////////////////////////////////////////////////////////////////// package mx.controls.beads { + import mx.controls.beads.models.DataGridColumnICollectionViewModel; + import org.apache.royale.core.IDataGrid; import org.apache.royale.core.IDataGridModel; import org.apache.royale.core.UIBase; @@ -65,7 +67,6 @@ package mx.controls.beads private function handleColumnsInvalid(event:Event):void { - var host:IDataGrid = _strand as IDataGrid; var sharedModel:IDataGridModel = (host.model as IDataGridModel); @@ -73,6 +74,8 @@ package mx.controls.beads for (var i:int=0; i < columnLists.length; i++) { var list:AdvancedDataGridColumnList = columnLists[i] as AdvancedDataGridColumnList; + var adgColumnListModel:DataGridColumnICollectionViewModel = list.getBeadByType(DataGridColumnICollectionViewModel) as DataGridColumnICollectionViewModel; + adgColumnListModel.columnIndex = i; list.visible = (sharedModel.columns[i] as AdvancedDataGridColumn).visible; list.addEventListener(ItemClickEvent.ITEM_CLICK, itemClickHandler); if (list.visible) diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/DataGridColumnICollectionViewModel.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/DataGridColumnICollectionViewModel.as new file mode 100644 index 0000000..e0f1afd --- /dev/null +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/models/DataGridColumnICollectionViewModel.as @@ -0,0 +1,65 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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 +{ + /** + * The DataGridColumnICollectionViewModel class is a selection model for AdvancedDataGridColumn + * which helps managing labelFunction + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.9.7 + */ + public class DataGridColumnICollectionViewModel extends SingleSelectionICollectionViewModel + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.9.7 + */ + public function DataGridColumnICollectionViewModel() + { + super(); + } + + private var _columnIndex:int; + + /** + * Indication to columnIndex + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.9.7 + */ + public function get columnIndex():int + { + return _columnIndex; + } + + public function set columnIndex(value:int):void + { + _columnIndex = value; + } + } +}
