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 2019/08/15 23:18:05 UTC
[royale-asjs] 02/03: try to get DG columns to behave better
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 1f05de4e899089583436ea3302245843d9092cc1
Author: Alex Harui <ah...@apache.org>
AuthorDate: Thu Aug 15 15:41:18 2019 -0700
try to get DG columns to behave better
---
.../royale/html/beads/layouts/DataGridLayout.as | 19 ++--
.../royale/html/supportClasses/DataGridColumn.as | 3 +-
.../MXRoyale/src/main/resources/defaults.css | 4 +-
.../MXRoyale/src/main/royale/MXRoyaleClasses.as | 1 +
.../mx/controls/beads/layouts/DataGridLayout.as | 114 +++++++++++++++++++++
5 files changed, 130 insertions(+), 11 deletions(-)
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridLayout.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridLayout.as
index faf1595..f586943 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridLayout.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridLayout.as
@@ -25,9 +25,9 @@ package org.apache.royale.html.beads.layouts
import org.apache.royale.core.IDataGridModel;
import org.apache.royale.core.IStrand;
import org.apache.royale.core.IUIBase;
- import org.apache.royale.core.layout.EdgeData;
import org.apache.royale.core.UIBase;
import org.apache.royale.core.ValuesManager;
+ import org.apache.royale.core.layout.EdgeData;
import org.apache.royale.events.Event;
import org.apache.royale.events.IEventDispatcher;
import org.apache.royale.geom.Rectangle;
@@ -60,7 +60,7 @@ package org.apache.royale.html.beads.layouts
{
}
- private var _strand:IStrand;
+ protected var _strand:IStrand;
/**
* @copy org.apache.royale.core.IBead#strand
@@ -84,7 +84,7 @@ package org.apache.royale.html.beads.layouts
/**
* @royaleignorecoercion org.apache.royale.core.UIBase
*/
- private function get uiHost():UIBase
+ protected function get uiHost():UIBase
{
return _strand as UIBase;
}
@@ -112,6 +112,10 @@ package org.apache.royale.html.beads.layouts
public function layout():Boolean
{
var header:IUIBase = (uiHost.view as IDataGridView).header;
+ // fancier DG's will filter invisible columns and only put visible columns
+ // in the bbmodel, so do all layout based on the bbmodel, not the set
+ // of columns that may contain invisible columns
+ var bbmodel:ButtonBarModel = header.getBeadByType(ButtonBarModel) as ButtonBarModel;
var listArea:IUIBase = (uiHost.view as IDataGridView).listArea;
var displayedColumns:Array = (uiHost.view as IDataGridView).columnLists;
@@ -122,11 +126,11 @@ package org.apache.royale.html.beads.layouts
var useHeight:Number = uiHost.height - (borderMetrics.top + borderMetrics.bottom);
var xpos:Number = 0;
- var defaultColumnWidth:Number = (useWidth) / model.columns.length;
+ var defaultColumnWidth:Number = (useWidth) / bbmodel.dataProvider.length;
var columnWidths:Array = [];
- for(var i:int=0; i < displayedColumns.length; i++) {
- var columnDef:IDataGridColumn = model.columns[i] as IDataGridColumn;
+ for(var i:int=0; i < bbmodel.dataProvider.length; i++) {
+ var columnDef:IDataGridColumn = bbmodel.dataProvider[i] as IDataGridColumn;
var columnList:UIBase = displayedColumns[i] as UIBase;
// probably do not need to set (x,y), but if the Container's layout requires it, they will be set.
@@ -135,7 +139,7 @@ package org.apache.royale.html.beads.layouts
var columnWidth:Number = defaultColumnWidth;
if (!isNaN(columnDef.columnWidth)) {
- columnWidth = (columnDef.columnWidth / uiHost.width) * useWidth;
+ columnWidth = columnDef.columnWidth;
}
columnList.width = columnWidth;
@@ -144,7 +148,6 @@ package org.apache.royale.html.beads.layouts
xpos += columnList.width;
}
- var bbmodel:ButtonBarModel = header.getBeadByType(ButtonBarModel) as ButtonBarModel;
bbmodel.buttonWidths = columnWidths;
header.x = borderMetrics.left;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataGridColumn.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataGridColumn.as
index cc58aff..db02435 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataGridColumn.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataGridColumn.as
@@ -85,7 +85,8 @@ package org.apache.royale.html.supportClasses
private var _columnWidth:Number = Number.NaN;
/**
- * The width of the column (default is 100 pixels).
+ * The width of the column. If not set,
+ * the columns will be sized to fit.
*
* @langversion 3.0
* @playerversion Flash 10.2
diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
index c86d206..e8c6631 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css
+++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
@@ -81,7 +81,7 @@ AdvancedDataGrid
IDataGridPresentationModel: ClassReference("org.apache.royale.html.beads.models.DataGridPresentationModel");
IBeadView: ClassReference("mx.controls.beads.AdvancedDataGridView");
IBeadModel: ClassReference("mx.controls.beads.models.DataGridICollectionViewModel");
- IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.DataGridLayout");
+ IBeadLayout: ClassReference("mx.controls.beads.layouts.DataGridLayout");
columnClass: ClassReference("mx.controls.advancedDataGridClasses.AdvancedDataGridColumnList");
background-color: #FFFFFF;
@@ -154,7 +154,7 @@ DataGrid
IDataGridPresentationModel: ClassReference("org.apache.royale.html.beads.models.DataGridPresentationModel");
IBeadView: ClassReference("org.apache.royale.html.beads.DataGridView");
IBeadModel: ClassReference("org.apache.royale.html.beads.models.DataGridModel");
- IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.DataGridLayout");
+ IBeadLayout: ClassReference("mx.controls.beads.layouts.DataGridLayout");
columnClass: ClassReference("org.apache.royale.html.supportClasses.DataGridColumnList");
background-color: #FFFFFF;
diff --git a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
index f8977b9..cbe0646 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
@@ -162,6 +162,7 @@ internal class MXRoyaleClasses
import mx.controls.advancedDataGridClasses.AdvancedDataGridSingleSelectionMouseController; AdvancedDataGridSingleSelectionMouseController;
import mx.controls.beads.AdvancedDataGridView; AdvancedDataGridView;
import mx.controls.beads.DataGridView; DataGridView;
+ import mx.controls.beads.layouts.DataGridLayout; DataGridLayout;
import mx.formatters.Formatter; Formatter;
import mx.formatters.IFormatter; IFormatter;
import mx.formatters.NumberBase; NumberBase;
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/DataGridLayout.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/DataGridLayout.as
new file mode 100644
index 0000000..bfca4d7
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/DataGridLayout.as
@@ -0,0 +1,114 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.layouts
+{
+ import org.apache.royale.core.IUIBase;
+ import org.apache.royale.core.IBorderPaddingMarginValuesImpl;
+ import org.apache.royale.core.ValuesManager;
+ import org.apache.royale.core.layout.EdgeData;
+ import org.apache.royale.html.beads.IDataGridView;
+ import org.apache.royale.html.beads.models.ButtonBarModel;
+ import org.apache.royale.html.beads.layouts.DataGridLayout;
+ import mx.controls.dataGridClasses.DataGridColumn;
+
+
+ /**
+ * The DataGridLayout class.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.0
+ */
+ public class DataGridLayout extends org.apache.royale.html.beads.layouts.DataGridLayout
+ {
+ /**
+ * Constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.0
+ */
+ public function DataGridLayout()
+ {
+ }
+
+ /**
+ * @copy org.apache.royale.core.IBeadLayout#layout
+ * @royaleignorecoercion org.apache.royale.core.IBorderPaddingMarginValuesImpl
+ * @royaleignorecoercion org.apache.royale.core.IDataGridModel
+ * @royaleignorecoercion org.apache.royale.core.IUIBase
+ * @royaleignorecoercion org.apache.royale.core.UIBase
+ * @royaleignorecoercion org.apache.royale.html.beads.IDataGridView
+ * @royaleignorecoercion org.apache.royale.html.beads.models.ButtonBarModel
+ * @royaleignorecoercion org.apache.royale.html.supportClasses.IDataGridColumn
+ */
+ override public function layout():Boolean
+ {
+ var header:IUIBase = (uiHost.view as IDataGridView).header;
+ // fancier DG's will filter invisible columns and only put visible columns
+ // in the bbmodel, so do all layout based on the bbmodel, not the set
+ // of columns that may contain invisible columns
+ var bbmodel:ButtonBarModel = header.getBeadByType(ButtonBarModel) as ButtonBarModel;
+ // do the proportional sizing of columns
+ var borderMetrics:EdgeData = (ValuesManager.valuesImpl as IBorderPaddingMarginValuesImpl).getBorderMetrics(_strand as IUIBase);
+ var useWidth:Number = uiHost.width - (borderMetrics.left + borderMetrics.right);
+ var useHeight:Number = uiHost.height - (borderMetrics.top + borderMetrics.bottom);
+
+ var totalWidths:Number = 0;
+ var unspecifiedWidths:int = 0;
+ for(var i:int=0; i < bbmodel.dataProvider.length; i++) {
+ var columnDef:DataGridColumn = bbmodel.dataProvider[i] as DataGridColumn;
+ if (!isNaN(columnDef.width))
+ totalWidths += columnDef.width;
+ else
+ unspecifiedWidths++;
+ }
+
+ if (unspecifiedWidths > 0 && totalWidths > 0)
+ {
+ // some widths are specified, others are not, so fit the unspecified
+ // in the remaining space
+ var remainingSpace:Number = useWidth - totalWidths;
+ var proportionateShare:Number = remainingSpace / unspecifiedWidths;
+ for(i=0; i < bbmodel.dataProvider.length; i++) {
+ columnDef = bbmodel.dataProvider[i] as DataGridColumn;
+ if (!isNaN(columnDef.width))
+ columnDef.columnWidth = columnDef.width;
+ else
+ columnDef.columnWidth = proportionateShare;
+ }
+ }
+ else if (totalWidths > 0)
+ {
+ if (totalWidths != useWidth)
+ {
+ var factor:Number = useWidth / totalWidths;
+ for(i=0; i < bbmodel.dataProvider.length; i++) {
+ columnDef = bbmodel.dataProvider[i] as DataGridColumn;
+ columnDef.columnWidth = columnDef.width * factor;
+ }
+ }
+ }
+
+ return super.layout();
+ }
+ }
+}