You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by pe...@apache.org on 2018/01/21 13:38:00 UTC
[royale-asjs] branch develop updated: Revived DataGridLayout and DataGridPercentageLayout. Moved DataGrid’s layout into the layout beads. Moved some hard-coded settings for DataGrid and TreeGrid into defaults.css for better flexibility. DataGridPercentageView is now obsolete.
This is an automated email from the ASF dual-hosted git repository.
pent 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 e80f343 Revived DataGridLayout and DataGridPercentageLayout. Moved DataGrid’s layout into the layout beads. Moved some hard-coded settings for DataGrid and TreeGrid into defaults.css for better flexibility. DataGridPercentageView is now obsolete.
e80f343 is described below
commit e80f343bbd20bca7d50e58f2b1db1ab97fa877c1
Author: Peter Ent <pe...@apache.org>
AuthorDate: Sun Jan 21 08:40:03 2018 -0500
Revived DataGridLayout and DataGridPercentageLayout. Moved DataGrid’s layout into the layout beads. Moved some hard-coded settings for DataGrid and TreeGrid into defaults.css for better flexibility. DataGridPercentageView is now obsolete.
---
.../projects/Basic/src/main/resources/defaults.css | 15 +-
.../projects/Basic/src/main/royale/BasicClasses.as | 2 +
.../org/apache/royale/html/beads/DataGridView.as | 56 +-----
.../org/apache/royale/html/beads/TreeGridView.as | 16 +-
.../royale/html/beads/layouts/DataGridLayout.as | 201 ++++++++-------------
.../html/beads/layouts/DataGridPercentageLayout.as | 180 ++++--------------
.../royale/html/beads/layouts/TreeGridLayout.as | 37 ++--
7 files changed, 146 insertions(+), 361 deletions(-)
diff --git a/frameworks/projects/Basic/src/main/resources/defaults.css b/frameworks/projects/Basic/src/main/resources/defaults.css
index 92a325f..69f37ec 100644
--- a/frameworks/projects/Basic/src/main/resources/defaults.css
+++ b/frameworks/projects/Basic/src/main/resources/defaults.css
@@ -171,7 +171,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.VerticalFlexLayout");
+ IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.DataGridLayout");
background-color: #FFFFFF;
border: 1px solid #222222;
@@ -188,13 +188,16 @@ DataGridButtonBar
IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.TextButtonItemRenderer");
border-style: none;
+ height: 40px;
+ min-height: 40px;
+ flex-grow: 0;
}
DataGridColumnList {
IBeadModel: ClassReference("org.apache.royale.html.beads.models.DataGridModel");
IBeadView: ClassReference("org.apache.royale.html.beads.ListView");
IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController");
- IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalFlexLayout");
+ IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData");
IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.StringItemRenderer");
@@ -206,9 +209,10 @@ DataGridColumnList {
.opt_org-apache.royale-html-DataGrid_ListArea {
background-color: #FFFFFF;
- IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.HorizontalFlexLayout");
+ IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.HorizontalLayout");
IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
+ flex-grow: 1;
}
.DynamicDataGrid {
@@ -216,7 +220,7 @@ DataGridColumnList {
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.DataGridCollectionViewModel");
- IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalFlexLayout");
+ IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.DataGridLayout");
ColumnClassName: "DynamicDataGridColumnList";
background-color: #FFFFFF;
@@ -227,7 +231,7 @@ DataGridColumnList {
IBeadModel: ClassReference("org.apache.royale.html.beads.models.DataGridCollectionViewModel");
IBeadView: ClassReference("org.apache.royale.html.beads.ListView");
IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController");
- IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalFlexLayout");
+ IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView");
IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.StringItemRenderer");
@@ -474,6 +478,7 @@ TreeGrid .TreeGridColumn {
IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
position: absolute;
+ flex-grow: 1;
}
NumericStepper
diff --git a/frameworks/projects/Basic/src/main/royale/BasicClasses.as b/frameworks/projects/Basic/src/main/royale/BasicClasses.as
index c462a1e..b8d4ea3 100644
--- a/frameworks/projects/Basic/src/main/royale/BasicClasses.as
+++ b/frameworks/projects/Basic/src/main/royale/BasicClasses.as
@@ -182,6 +182,8 @@ internal class BasicClasses
import org.apache.royale.html.beads.DataGridView; DataGridView;
import org.apache.royale.html.beads.IDataGridView; IDataGridView;
import org.apache.royale.html.beads.DataGridPercentageView; DataGridPercentageView;
+ import org.apache.royale.html.beads.layouts.DataGridLayout; DataGridLayout;
+ import org.apache.royale.html.beads.layouts.DataGridPercentageLayout; DataGridPercentageLayout;
import org.apache.royale.html.beads.DateChooserView; DateChooserView;
import org.apache.royale.html.beads.DateFieldView; DateFieldView;
import org.apache.royale.html.beads.DecrementButtonView; DecrementButtonView;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridView.as
index 6cc2bbe..0e17879 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridView.as
@@ -32,15 +32,9 @@ package org.apache.royale.html.beads
import org.apache.royale.html.DataGrid;
import org.apache.royale.html.DataGridButtonBar;
import org.apache.royale.html.beads.layouts.ButtonBarLayout;
- import org.apache.royale.html.beads.models.ButtonBarModel;
- import org.apache.royale.html.supportClasses.DataGridColumn;
import org.apache.royale.html.supportClasses.DataGridColumnList;
+ import org.apache.royale.html.supportClasses.IDataGridColumn;
import org.apache.royale.html.supportClasses.Viewport;
- import org.apache.royale.utils.loadBeadFromValuesManager;
-
- COMPILE::SWF {
- import org.apache.royale.core.SimpleCSSStylesWithFlex;
- }
/**
* The DataGridView class is the visual bead for the org.apache.royale.html.DataGrid.
@@ -116,7 +110,7 @@ package org.apache.royale.html.beads
IEventDispatcher(sharedModel).addEventListener("selectedIndexChanged", handleSelectedIndexChanged);
_header = new DataGridButtonBar();
- _header.height = 30;
+ // header's height is set in CSS
_header.percentWidth = 100;
_header.dataProvider = sharedModel.columns;
_header.labelField = "label";
@@ -126,52 +120,9 @@ package org.apache.royale.html.beads
_listArea.percentWidth = 100;
_listArea.className = "opt_org-apache.royale-html-DataGrid_ListArea";
- COMPILE::SWF {
- _header.style = new SimpleCSSStylesWithFlex();
- _header.style.flexGrow = 0;
-
- _listArea.style = new SimpleCSSStylesWithFlex();
- _listArea.style.flexGrow = 1;
- }
- COMPILE::JS {
- _header.element.style["flex-grow"] = "0";
- _header.element.style["min-height"] = "30px";
- _listArea.element.style["flex-grow"] = "1";
- }
-
createLists();
- //var columnLabels:Array = [];
- var buttonWidths:Array = [];
-
- var marginBorderOffset:int = 0;
- COMPILE::SWF {
- marginBorderOffset = 1;
- }
-
- for(var i:int=0; i < sharedModel.columns.length; i++) {
- var dgc:DataGridColumn = sharedModel.columns[i] as DataGridColumn;
- //columnLabels.push(dgc.label);
- var colWidth:Number = dgc.columnWidth - marginBorderOffset;
- buttonWidths.push(colWidth);
-
- var list:DataGridColumnList = _lists[i] as DataGridColumnList;
- if (!isNaN(colWidth)) {
- list.width = Number(colWidth - marginBorderOffset);
- } else {
- COMPILE::SWF {
- list.style = new SimpleCSSStylesWithFlex();
- list.style.flexGrow = 1;
- }
- COMPILE::JS {
- list.element.style["flex-grow"] = "1";
- }
- }
- }
-
var bblayout:ButtonBarLayout = new ButtonBarLayout();
- _header.buttonWidths = buttonWidths;
- _header.widthType = ButtonBarModel.PIXEL_WIDTHS;
_header.addBead(bblayout as IBead);
_header.addBead(new Viewport() as IBead);
host.addElement(_header as IChild);
@@ -200,7 +151,6 @@ package org.apache.royale.html.beads
*/
private function handleDataProviderChanged(event:Event):void
{
-
host.dispatchEvent(new Event("layoutNeeded"));
}
@@ -258,7 +208,7 @@ package org.apache.royale.html.beads
for (var i:int=0; i < sharedModel.columns.length; i++)
{
- var dataGridColumn:DataGridColumn = sharedModel.columns[i] as DataGridColumn;
+ var dataGridColumn:IDataGridColumn = sharedModel.columns[i] as IDataGridColumn;
var useClassName:String = columnClassName;
if (dataGridColumn.className != null) useClassName = dataGridColumn.className;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TreeGridView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TreeGridView.as
index b2bc41f..79d83bd 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TreeGridView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TreeGridView.as
@@ -45,10 +45,6 @@ package org.apache.royale.html.beads
import org.apache.royale.html.supportClasses.TreeGridColumn;
import org.apache.royale.html.supportClasses.Viewport;
- COMPILE::SWF {
- import org.apache.royale.core.SimpleCSSStylesWithFlex;
- }
-
/**
* The TreeGridView class is responsible for creating the sub-components of the TreeGrid:
* the ButtonBar header, the Tree (first column), and Lists (rest of the columns), as well
@@ -130,7 +126,6 @@ package org.apache.royale.html.beads
_strand.addBead(layout);
}
-
IEventDispatcher(_strand).addEventListener("beadsAdded", finishSetup);
}
@@ -153,7 +148,7 @@ package org.apache.royale.html.beads
IEventDispatcher(sharedModel).addEventListener("selectedIndexChanged", handleSelectedIndexChanged);
_header = new DataGridButtonBar();
- _header.height = 30;
+ // header's height is set in CSS
_header.percentWidth = 100;
_header.dataProvider = sharedModel.columns;
_header.labelField = "label";
@@ -180,14 +175,6 @@ package org.apache.royale.html.beads
var list:UIBase = _lists[i] as UIBase;
if (!isNaN(colWidth)) {
list.width = Number(colWidth - marginBorderOffset);
- } else {
- COMPILE::SWF {
- list.style = new SimpleCSSStylesWithFlex();
- list.style.flexGrow = 1;
- }
- COMPILE::JS {
- list.element.style["flex-grow"] = "1";
- }
}
}
@@ -223,7 +210,6 @@ package org.apache.royale.html.beads
*/
private function handleDataProviderChanged(event:Event):void
{
-
host.dispatchEvent(new Event("layoutNeeded"));
}
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 4087f50..a420bcd 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
@@ -20,19 +20,19 @@ package org.apache.royale.html.beads.layouts
{
import org.apache.royale.core.IBead;
import org.apache.royale.core.IBeadLayout;
- import org.apache.royale.core.IBeadModel;
- import org.apache.royale.core.IBeadView;
- import org.apache.royale.core.IDataGridModel;
- import org.apache.royale.core.IStrand;
- import org.apache.royale.core.IUIBase;
- import org.apache.royale.core.UIBase;
- import org.apache.royale.events.Event;
- import org.apache.royale.events.IEventDispatcher;
- import org.apache.royale.html.ButtonBar;
- import org.apache.royale.html.beads.DataGridView;
- import org.apache.royale.html.beads.layouts.BasicLayout;
- import org.apache.royale.html.supportClasses.DataGridColumnList;
- import org.apache.royale.html.supportClasses.DataGridColumn;
+ import org.apache.royale.core.IBeadView;
+ import org.apache.royale.core.IDataGridModel;
+ import org.apache.royale.core.IStrand;
+ import org.apache.royale.core.IUIBase;
+ import org.apache.royale.core.UIBase;
+ import org.apache.royale.events.Event;
+ import org.apache.royale.events.IEventDispatcher;
+ import org.apache.royale.geom.Rectangle;
+ import org.apache.royale.html.beads.DataGridView;
+ import org.apache.royale.html.beads.IDataGridView;
+ import org.apache.royale.html.beads.models.ButtonBarModel;
+ import org.apache.royale.html.supportClasses.IDataGridColumn;
+ import org.apache.royale.utils.CSSContainerUtils;
/**
* DataGridLayout is a class that handles the size and positioning of the
@@ -44,7 +44,7 @@ package org.apache.royale.html.beads.layouts
* @playerversion AIR 2.6
* @productversion Royale 0.0
*/
- public class DataGridLayout implements IDataGridLayout
+ public class DataGridLayout implements IBeadLayout
{
/**
* constructor
@@ -72,145 +72,86 @@ package org.apache.royale.html.beads.layouts
{
_strand = value;
- var host:UIBase = value as UIBase;
-
- var view:DataGridView = host.view as DataGridView;
- header = view.header;
- listArea = view.listArea;
-
- var anylayout:IBead = listArea.getBeadByType(IBeadLayout);
- if (anylayout != null) {
- listArea.removeBead(anylayout);
- }
- listArea.addBead(new BasicLayout());
-
- host.addEventListener("widthChanged", handleSizeChanges);
- host.addEventListener("heightChanged", handleSizeChanges);
- host.addEventListener("sizeChanged", handleSizeChanges);
- host.addEventListener("layoutNeeded", handleSizeChanges);
-
+ (_strand as IEventDispatcher).addEventListener("widthChanged", handleSizeChanges);
+ (_strand as IEventDispatcher).addEventListener("heightChanged", handleSizeChanges);
+ (_strand as IEventDispatcher).addEventListener("sizeChanged", handleSizeChanges);
+ (_strand as IEventDispatcher).addEventListener("layoutNeeded", handleLayoutNeeded);
}
- private var _header:UIBase;
-
- /**
- * The element that is the header for the DataGrid
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.0
- */
- public function get header():IUIBase
+ private function get host():IUIBase
{
- return _header;
+ return _strand as IUIBase;
}
- public function set header(value:IUIBase):void
+ private function get uiHost():UIBase
{
- _header = UIBase(value);
+ return _strand as UIBase;
}
- private var _columns:Array;
-
- /**
- * The array of column elements.
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.0
- */
- public function get columns():Array
- {
- return _columns;
- }
- public function set columns(value:Array):void
+ private function handleSizeChanges(event:Event):void
{
- _columns = value;
+ layout();
}
- private var _listArea:IUIBase;
-
- public function get listArea():IUIBase
- {
- return _listArea;
- }
- public function set listArea(value:IUIBase):void
+ private function handleLayoutNeeded(event:Event):void
{
- _listArea = value;
+ layout();
}
- /**
- * @copy org.apache.royale.core.IBeadLayout#layout
- */
+ /**
+ * @copy org.apache.royale.core.IBeadLayout#layout
+ */
public function layout():Boolean
- {
- if (columns == null || columns.length == 0) {
- return false;
- }
- var host:UIBase = _strand as UIBase;
+ {
+ var header:IUIBase = (uiHost.view as IDataGridView).header;
+ var listArea:IUIBase = (uiHost.view as IDataGridView).listArea;
- var useWidth:Number = host.width;
- var useHeight:Number = host.height;
-
- if (host.height > 0) {
- useHeight = host.height - _header.height;
- }
+ var displayedColumns:Array = (uiHost.view as IDataGridView).columnLists;
+ var model:IDataGridModel = uiHost.model as IDataGridModel;
+
+ var borderMetrics:Rectangle = CSSContainerUtils.getBorderMetrics(_strand);
+ var useWidth:Number = uiHost.width - (borderMetrics.left + borderMetrics.right);
+ var useHeight:Number = uiHost.height - (borderMetrics.top + borderMetrics.bottom);
- var thisisnothing:Number = -1234;
-
- _listArea.x = 0;
- _listArea.y = 26;
- _listArea.width = useWidth;
- _listArea.height = useHeight;
-
- var sharedModel:IDataGridModel = host.model as IDataGridModel;
- var buttonWidths:Array = [];
-
- if (_columns != null && _columns.length > 0) {
- var xpos:Number = 0;
- var listWidth:Number = host.width / _columns.length;
- for (var i:int=0; i < _columns.length; i++) {
- var list:DataGridColumnList = _columns[i] as DataGridColumnList;
- list.x = xpos;
- list.y = 0;
-
- var dataGridColumn:DataGridColumn = sharedModel.columns[i] as DataGridColumn;
- var colWidth:Number = dataGridColumn.columnWidth;
- if (!isNaN(colWidth)) list.width = colWidth;
- else list.width = listWidth;
-
- xpos += list.width;
-
- buttonWidths.push(list.width);
+ var xpos:Number = 0;
+ var defaultColumnWidth:Number = (useWidth) / model.columns.length;
+ var columnWidths:Array = [];
+
+ for(var i:int=0; i < displayedColumns.length; i++) {
+ var columnDef:IDataGridColumn = model.columns[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.
+ columnList.x = xpos;
+ columnList.y = 0;
+
+ var columnWidth:Number = defaultColumnWidth;
+ if (!isNaN(columnDef.columnWidth)) {
+ columnWidth = (columnDef.columnWidth / uiHost.width) * useWidth;
}
+
+ columnList.width = columnWidth;
+ columnWidths.push(columnWidth);
+
+ xpos += columnList.width;
}
- var bar:ButtonBar = header as ButtonBar;
- var barLayout:ButtonBarLayout = bar.getBeadByType(ButtonBarLayout) as ButtonBarLayout;
- barLayout.buttonWidths = buttonWidths;
- bar.dispatchEvent(new Event("layoutNeeded"));
+ var bbmodel:ButtonBarModel = header.getBeadByType(ButtonBarModel) as ButtonBarModel;
+ bbmodel.buttonWidths = columnWidths;
- _header.x = 0;
- _header.y = 0;
- _header.width = useWidth;
- _header.height = 25;
- _header.dispatchEvent(new Event("layoutNeeded"));
+ header.x = borderMetrics.left;
+ header.y = borderMetrics.top;
+ header.width = useWidth;
+ // header's height is set in CSS
- return true;
- }
-
- /**
- * @private
- */
- private function handleSizeChanges(event:Event):void
- {
- var view:DataGridView = UIBase(_strand).view as DataGridView;
- if (view == null) return;
+ listArea.x = borderMetrics.left;
+ listArea.y = header.height + header.y;
+ listArea.width = useWidth;
+ listArea.height = useHeight - header.height;
- columns = view.columnLists;
+ header.dispatchEvent(new Event("layoutNeeded"));
+ listArea.dispatchEvent(new Event("layoutNeeded"));
- layout();
+ return true;
}
}
}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridPercentageLayout.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridPercentageLayout.as
index 040b872..8a83fce 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridPercentageLayout.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridPercentageLayout.as
@@ -18,19 +18,15 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.royale.html.beads.layouts
{
- import org.apache.royale.core.IBead;
- import org.apache.royale.core.IBeadLayout;
- import org.apache.royale.core.IBeadView;
import org.apache.royale.core.IDataGridModel;
import org.apache.royale.core.IStrand;
import org.apache.royale.core.IUIBase;
import org.apache.royale.core.UIBase;
import org.apache.royale.events.Event;
- import org.apache.royale.events.IEventDispatcher;
import org.apache.royale.html.ButtonBar;
- import org.apache.royale.html.beads.DataGridView;
- import org.apache.royale.html.beads.layouts.HorizontalLayout;
- import org.apache.royale.html.supportClasses.DataGridColumn;
+ import org.apache.royale.html.beads.IDataGridView;
+ import org.apache.royale.html.beads.models.ButtonBarModel;
+ import org.apache.royale.html.supportClasses.IDataGridColumn;
/**
* DataGridPercentageLayout is a class that handles the size and positioning of the
@@ -43,7 +39,7 @@ package org.apache.royale.html.beads.layouts
* @playerversion AIR 2.6
* @productversion Royale 0.0
*/
- public class DataGridPercentageLayout implements IDataGridLayout
+ public class DataGridPercentageLayout extends DataGridLayout
{
/**
* constructor
@@ -55,6 +51,7 @@ package org.apache.royale.html.beads.layouts
*/
public function DataGridPercentageLayout()
{
+ super();
}
private var _strand:IStrand;
@@ -67,158 +64,53 @@ package org.apache.royale.html.beads.layouts
* @playerversion AIR 2.6
* @productversion Royale 0.0
*/
- public function set strand(value:IStrand):void
+ override public function set strand(value:IStrand):void
{
_strand = value;
-
- var host:UIBase = value as UIBase;
-
- var view:DataGridView = host.view as DataGridView;
-
- header = view.header;
- listArea = view.listArea;
-
- var anylayout:IBead = listArea.getBeadByType(IBeadLayout);
- if (anylayout != null) {
- listArea.removeBead(anylayout);
- }
- listArea.addBead(new HorizontalLayout());
-
- host.addEventListener("widthChanged", handleSizeChanges);
- host.addEventListener("heightChanged", handleSizeChanges);
- host.addEventListener("sizeChanged", handleSizeChanges);
- host.addEventListener("layoutNeeded", handleSizeChanges);
- }
-
- private var _header:UIBase;
-
- /**
- * The element that is the header for the DataGrid
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.0
- */
- public function get header():IUIBase
- {
- return _header;
- }
- public function set header(value:IUIBase):void
- {
- _header = UIBase(value);
- }
-
- private var _columns:Array;
-
- /**
- * The array of column elements.
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.0
- */
- public function get columns():Array
- {
- return _columns;
- }
- public function set columns(value:Array):void
- {
- _columns = value;
- }
-
- private var _listArea:IUIBase;
-
- public function get listArea():IUIBase
- {
- return _listArea;
- }
- public function set listArea(value:IUIBase):void
- {
- _listArea = value;
+ super.strand = value;
}
/**
* @copy org.apache.royale.core.IBeadLayout#layout
*/
- public function layout():Boolean
+ override public function layout():Boolean
{
- if (columns == null || columns.length == 0) {
- return false;
- }
+ // call the super function to get the basics laid out even
+ // though the columns and header will not be right.
+ if (!super.layout()) return false;
var host:UIBase = _strand as UIBase;
-
- var sw:Number = host.width;
- var sh:Number = host.height;
-
- var columnHeight:Number = Math.floor(sh - header.height);
- var columnWidth:Number = Math.floor(sw / columns.length);
-
- var xpos:Number = 0;
- var ypos:Number = 26;
-
- _header.x = 0;
- _header.y = 0;
- _header.width = sw;
- _header.height = 25;
-
- if (sh > 0) {
- sh = sh - _header.height;
- }
-
- // TODO: change the layout so that the model's DataGridColumn.columnWidth
- // isn't used blindly, but is considered in the overall width. In other words,
- // right now the width could exceed the strand's width.
- var model:IDataGridModel = host.model as IDataGridModel;
-
- var buttonWidths:Array = new Array();
-
- for(var i:int=0; i < columns.length; i++) {
- var column:UIBase = columns[i] as UIBase;
- column.percentHeight = 100;
-
- var dgc:DataGridColumn = model.columns[i];
- if (!isNaN(dgc.columnWidth)) {
- column.percentWidth = dgc.columnWidth;
- columnWidth = sw * (dgc.columnWidth/100.0);
- }
- else column.explicitWidth = columnWidth;
+ var header:IUIBase = (host.view as IDataGridView).header;
+ var sharedModel:IDataGridModel = host.model as IDataGridModel;
+ var columnLists:Array = (host.view as IDataGridView).columnLists;
+ var columnListCount:int = sharedModel.columns.length;
+ var buttonWidths:Array = [];
+
+ for (var i:int = 0; i < columnListCount; i++)
+ {
+ var dgc:IDataGridColumn = sharedModel.columns[i] as IDataGridColumn;
+ var colWidth:Number = dgc.columnWidth;
+ buttonWidths.push(colWidth);
- buttonWidths.push(columnWidth);
+ var list:UIBase = columnLists[i] as UIBase;
+ if (!isNaN(dgc.columnWidth))
+ {
+ list.width = NaN;
+ list.percentWidth = Number(colWidth);
+ }
}
- _listArea.x = 0;
- _listArea.y = 26;
- _listArea.width = sw;
- _listArea.height = sh;
- _listArea.dispatchEvent(new Event("layoutNeeded"));
-
- var bar:ButtonBar = header as ButtonBar;
- var barLayout:ButtonBarLayout = bar.getBeadByType(ButtonBarLayout) as ButtonBarLayout;
- barLayout.buttonWidths = buttonWidths;
+ // list area needs a layout refresh because its contents were changed from
+ // fixed size to percent size.
+ var listArea:IUIBase = (host.view as IDataGridView).listArea;
+ listArea.dispatchEvent(new Event("layoutNeeded"));
- _header.x = 0;
- _header.y = 0;
- _header.width = sw;
- _header.height = 25;
- _header.dispatchEvent(new Event("layoutNeeded"));
+ var dgButtonBar:ButtonBar = header as ButtonBar;
+ dgButtonBar.buttonWidths = buttonWidths;
+ dgButtonBar.widthType = ButtonBarModel.PERCENT_WIDTHS;
+ dgButtonBar.dispatchEvent(new Event("layoutNeeded"));
return true;
}
-
- /**
- * @private
- */
- private function handleSizeChanges(event:Event):void
- {
- var view:DataGridView = UIBase(_strand).view as DataGridView;
- if (view == null) return;
-
- columns = view.columnLists;
-
- layout();
- }
}
}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/TreeGridLayout.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/TreeGridLayout.as
index b7f2b3b..5a56813 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/TreeGridLayout.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/TreeGridLayout.as
@@ -24,12 +24,14 @@ package org.apache.royale.html.beads.layouts
import org.apache.royale.core.UIBase;
import org.apache.royale.events.Event;
import org.apache.royale.events.IEventDispatcher;
+ import org.apache.royale.geom.Rectangle;
import org.apache.royale.html.ButtonBar;
import org.apache.royale.html.beads.TreeGridView;
import org.apache.royale.html.beads.models.ButtonBarModel;
import org.apache.royale.html.beads.models.TreeGridModel;
import org.apache.royale.html.supportClasses.IDataGridColumn;
import org.apache.royale.html.supportClasses.TreeGridColumn;
+ import org.apache.royale.utils.CSSContainerUtils;
/**
* The TreeGridLayout class provides the sizing and positioning for the sub-components
@@ -111,15 +113,19 @@ package org.apache.royale.html.beads.layouts
var contentArea:UIBase = (uiHost.view as TreeGridView).listArea;
var displayedColumns:Array = (uiHost.view as TreeGridView).columnLists;
+ var borderMetrics:Rectangle = CSSContainerUtils.getBorderMetrics(_strand);
+ var useWidth:Number = uiHost.width - (borderMetrics.left + borderMetrics.right);
+ var useHeight:Number = uiHost.height - (borderMetrics.top + borderMetrics.bottom);
+
// size and position the header
- header.x = 0;
- header.y = 0;
- header.width = uiHost.width;
- header.height = 30;
+ header.x = borderMetrics.left;
+ header.y = borderMetrics.top;
+ header.width = useWidth;
+ // header's height is set in CSS
// size and position the elements that make up the content
var xpos:Number = 0;
- var defaultColumnWidth:Number = (contentArea.width) / model.columns.length;
+ var defaultColumnWidth:Number = (useWidth) / model.columns.length;
var columnWidths:Array = [];
COMPILE::JS {
@@ -129,15 +135,18 @@ package org.apache.royale.html.beads.layouts
for(var i:int=0; i < displayedColumns.length; i++) {
var columnDef:IDataGridColumn = model.columns[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.
columnList.x = xpos;
columnList.y = 0;
- if (isNaN(columnDef.columnWidth)) {
- columnList.width = defaultColumnWidth;
- } else {
- columnList.width = columnDef.columnWidth;
+
+ var columnWidth:Number = defaultColumnWidth;
+ if (!isNaN(columnDef.columnWidth)) {
+ columnWidth = (columnDef.columnWidth / uiHost.width) * useWidth;
}
- columnWidths.push(columnList.width);
+ columnList.width = columnWidth;
+ columnWidths.push(columnWidth);
xpos += columnList.width;
}
@@ -147,10 +156,10 @@ package org.apache.royale.html.beads.layouts
header.dispatchEvent(new Event("layoutNeeded"));
// size and position the contentArea
- contentArea.x = 0;
- contentArea.y = header.height;
- contentArea.width = uiHost.width;
- contentArea.height = uiHost.height - header.height;
+ contentArea.x = borderMetrics.left;
+ contentArea.y = header.height + header.y;
+ contentArea.width = useWidth;
+ contentArea.height = useHeight - header.height;
return true;
}
--
To stop receiving notification emails like this one, please contact
['"commits@royale.apache.org" <co...@royale.apache.org>'].