Added DataGridLinesBead to the DataGrid components.
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/e42934b6 Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/e42934b6 Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/e42934b6 Branch: refs/heads/master Commit: e42934b6d71436cce030ab98d4818bd8028c7101 Parents: 1cd233c Author: Peter Ent <[email protected]> Authored: Tue Oct 13 13:51:39 2015 -0400 Committer: Peter Ent <[email protected]> Committed: Tue Oct 13 13:51:39 2015 -0400 ---------------------------------------------------------------------- .../projects/HTML/asjs/src/HTMLASJSClasses.as | 1 + .../apache/flex/html/beads/DataGridLinesBead.as | 199 +++++++++++++++++++ frameworks/projects/HTML/basic-manifest.xml | 1 + 3 files changed, 201 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e42934b6/frameworks/projects/HTML/asjs/src/HTMLASJSClasses.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/asjs/src/HTMLASJSClasses.as b/frameworks/projects/HTML/asjs/src/HTMLASJSClasses.as index 99a837b..8478924 100644 --- a/frameworks/projects/HTML/asjs/src/HTMLASJSClasses.as +++ b/frameworks/projects/HTML/asjs/src/HTMLASJSClasses.as @@ -28,6 +28,7 @@ package internal class HTMLASJSClasses { import org.apache.flex.html.beads.DataGridColumnView; DataGridColumnView; + import org.apache.flex.html.beads.DataGridLinesBead; DataGridLinesBead; import org.apache.flex.html.beads.DataGridView; DataGridView; import org.apache.flex.html.beads.DataProviderChangeNotifier; DataProviderChangeNotifier; import org.apache.flex.html.beads.DataItemRendererFactoryForArrayList; DataItemRendererFactoryForArrayList; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e42934b6/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataGridLinesBead.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataGridLinesBead.as b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataGridLinesBead.as new file mode 100644 index 0000000..b4e5b1d --- /dev/null +++ b/frameworks/projects/HTML/asjs/src/org/apache/flex/html/beads/DataGridLinesBead.as @@ -0,0 +1,199 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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 +{ + import org.apache.flex.collections.ArrayList; + import org.apache.flex.core.IBead; + import org.apache.flex.core.IBeadModel; + import org.apache.flex.core.IDataGridModel; + import org.apache.flex.core.ILayoutHost; + import org.apache.flex.core.IParentIUIBase; + import org.apache.flex.core.IStrand; + import org.apache.flex.core.UIBase; + import org.apache.flex.core.graphics.GraphicsContainer; + import org.apache.flex.core.graphics.IStroke; + import org.apache.flex.core.graphics.SolidColor; + import org.apache.flex.core.graphics.SolidColorStroke; + import org.apache.flex.events.Event; + import org.apache.flex.events.IEventDispatcher; + import org.apache.flex.html.beads.models.DataGridPresentationModel; + import org.apache.flex.html.supportClasses.DataGridColumn; + + /** + * The DataGridLinesBead is an add on bead for the DataGrid. This bead + * adds horizontal and vertical grid lines to a DataGrid. The size and + * color of the lines is specified by the stroke property (defaults to + * a thin dark line). + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class DataGridLinesBead implements IBead + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function DataGridLinesBead() + { + // Set default separator line stroke. + var lineStroke:SolidColorStroke = new SolidColorStroke(); + lineStroke.color = 0x333333; + lineStroke.alpha = 1.0; + lineStroke.weight = 1; + stroke = lineStroke; + } + + private var _strand:IStrand; + + /** + * @copy org.apache.flex.core.UIBase#strand + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function set strand(value:IStrand):void + { + _strand = value; + + _overlay = new GraphicsContainer(); + + IEventDispatcher(_strand).addEventListener("beadsAdded", handleBeadsAdded); + } + + private var _stroke:IStroke; + + /** + * Describes the line style used to separate the rows and columns. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get stroke():IStroke + { + return _stroke; + } + public function set stroke(value:IStroke):void + { + _stroke = value; + } + + private var _overlay:GraphicsContainer; + private var _area:UIBase; + + /** + * Invoked when all of the beads have been added to the DataGrid. This + * function seeks the Container that parents the lists that are the DataGrid's + * columns. An overlay GraphicContainer is added to this Container so that the + * grid lines will scroll with the rows. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + private function handleBeadsAdded(event:Event):void + { + var host:UIBase = _strand as UIBase; + var n:int = host.numElements; + for (var i:int=0; i < n; i++) { + var child:UIBase = host.getElementAt(i) as UIBase; + if (child.id == "dataGridListArea") { + _area = child; + _area.addElement(_overlay); + break; + } + } + + // Now set up listeners to handle changes in the size of the DataGrid. + IEventDispatcher(_strand).addEventListener("sizeChanged", drawLines); + IEventDispatcher(_strand).addEventListener("widthChanged", drawLines); + IEventDispatcher(_strand).addEventListener("heightChanged", drawLines); + + // Also set up a listener on the model to know when the dataProvider has + // changed which might affect the number of rows/columns and thus the + // grid lines. + var model:IBeadModel = _strand.getBeadByType(IBeadModel) as IBeadModel; + IEventDispatcher(model).addEventListener("dataProviderChanged", drawLines); + } + + /** + * This event handler is invoked whenever something happens to the DataGrid. This + * function draws the lines either using a default stroke or the one specified by + * the stroke property. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + private function drawLines(event:Event):void + { + var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel; + var presentationModel:DataGridPresentationModel = _strand.getBeadByType(DataGridPresentationModel) as DataGridPresentationModel; + var layoutParent:ILayoutHost = _area.getBeadByType(ILayoutHost) as ILayoutHost; + var contentView:IParentIUIBase = layoutParent.contentView as IParentIUIBase; + + var columns:Array = sharedModel.columns; + var arrayList:ArrayList = sharedModel.dataProvider as ArrayList; + var rowHeight:Number = presentationModel.rowHeight; + + var totalHeight:Number = arrayList.length * rowHeight; + var columnWidth:Number = _area.width / columns.length; + + // translate the stroke to a fill since rectangles are used for the grid + // lines and not lines. + var lineFill:SolidColor = new SolidColor(); + var weight:Number = 1; + lineFill.color = (stroke as SolidColorStroke).color; + lineFill.alpha = (stroke as SolidColorStroke).alpha; + weight = (stroke as SolidColorStroke).weight; + _overlay.fill = lineFill; + + columnWidth = (columns[0] as DataGridColumn).columnWidth; + var xpos:Number = isNaN(columnWidth) ? _area.width / columns.length : columnWidth; + + _overlay.removeAllElements(); + + // draw the verticals + for (var i:int=1; i < columns.length; i++) { + _overlay.drawRect(xpos, 0, weight, totalHeight); + columnWidth = (columns[i] as DataGridColumn).columnWidth; + xpos += isNaN(columnWidth) ? _area.width / columns.length : columnWidth; + } + + var n:int = arrayList.length; + + // draw the horizontals + for (i=1; i < n+1; i++) { + _overlay.drawRect(0, i*rowHeight, _area.width, weight); + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/e42934b6/frameworks/projects/HTML/basic-manifest.xml ---------------------------------------------------------------------- diff --git a/frameworks/projects/HTML/basic-manifest.xml b/frameworks/projects/HTML/basic-manifest.xml index 921c67b..77ddd5e 100644 --- a/frameworks/projects/HTML/basic-manifest.xml +++ b/frameworks/projects/HTML/basic-manifest.xml @@ -82,6 +82,7 @@ <component id="DataGrid" class="org.apache.flex.html.DataGrid"/> <component id="DataProviderChangeNotifier" class="org.apache.flex.html.beads.DataProviderChangeNotifier"/> <component id="DataGridColumn" class="org.apache.flex.html.supportClasses.DataGridColumn"/> + <component id="DataGridLinesBead" class="org.apache.flex.html.beads.DataGridLinesBead"/> <component id="DateChooser" class="org.apache.flex.html.DateChooser"/> <component id="DateField" class="org.apache.flex.html.DateField"/>
