Added new Table component and pieces.

Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/8a00b50e
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/8a00b50e
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/8a00b50e

Branch: refs/heads/dual
Commit: 8a00b50ecabe11c94a878d1f38dedcc37899ac2c
Parents: 5ab55c2
Author: Peter Ent <p...@apache.org>
Authored: Fri Apr 21 15:15:47 2017 -0400
Committer: Peter Ent <p...@apache.org>
Committed: Fri Apr 21 15:15:47 2017 -0400

----------------------------------------------------------------------
 .../projects/HTML/src/main/flex/HTMLClasses.as  |   9 +
 .../src/main/flex/org/apache/flex/html/Table.as |  67 ++++++
 .../main/flex/org/apache/flex/html/TableCell.as |  68 ++++++
 .../flex/org/apache/flex/html/TableHeader.as    |  67 ++++++
 .../main/flex/org/apache/flex/html/TableRow.as  |  69 ++++++
 .../org/apache/flex/html/beads/TableCellView.as |  54 +++++
 .../html/beads/layouts/SimpleTableLayout.as     | 213 +++++++++++++++++++
 .../flex/html/beads/layouts/TableCellLayout.as  | 120 +++++++++++
 .../html/beads/layouts/TableHeaderLayout.as     | 124 +++++++++++
 .../HTML/src/main/resources/basic-manifest.xml  |   5 +
 .../HTML/src/main/resources/defaults.css        |  34 +++
 11 files changed, 830 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/8a00b50e/frameworks/projects/HTML/src/main/flex/HTMLClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/HTMLClasses.as 
b/frameworks/projects/HTML/src/main/flex/HTMLClasses.as
index 1b7441d..38fae24 100644
--- a/frameworks/projects/HTML/src/main/flex/HTMLClasses.as
+++ b/frameworks/projects/HTML/src/main/flex/HTMLClasses.as
@@ -222,6 +222,15 @@ internal class HTMLClasses
        }
        
        import org.apache.flex.html.SubAppLoader; SubAppLoader;
