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 <[email protected]>
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
['"[email protected]" <[email protected]>'].