+       
+       import org.apache.flex.html.Table; Table;
+       import org.apache.flex.html.TableRow; TableRow;
+       import org.apache.flex.html.TableCell; TableCell;
+       import org.apache.flex.html.TableHeader; TableHeader;
+       import org.apache.flex.html.beads.TableCellView; TableCellView;
+       import org.apache.flex.html.beads.layouts.SimpleTableLayout; 
SimpleTableLayout;
+       import org.apache.flex.html.beads.layouts.TableCellLayout; 
TableCellLayout;
+       import org.apache.flex.html.beads.layouts.TableHeaderLayout; 
TableHeaderLayout;
 }
 
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/8a00b50e/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Table.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Table.as 
b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Table.as
new file mode 100644
index 0000000..2a572d4
--- /dev/null
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Table.as
@@ -0,0 +1,67 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 org.apache.flex.html
+{
+    COMPILE::JS
+    {
+        import org.apache.flex.core.WrappedHTMLElement;            
+    }
+
+       /**
+        *  The Table class represents an HTML <table> element
+     *  
+        *  
+     *  @toplevel
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class Table extends Group
+       {
+               /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function Table()
+               {
+                       super();
+                       
+                       className = "Table";
+               }
+
+        /**
+         * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement
+         */
+        COMPILE::JS
+        override protected function createElement():WrappedHTMLElement
+        {
+                       element = document.createElement('table') as 
WrappedHTMLElement;
+
+            positioner = element;
+            element.flexjs_wrapper = this;
+            
+            return element;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/8a00b50e/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TableCell.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TableCell.as 
b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TableCell.as
new file mode 100644
index 0000000..863eeb7
--- /dev/null
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TableCell.as
@@ -0,0 +1,68 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 org.apache.flex.html
+{
+    COMPILE::JS
+    {
+        import org.apache.flex.core.WrappedHTMLElement;            
+    }
+       
+       /**
+        *  The TableCell class defines a table data cell in the Table 
component. This element
+        *  may have nearly any type of FlexJS component as children.
+     *  
+        *  
+     *  @toplevel
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class TableCell extends Group
+       {
+               /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function TableCell()
+               {
+                       super();
+                       
+                       className = "TableCell";
+               }
+               
+               /**
+                * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement
+                */
+               COMPILE::JS
+               override protected function createElement():WrappedHTMLElement
+               {
+                       element = document.createElement('td') as 
WrappedHTMLElement;
+                       
+                       positioner = element;
+                       element.flexjs_wrapper = this;
+                       
+                       return element;
+               }
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/8a00b50e/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TableHeader.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TableHeader.as 
b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TableHeader.as
new file mode 100644
index 0000000..9c6e043
--- /dev/null
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TableHeader.as
@@ -0,0 +1,67 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 org.apache.flex.html
+{
+    COMPILE::JS
+    {
+        import org.apache.flex.core.WrappedHTMLElement;            
+    }
+       
+       /**
+        *  The TableHeader class defines a table header cell in the Table 
component. 
+     *  
+        *  
+     *  @toplevel
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class TableHeader extends TableCell
+       {
+               /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function TableHeader()
+               {
+                       super();
+                       
+                       className = "TableHeader";
+               }
+               
+               /**
+                * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement
+                */
+               COMPILE::JS
+               override protected function createElement():WrappedHTMLElement
+               {
+                       element = document.createElement('th') as 
WrappedHTMLElement;
+                       
+                       positioner = element;
+                       element.flexjs_wrapper = this;
+                       
+                       return element;
+               }
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/8a00b50e/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TableRow.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TableRow.as 
b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TableRow.as
new file mode 100644
index 0000000..f5bc359
--- /dev/null
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/TableRow.as
@@ -0,0 +1,69 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 org.apache.flex.html
+{
+       import org.apache.flex.core.UIBase;
+       
+       COMPILE::JS
+       {
+               import org.apache.flex.core.WrappedHTMLElement;            
+       }
+       
+       /**
+        *  The TableRow class defines a row of a Table. This will translate to 
a <tr> elemement
+     *  
+        *  
+     *  @toplevel
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class TableRow extends Group
+       {
+               /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function TableRow()
+               {
+                       super();
+                       
+                       className = "TableRow";
+               }
+               
+               /**
+                * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement
+                */
+               COMPILE::JS
+               override protected function createElement():WrappedHTMLElement
+               {
+                       element = document.createElement('tr') as 
WrappedHTMLElement;
+                       
+                       positioner = element;
+                       element.flexjs_wrapper = this;
+                       
+                       return element;
+               }
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/8a00b50e/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TableCellView.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TableCellView.as
 
b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TableCellView.as
new file mode 100644
index 0000000..443b4c3
--- /dev/null
+++ 
b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/TableCellView.as
@@ -0,0 +1,54 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 org.apache.flex.html.beads
+{
+    
+       
+       /**
+        *  The TableCellView class is the view bead for TableCell. It has no 
function
+        *  on the JS platform, but with SWF, it prevents the cell from 
shrinking
+        *  to fit its content.
+        *  
+        *  @viewbead
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class TableCellView extends GroupView
+       {
+               /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function TableCellView()
+               {
+                       super();
+               }
+               
+               override public function afterLayout():void
+               {
+                       // do nothing for TableCell
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/8a00b50e/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/SimpleTableLayout.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/SimpleTableLayout.as
 
b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/SimpleTableLayout.as
new file mode 100644
index 0000000..bf8b35a
--- /dev/null
+++ 
b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/SimpleTableLayout.as
@@ -0,0 +1,213 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 org.apache.flex.html.beads.layouts
+{
+       import org.apache.flex.core.LayoutBase;
+       
+       import org.apache.flex.core.IBeadLayout;
+       import org.apache.flex.core.ILayoutView;
+       import org.apache.flex.html.TableCell;
+       import org.apache.flex.html.TableRow;
+       
+       COMPILE::SWF {
+               import org.apache.flex.geom.Rectangle;
+               import org.apache.flex.utils.CSSUtils;
+               import org.apache.flex.utils.CSSContainerUtils;
+       }
+
+    /**
+     *  The SimpleTableLayout is the layout for the Table component. On the 
SWF platform it mimics
+        *  the HTML <table> element and makes sure all the columns and rows 
are even. It does not
+        *  support column or row spanning.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+       public class SimpleTableLayout extends LayoutBase implements IBeadLayout
+       {
+        /**
+         *  Constructor.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+               public function SimpleTableLayout()
+               {
+                       super();
+               }
+
+        /**
+         * @copy org.apache.flex.core.IBeadLayout#layout
+                * @flexjsignorecoercion org.apache.flex.core.ILayoutHost
+                * @flexjsignorecoercion org.apache.flex.core.UIBase
+         */
+               override public function layout():Boolean
+               {
+            COMPILE::SWF
+            {
+                               var contentView:ILayoutView = layoutView;
+                               
+                               var n:int = contentView.numElements;
+                               if (n == 0) return false;
+
+                               var hostWidthSizedToContent:Boolean = 
host.isWidthSizedToContent();
+                               var hostHeightSizedToContent:Boolean = 
host.isHeightSizedToContent();
+                               var hostWidth:Number = hostWidthSizedToContent 
? host.width : contentView.width;
+                               var hostHeight:Number = 
hostHeightSizedToContent ? host.height : contentView.height;
+                               
+                               var paddingMetrics:Rectangle = 
CSSContainerUtils.getPaddingMetrics(host);
+                               var borderMetrics:Rectangle = 
CSSContainerUtils.getBorderMetrics(host);
+                               
+                               // adjust the host's usable size by the 
metrics. If hostSizedToContent, then the
+                               // resulting adjusted value may be less than 
zero.
+                               hostWidth -= paddingMetrics.left + 
paddingMetrics.right + borderMetrics.left + borderMetrics.right;
+                               hostHeight -= paddingMetrics.top + 
paddingMetrics.bottom + borderMetrics.top + borderMetrics.bottom;
+                               
+                               var numRows:int = n;
+                               var numCols:int = 0;
+
+                               // pass 1: figure out the number of columns 
(numRows is already given)
+                for (var i:int = 0; i < n; i++)
+                {
+                    var row:TableRow = contentView.getElementAt(i) as TableRow;
+                                       if (row == null || !row.visible) {
+                                               numRows -= 1;
+                                               continue;
+                                       }
+                                       
+                                       numCols = 
Math.max(numCols,row.numElements);
+                               }
+                               
+                               // these defaults may change once the next pass 
is complete.
+                               var defaultColWidth:Number = hostWidth / 
numCols;
+                               var defaultRowHeight:Number = hostHeight / 
numRows;
+                               
+                               var remainingWidth:Number = hostWidth;
+                               var remainingHeight:Number = hostHeight;
+                               
+                               var colWidths:Array = new Array(numCols);
+                               var colActuals:Array = new Array(numCols);
+                               for(j=0; j < numCols; j++) { colWidths[j] = 0; 
colActuals[j] = 0; }
+                               
+                               var rowHeights:Array = new Array(numRows);
+                               for(i=0; i < numRows; i++) rowHeights[i] = 0;
+                               
+                               // pass2: figure out the sizes things should be
+                               for(i=0; i < n; i++)
+                               {
+                                       row = contentView.getElementAt(i) as 
TableRow;
+                                       if (row == null || !row.visible) 
continue;
+                                       
+                                       for(var j:int=0; j < row.numElements; 
j++)
+                                       {
+                                               var cell:TableCell = 
row.getElementAt(j) as TableCell;
+                                               if (cell == null || 
!cell.visible) continue;
+                                               
+                                               if 
(cell.isWidthSizedToContent()) {
+                                                       colWidths[j] = 
Math.max(colWidths[j],0);
+                                                       colActuals[j] = 
Math.max(colActuals[j],cell.width);
+                                               } else {
+                                                       if 
(isNaN(cell.percentWidth)) {
+                                                               colWidths[j] = 
Math.max(colWidths[j],cell.width);
+                                                       } else {
+                                                               colWidths[j] = 
Math.max(colWidths[j],(hostWidth*cell.percentWidth/100.0));
+                                                       }
+                                                       colActuals[j] = 
Math.max(colActuals[j],colWidths[j]);
+                                               }
+                                               
+                                               if 
(cell.isHeightSizedToContent()) {
+                                                       rowHeights[i] = 
Math.max(rowHeights[i],0);
+                                               } else {
+                                                       if 
(isNaN(cell.percentHeight)) {
+                                                               rowHeights[i] = 
Math.max(rowHeights[i],cell.height);
+                                                       } else {
+                                                               rowHeights[i] = 
Math.max(rowHeights[i],(hostHeight*cell.percentHeight/100.0));
+                                                       }
+                                               }
+                                       }
+                }
+                               
+                               var needsDefaultColWidthCount:int = 0;
+                               var needsDefaultRowHeightCount:int = 0;
+                               
+                               // pass3: determine default sizes for cells 
without size
+                               for(i=0; i < rowHeights.length; i++) {
+                                       if (!isNaN(rowHeights[i]) && 
rowHeights[i] > 0) remainingHeight -= rowHeights[i];
+                                       else needsDefaultRowHeightCount++;
+                               }
+                               for(j=0; j < colWidths.length; j++) {
+                                       if (colWidths[j] == 0) {
+                                               if (colActuals[j] > 
defaultColWidth) {
+                                                       colWidths[j] = 
colActuals[j];
+                                                       remainingWidth -= 
colActuals[j];
+                                               }
+                                               else {
+                                                       
needsDefaultColWidthCount++;
+                                               }
+                                       } else {
+                                               remainingWidth -= colWidths[j];
+                                       }
+                               }
+                               
+                               defaultColWidth = remainingWidth / 
needsDefaultColWidthCount;
+                               defaultRowHeight = remainingHeight / 
needsDefaultRowHeightCount;
+                               
+                               var ypos:Number = paddingMetrics.top + 
borderMetrics.top;
+                               
+                               // pass4: size everything
+                               for(i=0; i < n; i++)
+                               {
+                                       row = contentView.getElementAt(i) as 
TableRow;
+                                       if (row == null || !row.visible) 
continue;
+                                       
+                                       var xpos:Number = paddingMetrics.left + 
borderMetrics.left;
+                                       
+                                       for(j=0; j < row.numElements; j++)
+                                       {
+                                               cell = row.getElementAt(j) as 
TableCell;
+                                               if (cell == null || 
!cell.visible) continue;
+                                               
+                                               var useWidth:Number = 
colWidths[j] > 0 ? colWidths[j] : defaultColWidth;
+                                               var useHeight:Number = 
rowHeights[i] > 0 ? rowHeights[i] : defaultRowHeight;
+                                               
+                                               cell.x = xpos;
+                                               cell.y = ypos;
+                                               
cell.setWidthAndHeight(useWidth, useHeight);
+                                               
+                                               xpos += useWidth;
+                                       }
+                                       
+                                       ypos += rowHeights[i] > 0 ? 
rowHeights[i] : defaultRowHeight;
+                               }
+
+                return true;
+
+            }
+
+            COMPILE::JS
+            {
+                return true;
+            }
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/8a00b50e/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TableCellLayout.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TableCellLayout.as
 
b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TableCellLayout.as
new file mode 100644
index 0000000..0dd9dc4
--- /dev/null
+++ 
b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TableCellLayout.as
@@ -0,0 +1,120 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 org.apache.flex.html.beads.layouts
+{
+       import org.apache.flex.core.LayoutBase;
+       
+       import org.apache.flex.core.IBeadLayout;
+       import org.apache.flex.core.ILayoutChild;
+       import org.apache.flex.core.ILayoutView;
+       import org.apache.flex.html.TableCell;
+       import org.apache.flex.html.TableRow;
+       
+       COMPILE::SWF {
+               import org.apache.flex.geom.Rectangle;
+               import org.apache.flex.utils.CSSUtils;
+               import org.apache.flex.utils.CSSContainerUtils;
+       }
+
+    /**
+     *  The TableCellLayout is the default layout for TableCell items. It 
places the cell's contents
+        *  vertically centered within the cell.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+       public class TableCellLayout extends HorizontalLayout implements 
IBeadLayout
+       {
+        /**
+         *  Constructor.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+               public function TableCellLayout()
+               {
+                       super();
+               }
+
+        /**
+         * @copy org.apache.flex.core.IBeadLayout#layout
+                * @flexjsignorecoercion org.apache.flex.core.ILayoutHost
+                * @flexjsignorecoercion org.apache.flex.core.UIBase
+         */
+               override public function layout():Boolean
+               {
+            COMPILE::SWF
+            {
+                               if (!super.layout()) return false;
+                               
+                               var contentView:ILayoutView = layoutView;
+                               var n:int = contentView.numElements;
+                               if (n == 0) return false;
+                               
+                               // find the overall size and position in the 
centervar contentView:ILayoutView = layoutView;
+                               
+                               var hostWidthSizedToContent:Boolean = 
host.isWidthSizedToContent();
+                               var hostHeightSizedToContent:Boolean = 
host.isHeightSizedToContent();
+                               var hostWidth:Number = hostWidthSizedToContent 
? host.width : contentView.width;
+                               var hostHeight:Number = 
hostHeightSizedToContent ? host.height : contentView.height;
+                               
+                               var paddingMetrics:Rectangle = 
CSSContainerUtils.getPaddingMetrics(host);
+                               var borderMetrics:Rectangle = 
CSSContainerUtils.getBorderMetrics(host);
+                               
+                               // adjust the host's usable size by the 
metrics. If hostSizedToContent, then the
+                               // resulting adjusted value may be less than 
zero.
+                               hostWidth -= paddingMetrics.left + 
paddingMetrics.right + borderMetrics.left + borderMetrics.right;
+                               hostHeight -= paddingMetrics.top + 
paddingMetrics.bottom + borderMetrics.top + borderMetrics.bottom;
+                               
+                               var totalHeight:Number = 0;
+                               
+                               for(var i:int=0; i < n; i++)
+                               {
+                                       var child:ILayoutChild = 
contentView.getElementAt(i) as ILayoutChild;
+                                       if (child == null || !child.visible) 
continue;
+                                       var positions:Object = 
childPositions(child);
+                                       var margins:Object = 
childMargins(child, hostWidth, hostHeight);
+                                       
+                                       totalHeight += margins.top + 
child.height + margins.bottom;
+                               }
+                               
+                               var shiftBy:Number = (hostHeight - 
totalHeight)/2;
+                               
+                               for(i=0; i < n; i++)
+                               {
+                                       child = contentView.getElementAt(i) as 
ILayoutChild;
+                                       if (child == null || !child.visible) 
continue;
+                                       child.y += shiftBy;
+                               }
+
+                return true;
+
+            }
+
+            COMPILE::JS
+            {
+                return true;
+            }
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/8a00b50e/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TableHeaderLayout.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TableHeaderLayout.as
 
b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TableHeaderLayout.as
new file mode 100644
index 0000000..a955c83
--- /dev/null
+++ 
b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/layouts/TableHeaderLayout.as
@@ -0,0 +1,124 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 org.apache.flex.html.beads.layouts
+{
+       import org.apache.flex.core.LayoutBase;
+       
+       import org.apache.flex.core.IBeadLayout;
+       import org.apache.flex.core.ILayoutChild;
+       import org.apache.flex.core.ILayoutView;
+       import org.apache.flex.html.TableCell;
+       import org.apache.flex.html.TableRow;
+       
+       COMPILE::SWF {
+               import org.apache.flex.geom.Rectangle;
+               import org.apache.flex.utils.CSSUtils;
+               import org.apache.flex.utils.CSSContainerUtils;
+       }
+
+    /**
+     *  The TableHeaderLayout is the default layout for TableHeader items. It 
places the cell's contents
+        *  vertically and horizontally centered within the cell.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+       public class TableHeaderLayout extends HorizontalLayout implements 
IBeadLayout
+       {
+        /**
+         *  Constructor.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+               public function TableHeaderLayout()
+               {
+                       super();
+               }
+
+        /**
+         * @copy org.apache.flex.core.IBeadLayout#layout
+                * @flexjsignorecoercion org.apache.flex.core.ILayoutHost
+                * @flexjsignorecoercion org.apache.flex.core.UIBase
+         */
+               override public function layout():Boolean
+               {
+            COMPILE::SWF
+            {
+                               if (!super.layout()) return false;
+                               
+                               var contentView:ILayoutView = layoutView;
+                               var n:int = contentView.numElements;
+                               if (n == 0) return false;
+                               
+                               // find the overall size and position in the 
centervar contentView:ILayoutView = layoutView;
+                               
+                               var hostWidthSizedToContent:Boolean = 
host.isWidthSizedToContent();
+                               var hostHeightSizedToContent:Boolean = 
host.isHeightSizedToContent();
+                               var hostWidth:Number = hostWidthSizedToContent 
? host.width : contentView.width;
+                               var hostHeight:Number = 
hostHeightSizedToContent ? host.height : contentView.height;
+                               
+                               var paddingMetrics:Rectangle = 
CSSContainerUtils.getPaddingMetrics(host);
+                               var borderMetrics:Rectangle = 
CSSContainerUtils.getBorderMetrics(host);
+                               
+                               // adjust the host's usable size by the 
metrics. If hostSizedToContent, then the
+                               // resulting adjusted value may be less than 
zero.
+                               hostWidth -= paddingMetrics.left + 
paddingMetrics.right + borderMetrics.left + borderMetrics.right;
+                               hostHeight -= paddingMetrics.top + 
paddingMetrics.bottom + borderMetrics.top + borderMetrics.bottom;
+                               
+                               var totalHeight:Number = 0;
+                               var totalWidth:Number = 0;
+                               
+                               for(var i:int=0; i < n; i++)
+                               {
+                                       var child:ILayoutChild = 
contentView.getElementAt(i) as ILayoutChild;
+                                       if (child == null || !child.visible) 
continue;
+                                       var positions:Object = 
childPositions(child);
+                                       var margins:Object = 
childMargins(child, hostWidth, hostHeight);
+                                       
+                                       totalHeight += margins.top + 
child.height + margins.bottom;
+                                       totalWidth += margins.left + 
child.width + margins.right;
+                               }
+                               
+                               var shiftYBy:Number = (hostHeight - 
totalHeight)/2;
+                               var shiftXBy:Number = (hostWidth - 
totalWidth)/2;
+                               
+                               for(i=0; i < n; i++)
+                               {
+                                       child = contentView.getElementAt(i) as 
ILayoutChild;
+                                       if (child == null || !child.visible) 
continue;
+                                       child.x += shiftXBy;
+                                       child.y += shiftYBy;
+                               }
+
+                return true;
+
+            }
+
+            COMPILE::JS
+            {
+                return true;
+            }
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/8a00b50e/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/resources/basic-manifest.xml 
b/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
index 4778ae8..b677d55 100644
--- a/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/HTML/src/main/resources/basic-manifest.xml
@@ -174,5 +174,10 @@
 
     <component id="InnerHTML" class="org.apache.flex.html.beads.InnerHTML" />
     <component id="TextNode" class="org.apache.flex.html.TextNode" />
+    
+    <component id="Table" class="org.apache.flex.html.Table"/>
+    <component id="TableRow" class="org.apache.flex.html.TableRow"/>
+    <component id="TableCell" class="org.apache.flex.html.TableCell"/>
+    <component id="TableHeader" class="org.apache.flex.html.TableHeader"/>
 
 </componentPackage>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/8a00b50e/frameworks/projects/HTML/src/main/resources/defaults.css
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/resources/defaults.css 
b/frameworks/projects/HTML/src/main/resources/defaults.css
index ffd48e2..43f352b 100644
--- a/frameworks/projects/HTML/src/main/resources/defaults.css
+++ b/frameworks/projects/HTML/src/main/resources/defaults.css
@@ -451,6 +451,22 @@ AccordionItemRenderer
        flex-grow: 1;
 }
 
+Table
+{
+       IBeadLayout: 
ClassReference("org.apache.flex.html.beads.layouts.SimpleTableLayout");
+}
+
+TableHeader
+{
+       font-weight: bold;
+       border: 1px solid #999999;
+}
+
+TableCell
+{
+       border: 1px solid #999999;
+}
+
 TreeItemRenderer
 {
        IBeadController: 
ClassReference("org.apache.flex.html.beads.controllers.ItemRendererMouseController");
@@ -791,6 +807,24 @@ global
                IBeadController: 
ClassReference("org.apache.flex.html.beads.controllers.SpinnerMouseController");
        }
        
+       Table
+       {
+               IBorderBead: 
ClassReference("org.apache.flex.html.beads.SingleLineBorderBead");
+               IBackgroundBead: 
ClassReference("org.apache.flex.html.beads.SolidBackgroundBead");
+       }
+       
+       TableCell
+       {
+               IBeadLayout: 
ClassReference("org.apache.flex.html.beads.layouts.TableCellLayout");
+               IBeadView: 
ClassReference("org.apache.flex.html.beads.TableCellView");
+       }
+       
+       TableHeader
+       {
+               IBeadLayout: 
ClassReference("org.apache.flex.html.beads.layouts.TableHeaderLayout");
+               IBeadView: 
ClassReference("org.apache.flex.html.beads.TableCellView");
+       }
+       
        TextArea
        {
                IBeadModel: 
ClassReference("org.apache.flex.html.beads.models.TextModel");

Reply via email to