You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by pe...@apache.org on 2014/09/05 16:02:06 UTC

git commit: [flex-asjs] [refs/heads/develop] - Some refactoring: created a base class for chart layouts (ChartBaseLayout) to make drawing graphics a little easier and more consistent.

Repository: flex-asjs
Updated Branches:
  refs/heads/develop 61a9eeab1 -> 60f17d1bc


Some refactoring: created a base class for chart layouts (ChartBaseLayout) to make drawing graphics a little easier and more consistent.


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

Branch: refs/heads/develop
Commit: 60f17d1bc7bf5dac05d0c70c116176fde7276cdb
Parents: 61a9eea
Author: Peter Ent <pe...@apache.org>
Authored: Fri Sep 5 10:02:01 2014 -0400
Committer: Peter Ent <pe...@apache.org>
Committed: Fri Sep 5 10:02:01 2014 -0400

----------------------------------------------------------------------
 .../src/org/apache/flex/charts/BarChart.as      |   1 -
 .../src/org/apache/flex/charts/ColumnChart.as   |  17 +++
 .../src/org/apache/flex/charts/LineChart.as     |  17 +++
 .../src/org/apache/flex/charts/PieChart.as      |  34 ++---
 .../flex/charts/beads/layouts/BarChartLayout.as |  71 +++------
 .../charts/beads/layouts/ChartBaseLayout.as     | 146 +++++++++++++++++++
 .../charts/beads/layouts/ColumnChartLayout.as   |  69 ++-------
 .../layouts/LineChartCategoryVsLinearLayout.as  |  78 +++-------
 .../layouts/LineChartLinearVsLinearLayout.as    |  73 +++-------
 .../flex/charts/beads/layouts/PieChartLayout.as |  58 ++------
 .../beads/layouts/StackedBarChartLayout.as      |  70 +++------
 .../beads/layouts/StackedColumnChartLayout.as   |  65 ++-------
 12 files changed, 310 insertions(+), 389 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/60f17d1b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/BarChart.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/BarChart.as b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/BarChart.as
index dd705fc..4065dd3 100644
--- a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/BarChart.as
+++ b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/BarChart.as
@@ -20,7 +20,6 @@ package org.apache.flex.charts
 {
 	import org.apache.flex.charts.core.ChartBase;
 	import org.apache.flex.charts.core.IChart;
-	import org.apache.flex.events.Event;
 	
 	/**
 	 *  The BarChart class draws a multi-series graph of data using vertical

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/60f17d1b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/ColumnChart.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/ColumnChart.as b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/ColumnChart.as
index 8c266ee..c9010b8 100644
--- a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/ColumnChart.as
+++ b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/ColumnChart.as
@@ -21,8 +21,25 @@ package org.apache.flex.charts
 	import org.apache.flex.charts.core.ChartBase;
 	import org.apache.flex.charts.core.IChart;
 	
+	/**
+	 *  The ColumnChart displays a histogram chart where each series in
+	 *  in the chart is a vertical column placed side by side. 
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion FlexJS 0.0
+	 */
 	public class ColumnChart extends ChartBase implements IChart
 	{
+		/**
+		 *  constructor. 
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
 		public function ColumnChart()
 		{
 			super();

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/60f17d1b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/LineChart.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/LineChart.as b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/LineChart.as
index c30034d..27ba0a5 100644
--- a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/LineChart.as
+++ b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/LineChart.as
@@ -21,8 +21,25 @@ package org.apache.flex.charts
 	import org.apache.flex.charts.core.ChartBase;
 	import org.apache.flex.charts.core.IChart;
 	
+	/**
+	 *  The LineChart displays a series of line graphs with optional
+	 *  graphics at each vertex. 
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion FlexJS 0.0
+	 */
 	public class LineChart extends ChartBase implements IChart
 	{
+		/**
+		 *  constructor. 
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
 		public function LineChart()
 		{
 			super();

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/60f17d1b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/PieChart.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/PieChart.as b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/PieChart.as
index ad23fd0..591e2d7 100644
--- a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/PieChart.as
+++ b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/PieChart.as
@@ -18,36 +18,30 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.charts
 {
+	import org.apache.flex.charts.core.ChartBase;
 	import org.apache.flex.charts.core.IChart;
-	import org.apache.flex.events.Event;
-	import org.apache.flex.html.List;
 	
-	public class PieChart extends List implements IChart
+	/**
+	 *  The PieChart displays data as a percentage of pie. 
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion FlexJS 0.0
+	 */
+	public class PieChart extends ChartBase implements IChart
 	{
-		public function PieChart()
-		{
-			super();
-		}
-		
-		private var _series:Array;
-		
 		/**
-		 *  The collection of series for the chart. Each element of the
-		 *  series array should be of type BarChartSeries.
-		 *
+		 *  constructor. 
+		 *  
 		 *  @langversion 3.0
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion FlexJS 0.0
 		 */
-		public function get series():Array
-		{
-			return _series;
-		}
-		public function set series(value:Array):void
+		public function PieChart()
 		{
-			_series = value;
-			dispatchEvent(new Event("seriesChanged"));
+			super();
 		}
 	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/60f17d1b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/BarChartLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/BarChartLayout.as b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/BarChartLayout.as
index e6e5092..71bc274 100644
--- a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/BarChartLayout.as
+++ b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/BarChartLayout.as
@@ -19,18 +19,11 @@
 package org.apache.flex.charts.beads.layouts
 {
 	import org.apache.flex.charts.core.ICartesianChartLayout;
-	import org.apache.flex.charts.core.IChart;
 	import org.apache.flex.charts.core.IChartItemRenderer;
 	import org.apache.flex.charts.core.IChartSeries;
-	import org.apache.flex.charts.core.IHorizontalAxisBead;
-	import org.apache.flex.charts.core.IVerticalAxisBead;
 	import org.apache.flex.charts.supportClasses.BarSeries;
 	import org.apache.flex.core.IBeadLayout;
-	import org.apache.flex.core.IContentView;
-	import org.apache.flex.core.ILayoutParent;
 	import org.apache.flex.core.ISelectionModel;
-	import org.apache.flex.core.IStrand;
-	import org.apache.flex.core.UIBase;
 	import org.apache.flex.events.Event;
 	import org.apache.flex.events.IEventDispatcher;
 	
@@ -43,26 +36,8 @@ package org.apache.flex.charts.beads.layouts
 	 *  @playerversion AIR 2.6
 	 *  @productversion FlexJS 0.0
 	 */
-	public class BarChartLayout implements IBeadLayout, ICartesianChartLayout
+	public class BarChartLayout extends ChartBaseLayout implements IBeadLayout, ICartesianChartLayout
 	{
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.flex.core.IBead#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;
-			IEventDispatcher(value).addEventListener("widthChanged", changeHandler);
-			IEventDispatcher(value).addEventListener("childrenAdded", changeHandler);
-			IEventDispatcher(value).addEventListener("itemsCreated", changeHandler);
-			IEventDispatcher(value).addEventListener("layoutNeeded", changeHandler);
-		}
 		
 		private var _gap:Number = 20;
 		
@@ -88,39 +63,29 @@ package org.apache.flex.charts.beads.layouts
 		/**
 		 * @private
 		 */
-		private function changeHandler(event:Event):void
-		{
-			var layoutParent:ILayoutParent = _strand.getBeadByType(ILayoutParent) as ILayoutParent;
-			var contentView:IContentView = layoutParent.contentView as IContentView;
-			
-			var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+		override protected function performLayout():void
+		{			
+			var selectionModel:ISelectionModel = chart.getBeadByType(ISelectionModel) as ISelectionModel;
 			var dp:Array = selectionModel.dataProvider as Array;
 			if (!dp)
 				return;
 			
-			var series:Array = IChart(_strand).series;
 			var n:int = dp.length;
-			trace("There are "+series.length+" series in this chart");
-			
 			var maxXValue:Number = 0;
 			var seriesMaxes:Array = [];
 			
-			var xAxis:IHorizontalAxisBead;
-			if (_strand.getBeadByType(IHorizontalAxisBead)) xAxis = _strand.getBeadByType(IHorizontalAxisBead) as IHorizontalAxisBead;
-			var xAxisOffset:Number = xAxis == null ? 0 : xAxis.axisHeight;
-			var yAxis:IVerticalAxisBead;
-			if (_strand.getBeadByType(IVerticalAxisBead)) yAxis = _strand.getBeadByType(IVerticalAxisBead) as IVerticalAxisBead;
-			var yAxisOffset:Number = yAxis == null ? 0 : yAxis.axisWidth;
+			var xAxisOffset:Number = horizontalAxisBead == null ? 0 : horizontalAxisBead.axisHeight;
+			var yAxisOffset:Number = verticalAxisBead == null ? 0 : verticalAxisBead.axisWidth;
 			
-			var useWidth:Number = UIBase(_strand).width - yAxisOffset;
-			var useHeight:Number = ((UIBase(_strand).height-xAxisOffset) / n) - gap;
-			var seriesHeight:Number = useHeight/series.length;
+			var useWidth:Number = chart.width - yAxisOffset;
+			var useHeight:Number = ((chart.height-xAxisOffset) / n) - gap;
+			var seriesHeight:Number = useHeight/chart.series.length;
 			var xpos:Number = 0;
-			var ypos:Number = UIBase(_strand).height - xAxisOffset - seriesHeight;
+			var ypos:Number = chart.height - xAxisOffset - seriesHeight;
 			
-			for (var s:int = 0; s < series.length; s++)
+			for (var s:int = 0; s < chart.series.length; s++)
 			{
-				var bcs:BarSeries = series[s] as BarSeries;
+				var bcs:BarSeries = chart.series[s] as BarSeries;
 				seriesMaxes.push({maxValue:0,scaleFactor:0});
 				
 				for (var i:int = 0; i < n; i++)
@@ -139,12 +104,12 @@ package org.apache.flex.charts.beads.layouts
 			{
 				data = dp[i];
 				
-				for (s=0; s < series.length; s++)
+				for (s=0; s < chart.series.length; s++)
 				{
-					bcs = series[s] as BarSeries;
+					bcs = chart.series[s] as BarSeries;
 					
-					var child:IChartItemRenderer = (series[s] as IChartSeries).itemRenderer.newInstance() as IChartItemRenderer;
-					child.itemRendererParent = contentView;
+					var child:IChartItemRenderer = (chart.series[s] as IChartSeries).itemRenderer.newInstance() as IChartItemRenderer;
+					child.itemRendererParent = chartDataGroup;
 					child.data = data;
 					child.fillColor = bcs.fillColor;
 					xValue = Number(data[bcs.xField]);
@@ -155,13 +120,13 @@ package org.apache.flex.charts.beads.layouts
 					child.height = seriesHeight;
 					ypos -= seriesHeight;
 					
-					contentView.addElement(child);
+					chartDataGroup.addElement(child);
 				}
 				
 				ypos -= gap;
 			}
 			
-			IEventDispatcher(_strand).dispatchEvent(new Event("layoutComplete"));
+			IEventDispatcher(chart).dispatchEvent(new Event("layoutComplete"));
 		}
 	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/60f17d1b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/ChartBaseLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/ChartBaseLayout.as b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/ChartBaseLayout.as
new file mode 100644
index 0000000..8c5db61
--- /dev/null
+++ b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/ChartBaseLayout.as
@@ -0,0 +1,146 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.charts.beads.layouts
+{
+	import org.apache.flex.charts.ChartDataGroup;
+	import org.apache.flex.charts.core.ChartBase;
+	import org.apache.flex.charts.core.IHorizontalAxisBead;
+	import org.apache.flex.charts.core.IVerticalAxisBead;
+	import org.apache.flex.core.IBeadLayout;
+	import org.apache.flex.core.ILayoutParent;
+	import org.apache.flex.core.IStrand;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.IEventDispatcher;
+	
+	public class ChartBaseLayout implements IBeadLayout
+	{
+		public function ChartBaseLayout()
+		{
+		}
+		
+		private var _strand:IStrand;
+		
+		/**
+		 *  @copy org.apache.flex.core.IBead#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;
+			IEventDispatcher(value).addEventListener("widthChanged", changeHandler);
+			IEventDispatcher(value).addEventListener("childrenAdded", changeHandler);
+			IEventDispatcher(value).addEventListener("itemsCreated", changeHandler);
+			IEventDispatcher(value).addEventListener("layoutNeeded", changeHandler);
+		}
+		
+		/**
+		 *  Returns the strand, cast as an instance of ChartBase.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		public function get chart():ChartBase
+		{
+			return _strand as ChartBase;
+		}
+		
+		private var _xAxis:IHorizontalAxisBead = null;
+		
+		/**
+		 *  The horizontal axis bead or null if one is not present.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		public function get horizontalAxisBead():IHorizontalAxisBead
+		{
+			if (_xAxis == null) {
+				if (chart.getBeadByType(IHorizontalAxisBead)) _xAxis = chart.getBeadByType(IHorizontalAxisBead) as IHorizontalAxisBead;
+			}
+			return _xAxis;
+		}
+		
+		private var _yAxis:IVerticalAxisBead = null;
+		
+		/**
+		 *  The vertical axis bead or null if one is not present.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		public function get verticalAxisBead():IVerticalAxisBead
+		{
+			if (_yAxis == null) {
+				if (chart.getBeadByType(IVerticalAxisBead)) _yAxis = chart.getBeadByType(IVerticalAxisBead) as IVerticalAxisBead;
+			}
+			return _yAxis;
+		}
+		
+		private var _chartDataGroup:ChartDataGroup;
+		
+		/**
+		 *  Returns the object into which the chart elements are drawn or added. The ChartDataGroup implements
+		 *  IContentView.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		public function get chartDataGroup():ChartDataGroup
+		{
+			if (_chartDataGroup == null) {
+				var layoutParent:ILayoutParent = chart.getBeadByType(ILayoutParent) as ILayoutParent;
+				_chartDataGroup = layoutParent.contentView as ChartDataGroup;
+			}
+			return _chartDataGroup;
+		}
+		
+		/**
+		 * @private
+		 */
+		private function changeHandler(event:Event):void
+		{
+			performLayout();
+		}
+		
+		/**
+		 *  Subclasses should implement this to draw the chart, adding elements to the chartDataGroup.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		protected function performLayout():void
+		{
+			// implement in subclass
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/60f17d1b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/ColumnChartLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/ColumnChartLayout.as b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/ColumnChartLayout.as
index 98ef16b..9c78f0c 100644
--- a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/ColumnChartLayout.as
+++ b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/ColumnChartLayout.as
@@ -19,18 +19,10 @@
 package org.apache.flex.charts.beads.layouts
 {
 	import org.apache.flex.charts.core.ICartesianChartLayout;
-	import org.apache.flex.charts.core.IChart;
 	import org.apache.flex.charts.core.IChartItemRenderer;
-	import org.apache.flex.charts.core.IChartSeries;
-	import org.apache.flex.charts.core.IHorizontalAxisBead;
-	import org.apache.flex.charts.core.IVerticalAxisBead;
 	import org.apache.flex.charts.supportClasses.ColumnSeries;
 	import org.apache.flex.core.IBeadLayout;
-	import org.apache.flex.core.IContentView;
-	import org.apache.flex.core.ILayoutParent;
 	import org.apache.flex.core.ISelectionModel;
-	import org.apache.flex.core.IStrand;
-	import org.apache.flex.core.UIBase;
 	import org.apache.flex.events.Event;
 	import org.apache.flex.events.IEventDispatcher;
 	
@@ -43,31 +35,12 @@ package org.apache.flex.charts.beads.layouts
 	 *  @playerversion AIR 2.6
 	 *  @productversion FlexJS 0.0
 	 */
-	public class ColumnChartLayout implements IBeadLayout, ICartesianChartLayout
+	public class ColumnChartLayout extends ChartBaseLayout implements IBeadLayout, ICartesianChartLayout
 	{
 		public function ColumnChartLayout()
 		{
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.flex.core.IBead#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;
-			IEventDispatcher(value).addEventListener("widthChanged", changeHandler);
-			IEventDispatcher(value).addEventListener("childrenAdded", changeHandler);
-			IEventDispatcher(value).addEventListener("itemsCreated", changeHandler);
-			IEventDispatcher(value).addEventListener("layoutNeeded", changeHandler);
-		}
-		
 		private var _gap:Number = 20;
 		
 		/**
@@ -92,39 +65,29 @@ package org.apache.flex.charts.beads.layouts
 		/**
 		 * @private
 		 */
-		private function changeHandler(event:Event):void
+		override protected function performLayout():void
 		{
-			var layoutParent:ILayoutParent = _strand.getBeadByType(ILayoutParent) as ILayoutParent;
-			var contentView:IContentView = layoutParent.contentView as IContentView;
-			
-			var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+			var selectionModel:ISelectionModel = chart.getBeadByType(ISelectionModel) as ISelectionModel;
 			var dp:Array = selectionModel.dataProvider as Array;
 			if (!dp)
 				return;
 			
-			var series:Array = IChart(_strand).series;
-			var n:int = dp.length;
-			trace("There are "+series.length+" series in this chart");
-			
-			var xAxis:IHorizontalAxisBead;
-			if (_strand.getBeadByType(IHorizontalAxisBead)) xAxis = _strand.getBeadByType(IHorizontalAxisBead) as IHorizontalAxisBead;
-			var xAxisOffset:Number = xAxis == null ? 0 : xAxis.axisHeight;
-			var yAxis:IVerticalAxisBead;
-			if (_strand.getBeadByType(IVerticalAxisBead)) yAxis = _strand.getBeadByType(IVerticalAxisBead) as IVerticalAxisBead;
-			var yAxisOffset:Number = yAxis == null ? 0 : yAxis.axisWidth;
+			var n:int = dp.length;			
+			var xAxisOffset:Number = horizontalAxisBead == null ? 0 : horizontalAxisBead.axisHeight;
+			var yAxisOffset:Number = verticalAxisBead == null ? 0 : verticalAxisBead.axisWidth;
 			
 			var xpos:Number = yAxisOffset;
-			var useWidth:Number = UIBase(_strand).width-yAxisOffset;;
-			var useHeight:Number = UIBase(_strand).height - xAxisOffset;
+			var useWidth:Number = chart.width-yAxisOffset;;
+			var useHeight:Number = chart.height - xAxisOffset;
 			var itemWidth:Number =  (useWidth - gap*(dp.length-1))/dp.length;
-			var seriesWidth:Number = itemWidth/series.length;
+			var seriesWidth:Number = itemWidth/chart.series.length;
 			
 			var maxYValue:Number = 0;
 			var seriesMaxes:Array = [];
 			
-			for (var s:int = 0; s < series.length; s++)
+			for (var s:int = 0; s < chart.series.length; s++)
 			{
-				var bcs:ColumnSeries = series[s] as ColumnSeries;
+				var bcs:ColumnSeries = chart.series[s] as ColumnSeries;
 				seriesMaxes.push({maxValue:0,scaleFactor:0});
 				
 				for (var i:int = 0; i < n; i++)
@@ -143,12 +106,12 @@ package org.apache.flex.charts.beads.layouts
 			{
 				data = dp[i];
 				
-				for (s=0; s < series.length; s++)
+				for (s=0; s < chart.series.length; s++)
 				{
-					bcs = series[s] as ColumnSeries;
+					bcs = chart.series[s] as ColumnSeries;
 					
 					var child:IChartItemRenderer = bcs.itemRenderer.newInstance() as IChartItemRenderer;
-					child.itemRendererParent = contentView;
+					child.itemRendererParent = chartDataGroup;
 					child.data = data;
 					child.fillColor = bcs.fillColor;
 					yValue = Number(data[bcs.yField]);
@@ -159,13 +122,13 @@ package org.apache.flex.charts.beads.layouts
 					child.height = yValue*seriesMaxes[s].scaleFactor;
 					xpos += seriesWidth;
 					
-					contentView.addElement(child);
+					chartDataGroup.addElement(child);
 				}
 				
 				xpos += gap;
 			}
 			
-			IEventDispatcher(_strand).dispatchEvent(new Event("layoutComplete"));
+			IEventDispatcher(chart).dispatchEvent(new Event("layoutComplete"));
 		}
 	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/60f17d1b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/LineChartCategoryVsLinearLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/LineChartCategoryVsLinearLayout.as b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/LineChartCategoryVsLinearLayout.as
index 941e31d..07d4d8e 100644
--- a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/LineChartCategoryVsLinearLayout.as
+++ b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/LineChartCategoryVsLinearLayout.as
@@ -18,23 +18,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.charts.beads.layouts
 {
-	import org.apache.flex.charts.beads.ChartItemRendererFactory;
 	import org.apache.flex.charts.core.ICartesianChartLayout;
-	import org.apache.flex.charts.core.IChart;
 	import org.apache.flex.charts.core.IChartItemRenderer;
 	import org.apache.flex.charts.core.IChartSeries;
-	import org.apache.flex.charts.core.IConnectedItemRenderer;
-	import org.apache.flex.charts.core.IHorizontalAxisBead;
-	import org.apache.flex.charts.core.IVerticalAxisBead;
 	import org.apache.flex.charts.supportClasses.LineSegmentItemRenderer;
 	import org.apache.flex.charts.supportClasses.LineSeries;
 	import org.apache.flex.core.IBeadLayout;
-	import org.apache.flex.core.IContentView;
-	import org.apache.flex.core.IDataProviderItemRendererMapper;
-	import org.apache.flex.core.ILayoutParent;
 	import org.apache.flex.core.ISelectionModel;
-	import org.apache.flex.core.IStrand;
-	import org.apache.flex.core.UIBase;
 	import org.apache.flex.events.Event;
 	import org.apache.flex.events.IEventDispatcher;
 	
@@ -47,67 +37,37 @@ package org.apache.flex.charts.beads.layouts
 	 *  @playerversion AIR 2.6
 	 *  @productversion FlexJS 0.0
 	 */
-	public class LineChartCategoryVsLinearLayout implements IBeadLayout, ICartesianChartLayout
+	public class LineChartCategoryVsLinearLayout extends ChartBaseLayout implements IBeadLayout, ICartesianChartLayout
 	{
 		public function LineChartCategoryVsLinearLayout()
 		{
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.flex.core.IBead#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;
-			IEventDispatcher(value).addEventListener("widthChanged", changeHandler);
-			IEventDispatcher(value).addEventListener("childrenAdded", changeHandler);
-			IEventDispatcher(value).addEventListener("itemsCreated", changeHandler);
-			IEventDispatcher(value).addEventListener("layoutNeeded", changeHandler);
-		}
-		
 		/**
 		 * @private
 		 */
-		private function changeHandler(event:Event):void
-		{
-			var layoutParent:ILayoutParent = _strand.getBeadByType(ILayoutParent) as ILayoutParent;
-			var contentView:IContentView = layoutParent.contentView as IContentView;
-			contentView.removeAllElements();
-			
-			var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+		override protected function performLayout():void
+		{			
+			var selectionModel:ISelectionModel = chart.getBeadByType(ISelectionModel) as ISelectionModel;
 			var dp:Array = selectionModel.dataProvider as Array;
 			if (!dp)
 				return;
 			
-			var series:Array = IChart(_strand).series;
 			var n:int = dp.length;
-			trace("There are "+series.length+" series in this chart");
-			
-			var xAxis:IHorizontalAxisBead;
-			if (_strand.getBeadByType(IHorizontalAxisBead)) xAxis = _strand.getBeadByType(IHorizontalAxisBead) as IHorizontalAxisBead;
-			var xAxisOffset:Number = xAxis == null ? 0 : xAxis.axisHeight;
-			var yAxis:IVerticalAxisBead;
-			if (_strand.getBeadByType(IVerticalAxisBead)) yAxis = _strand.getBeadByType(IVerticalAxisBead) as IVerticalAxisBead;
-			var yAxisOffset:Number = yAxis == null ? 0 : yAxis.axisWidth;
+			var xAxisOffset:Number = horizontalAxisBead == null ? 0 : horizontalAxisBead.axisHeight;
+			var yAxisOffset:Number = verticalAxisBead == null ? 0 : verticalAxisBead.axisWidth;
 			
 			var xpos:Number = yAxisOffset;
-			var useWidth:Number = UIBase(_strand).width-yAxisOffset;;
-			var useHeight:Number = UIBase(_strand).height - xAxisOffset;
+			var useWidth:Number = chart.width-yAxisOffset;;
+			var useHeight:Number = chart.height - xAxisOffset;
 			var itemWidth:Number =  useWidth/dp.length;
 			
 			var maxYValue:Number = 0;
 			var seriesMaxes:Array = [];
 			
-			for (var s:int = 0; s < series.length; s++)
+			for (var s:int = 0; s < chart.series.length; s++)
 			{
-				var aseries:IChartSeries = series[s] as IChartSeries;
+				var aseries:IChartSeries = chart.series[s] as IChartSeries;
 				seriesMaxes.push({maxValue:0,scaleFactor:0,points:[]});
 				
 				for (var i:int = 0; i < n; i++)
@@ -125,9 +85,9 @@ package org.apache.flex.charts.beads.layouts
 			// draw the itemRenderers at each vertex and build the points array for the
 			// line segment.
 			
-			for (s=0; s < series.length; s++)
+			for (s=0; s < chart.series.length; s++)
 			{
-				aseries = series[s] as IChartSeries;
+				aseries = chart.series[s] as IChartSeries;
 				
 				xpos = yAxisOffset + itemWidth/2;
 				
@@ -143,14 +103,14 @@ package org.apache.flex.charts.beads.layouts
 					
 					if (aseries.itemRenderer) {
 						var child:IChartItemRenderer = aseries.itemRenderer.newInstance() as IChartItemRenderer;
-						child.itemRendererParent = contentView;
+						child.itemRendererParent = chartDataGroup;
 						child.data = data;
 						child.fillColor = aseries.fillColor;
 						child.x = childX - 5;
 						child.y = childY - 5;
 						child.width = 10;
 						child.height = 10;
-						contentView.addElement(child);
+						chartDataGroup.addElement(child);
 					}
 					
 					xpos += itemWidth;
@@ -159,9 +119,9 @@ package org.apache.flex.charts.beads.layouts
 			
 			// draw the line segment
 			
-			for (s=0; s < series.length; s++)
+			for (s=0; s < chart.series.length; s++)
 			{
-				var lcs:LineSeries = series[s] as LineSeries;
+				var lcs:LineSeries = chart.series[s] as LineSeries;
 				
 				if (lcs.lineSegmentRenderer)
 				{
@@ -170,12 +130,12 @@ package org.apache.flex.charts.beads.layouts
 					renderer.lineThickness = lcs.lineThickness;
 					renderer.data = lcs;
 					renderer.points = seriesMaxes[s].points;
-					renderer.itemRendererParent = contentView;
-					contentView.addElement(renderer);
+					renderer.itemRendererParent = chartDataGroup;
+					chartDataGroup.addElement(renderer);
 				}
 			}
 			
-			IEventDispatcher(_strand).dispatchEvent(new Event("layoutComplete"));
+			IEventDispatcher(chart).dispatchEvent(new Event("layoutComplete"));
 		}
 	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/60f17d1b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/LineChartLinearVsLinearLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/LineChartLinearVsLinearLayout.as b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/LineChartLinearVsLinearLayout.as
index 44bf7a0..73226d6 100644
--- a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/LineChartLinearVsLinearLayout.as
+++ b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/LineChartLinearVsLinearLayout.as
@@ -19,19 +19,12 @@
 package org.apache.flex.charts.beads.layouts
 {
 	import org.apache.flex.charts.core.ICartesianChartLayout;
-	import org.apache.flex.charts.core.IChart;
 	import org.apache.flex.charts.core.IChartItemRenderer;
 	import org.apache.flex.charts.core.IChartSeries;
-	import org.apache.flex.charts.core.IHorizontalAxisBead;
-	import org.apache.flex.charts.core.IVerticalAxisBead;
 	import org.apache.flex.charts.supportClasses.LineSegmentItemRenderer;
 	import org.apache.flex.charts.supportClasses.LineSeries;
 	import org.apache.flex.core.IBeadLayout;
-	import org.apache.flex.core.IContentView;
-	import org.apache.flex.core.ILayoutParent;
 	import org.apache.flex.core.ISelectionModel;
-	import org.apache.flex.core.IStrand;
-	import org.apache.flex.core.UIBase;
 	import org.apache.flex.events.Event;
 	import org.apache.flex.events.IEventDispatcher;
 	
@@ -44,67 +37,37 @@ package org.apache.flex.charts.beads.layouts
 	 *  @playerversion AIR 2.6
 	 *  @productversion FlexJS 0.0
 	 */
-	public class LineChartLinearVsLinearLayout implements IBeadLayout, ICartesianChartLayout
+	public class LineChartLinearVsLinearLayout extends ChartBaseLayout implements IBeadLayout, ICartesianChartLayout
 	{
 		public function LineChartLinearVsLinearLayout()
 		{
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.flex.core.IBead#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;
-			IEventDispatcher(value).addEventListener("widthChanged", changeHandler);
-			IEventDispatcher(value).addEventListener("childrenAdded", changeHandler);
-			IEventDispatcher(value).addEventListener("itemsCreated", changeHandler);
-			IEventDispatcher(value).addEventListener("layoutNeeded", changeHandler);
-		}
-		
 		/**
 		 * @private
 		 */
-		private function changeHandler(event:Event):void
+		override protected function performLayout():void
 		{
-			var layoutParent:ILayoutParent = _strand.getBeadByType(ILayoutParent) as ILayoutParent;
-			var contentView:IContentView = layoutParent.contentView as IContentView;
-			contentView.removeAllElements();
-			
-			var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+			var selectionModel:ISelectionModel = chart.getBeadByType(ISelectionModel) as ISelectionModel;
 			var dp:Array = selectionModel.dataProvider as Array;
 			if (!dp)
 				return;
 			
-			var series:Array = IChart(_strand).series;
 			var n:int = dp.length;
-			trace("There are "+series.length+" series in this chart");
-			
-			var xAxis:IHorizontalAxisBead;
-			if (_strand.getBeadByType(IHorizontalAxisBead)) xAxis = _strand.getBeadByType(IHorizontalAxisBead) as IHorizontalAxisBead;
-			var xAxisOffset:Number = xAxis == null ? 0 : xAxis.axisHeight;
-			var yAxis:IVerticalAxisBead;
-			if (_strand.getBeadByType(IVerticalAxisBead)) yAxis = _strand.getBeadByType(IVerticalAxisBead) as IVerticalAxisBead;
-			var yAxisOffset:Number = yAxis == null ? 0 : yAxis.axisWidth;
+			var xAxisOffset:Number = horizontalAxisBead == null ? 0 : horizontalAxisBead.axisHeight;
+			var yAxisOffset:Number = verticalAxisBead == null ? 0 : verticalAxisBead.axisWidth;
 			
 			var xpos:Number = yAxisOffset;
 			var ypos:Number = xAxisOffset;
-			var useWidth:Number = UIBase(_strand).width - yAxisOffset;;
-			var useHeight:Number = UIBase(_strand).height - xAxisOffset;
+			var useWidth:Number = chart.width - yAxisOffset;;
+			var useHeight:Number = chart.height - xAxisOffset;
 			var itemWidth:Number =  useWidth/dp.length;
 			
 			var seriesMaxes:Array = [];
 			
-			for (var s:int = 0; s < series.length; s++)
+			for (var s:int = 0; s < chart.series.length; s++)
 			{
-				var aseries:IChartSeries = series[s] as IChartSeries;
+				var aseries:IChartSeries = chart.series[s] as IChartSeries;
 				seriesMaxes.push({minX:Number.MAX_VALUE,maxX:Number.MIN_VALUE,
 					              minY:Number.MAX_VALUE,maxY:Number.MIN_VALUE,
 								  scaleX:0,scaleY:0,points:[]});
@@ -130,9 +93,9 @@ package org.apache.flex.charts.beads.layouts
 			// draw the itemRenderers at each vertex and build the points array for the
 			// line segment.
 			
-			for (s=0; s < series.length; s++)
+			for (s=0; s < chart.series.length; s++)
 			{
-				aseries = series[s] as IChartSeries;
+				aseries = chart.series[s] as IChartSeries;
 				
 				for (i=0; i < n; i++)
 				{
@@ -147,23 +110,23 @@ package org.apache.flex.charts.beads.layouts
 					
 					if (aseries.itemRenderer) {
 						var child:IChartItemRenderer = aseries.itemRenderer.newInstance() as IChartItemRenderer;
-						child.itemRendererParent = contentView;
+						child.itemRendererParent = chartDataGroup;
 						child.data = data;
 						child.fillColor = aseries.fillColor;
 						child.x = childX - 5;
 						child.y = childY - 5;
 						child.width = 10;
 						child.height = 10;
-						contentView.addElement(child);
+						chartDataGroup.addElement(child);
 					}
 				}
 			}
 			
 			// draw the line segment
 			
-			for (s=0; s < series.length; s++)
+			for (s=0; s < chart.series.length; s++)
 			{
-				var lcs:LineSeries = series[s] as LineSeries;
+				var lcs:LineSeries = chart.series[s] as LineSeries;
 				
 				if (lcs.lineSegmentRenderer)
 				{
@@ -172,12 +135,12 @@ package org.apache.flex.charts.beads.layouts
 					renderer.lineThickness = lcs.lineThickness;
 					renderer.data = lcs;
 					renderer.points = seriesMaxes[s].points;
-					renderer.itemRendererParent = contentView;
-					contentView.addElement(renderer);
+					renderer.itemRendererParent = chartDataGroup;
+					chartDataGroup.addElement(renderer);
 				}
 			}
 			
-			IEventDispatcher(_strand).dispatchEvent(new Event("layoutComplete"));
+			IEventDispatcher(chart).dispatchEvent(new Event("layoutComplete"));
 		}
 	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/60f17d1b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/PieChartLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/PieChartLayout.as b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/PieChartLayout.as
index 2f0e959..60b0141 100644
--- a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/PieChartLayout.as
+++ b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/PieChartLayout.as
@@ -18,16 +18,11 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.charts.beads.layouts
 {	
-	import org.apache.flex.charts.core.IChart;
 	import org.apache.flex.charts.core.IChartSeries;
 	import org.apache.flex.charts.supportClasses.PieSeries;
 	import org.apache.flex.charts.supportClasses.WedgeItemRenderer;
 	import org.apache.flex.core.IBeadLayout;
-	import org.apache.flex.core.IContentView;
-	import org.apache.flex.core.ILayoutParent;
 	import org.apache.flex.core.ISelectionModel;
-	import org.apache.flex.core.IStrand;
-	import org.apache.flex.core.UIBase;
 	import org.apache.flex.events.Event;
 	import org.apache.flex.events.IEventDispatcher;
 	
@@ -40,7 +35,7 @@ package org.apache.flex.charts.beads.layouts
 	 *  @playerversion AIR 2.6
 	 *  @productversion FlexJS 0.0
 	 */
-	public class PieChartLayout implements IBeadLayout
+	public class PieChartLayout extends ChartBaseLayout implements IBeadLayout
 	{
 		/**
 		 *  constructor.
@@ -54,54 +49,29 @@ package org.apache.flex.charts.beads.layouts
 		{
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.flex.core.IBead#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;
-			IEventDispatcher(value).addEventListener("widthChanged", changeHandler);
-			IEventDispatcher(value).addEventListener("childrenAdded", changeHandler);
-			IEventDispatcher(value).addEventListener("itemsCreated", changeHandler);
-			IEventDispatcher(value).addEventListener("layoutNeeded", changeHandler);
-		}
-		
 		/**
 		 * @private
 		 */
-		private function changeHandler(event:Event):void
+		override protected function performLayout():void
 		{
-			var layoutParent:ILayoutParent = _strand.getBeadByType(ILayoutParent) as ILayoutParent;
-			var contentView:IContentView = layoutParent.contentView as IContentView;
-			contentView.removeAllElements();
-			
-			var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+			var selectionModel:ISelectionModel = chart.getBeadByType(ISelectionModel) as ISelectionModel;
 			var dp:Array = selectionModel.dataProvider as Array;
 			if (!dp)
 				return;
 			
-			var series:Array = IChart(_strand).series;
 			var n:int = dp.length;
-			trace("There are "+series.length+" series in this chart");
 			
 			var xpos:Number = 0;
-			var useWidth:Number = UIBase(_strand).width;
-			var useHeight:Number = UIBase(_strand).height;
+			var useWidth:Number = chart.width;
+			var useHeight:Number = chart.height;
 			
 			var maxYValue:Number = 0;
 			var seriesMaxes:Array = [];
-			var colors:Array = [0xFF0000, 0xFF9900, 0xFFFF00, 0x00FF00, 0x00FFcc, 0x0000FF, 0xcc00FF, 0xFF00cc, 0x888888, 0x333333, 0xFFcc99];
+			var colors:Array = [0xFF964D, 0x964DFF, 0xF80012, 0x96FF4D, 0x4D96FF, 0x8A8A01, 0x23009C, 0x4A4A4A, 0x23579D];
 			
-			for (var s:int = 0; s < series.length; s++)
+			for (var s:int = 0; s < chart.series.length; s++)
 			{
-				var pcs:PieSeries = series[s] as PieSeries;
+				var pcs:PieSeries = chart.series[s] as PieSeries;
 				
 				for (var i:int = 0; i < n; i++)
 				{
@@ -132,22 +102,22 @@ package org.apache.flex.charts.beads.layouts
 					obj = seriesMaxes[i];
 					data = dp[i];
 					
-					var child:WedgeItemRenderer = (series[s] as IChartSeries).itemRenderer.newInstance() as WedgeItemRenderer;
-					child.itemRendererParent = contentView;
+					var child:WedgeItemRenderer = (chart.series[s] as IChartSeries).itemRenderer.newInstance() as WedgeItemRenderer;
+					child.itemRendererParent = chartDataGroup;
 					child.data = data;
-					child.fillColor = colors[i];
-					contentView.addElement(child);
+					child.fillColor = colors[i%colors.length];
+					chartDataGroup.addElement(child);
 					
 					end = start + (360.0 * obj.percent);
 					var arc:Number = 360.0 * obj.percent;
-					trace("Draw arc from "+start+" to "+(start+arc));
+//					trace("Draw arc from "+start+" to "+(start+arc));
 					child.drawWedge(centerX, centerY, start*Math.PI/180, arc*Math.PI/180, radius);
 					
 					start += arc;
 				}
 			}
 			
-			IEventDispatcher(_strand).dispatchEvent(new Event("layoutComplete"));
+			IEventDispatcher(chart).dispatchEvent(new Event("layoutComplete"));
 		}
 	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/60f17d1b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/StackedBarChartLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/StackedBarChartLayout.as b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/StackedBarChartLayout.as
index fed26b0..a6a61a6 100644
--- a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/StackedBarChartLayout.as
+++ b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/StackedBarChartLayout.as
@@ -19,18 +19,11 @@
 package org.apache.flex.charts.beads.layouts
 {
 	import org.apache.flex.charts.core.ICartesianChartLayout;
-	import org.apache.flex.charts.core.IChart;
 	import org.apache.flex.charts.core.IChartItemRenderer;
 	import org.apache.flex.charts.core.IChartSeries;
-	import org.apache.flex.charts.core.IHorizontalAxisBead;
-	import org.apache.flex.charts.core.IVerticalAxisBead;
 	import org.apache.flex.charts.supportClasses.BarSeries;
 	import org.apache.flex.core.IBeadLayout;
-	import org.apache.flex.core.IContentView;
-	import org.apache.flex.core.ILayoutParent;
 	import org.apache.flex.core.ISelectionModel;
-	import org.apache.flex.core.IStrand;
-	import org.apache.flex.core.UIBase;
 	import org.apache.flex.events.Event;
 	import org.apache.flex.events.IEventDispatcher;
 	
@@ -43,7 +36,7 @@ package org.apache.flex.charts.beads.layouts
 	 *  @playerversion AIR 2.6
 	 *  @productversion FlexJS 0.0
 	 */
-	public class StackedBarChartLayout implements IBeadLayout, ICartesianChartLayout
+	public class StackedBarChartLayout extends ChartBaseLayout implements IBeadLayout, ICartesianChartLayout
 	{
 		/**
 		 *  constructor
@@ -57,25 +50,6 @@ package org.apache.flex.charts.beads.layouts
 		{
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.flex.core.IBead#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;
-			IEventDispatcher(value).addEventListener("widthChanged", changeHandler);
-			IEventDispatcher(value).addEventListener("childrenAdded", changeHandler);
-			IEventDispatcher(value).addEventListener("itemsCreated", changeHandler);
-			IEventDispatcher(value).addEventListener("layoutNeeded", changeHandler);
-		}
-		
 		private var _gap:Number = 20;
 		
 		/**
@@ -100,35 +74,25 @@ package org.apache.flex.charts.beads.layouts
 		/**
 		 * @private
 		 */
-		private function changeHandler(event:Event):void
+		override protected function performLayout():void
 		{
-			var layoutParent:ILayoutParent = _strand.getBeadByType(ILayoutParent) as ILayoutParent;
-			var contentView:IContentView = layoutParent.contentView as IContentView;
-			
-			var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+			var selectionModel:ISelectionModel = chart.getBeadByType(ISelectionModel) as ISelectionModel;
 			var dp:Array = selectionModel.dataProvider as Array;
 			if (!dp)
 				return;
 			
-			var series:Array = IChart(_strand).series;
-			var n:int = dp.length;
-			trace("There are "+series.length+" series in this chart");
-			
+			var n:int = dp.length;			
 			var maxXValue:Number = 0;
 			var seriesMaxes:Array = [];
 			
-			var xAxis:IHorizontalAxisBead;
-			if (_strand.getBeadByType(IHorizontalAxisBead)) xAxis = _strand.getBeadByType(IHorizontalAxisBead) as IHorizontalAxisBead;
-			var xAxisOffset:Number = xAxis == null ? 0 : xAxis.axisHeight;
-			var yAxis:IVerticalAxisBead;
-			if (_strand.getBeadByType(IVerticalAxisBead)) yAxis = _strand.getBeadByType(IVerticalAxisBead) as IVerticalAxisBead;
-			var yAxisOffset:Number = yAxis == null ? 0 : yAxis.axisWidth;
+			var xAxisOffset:Number = horizontalAxisBead == null ? 0 : horizontalAxisBead.axisHeight;
+			var yAxisOffset:Number = verticalAxisBead == null ? 0 : verticalAxisBead.axisWidth;
 			
-			var useWidth:Number = UIBase(_strand).width - yAxisOffset;
-			var useHeight:Number = ((UIBase(_strand).height-xAxisOffset) / n) - gap;
+			var useWidth:Number = chart.width - yAxisOffset;
+			var useHeight:Number = ((chart.height-xAxisOffset) / n) - gap;
 			var seriesHeight:Number = useHeight;
 			var xpos:Number = xAxisOffset;
-			var ypos:Number = UIBase(_strand).height - xAxisOffset - seriesHeight;
+			var ypos:Number = chart.height - xAxisOffset - seriesHeight;
 			
 			var barValues:Array = [];
 			var maxValue:Number = 0;
@@ -140,9 +104,9 @@ package org.apache.flex.charts.beads.layouts
 				
 				var data:Object = dp[i];
 				
-				for (var s:int = 0; s < series.length; s++)
+				for (var s:int = 0; s < chart.series.length; s++)
 				{
-					var bcs:BarSeries = series[s] as BarSeries;
+					var bcs:BarSeries = chart.series[s] as BarSeries;
 					var field:String = bcs.xField;
 					
 					var xValue:Number = Number(data[field]);
@@ -159,12 +123,12 @@ package org.apache.flex.charts.beads.layouts
 				data = dp[i];
 				xpos = yAxisOffset;
 				
-				for (s=0; s < series.length; s++)
+				for (s=0; s < chart.series.length; s++)
 				{
-					bcs = series[s] as BarSeries;
+					bcs = chart.series[s] as BarSeries;
 					
-					var child:IChartItemRenderer = (series[s] as IChartSeries).itemRenderer.newInstance() as IChartItemRenderer;
-					child.itemRendererParent = contentView;
+					var child:IChartItemRenderer = (chart.series[s] as IChartSeries).itemRenderer.newInstance() as IChartItemRenderer;
+					child.itemRendererParent = chartDataGroup;
 					child.data = data;
 					child.fillColor = bcs.fillColor;
 					xValue = Number(data[bcs.xField]);
@@ -176,13 +140,13 @@ package org.apache.flex.charts.beads.layouts
 					
 					xpos += xValue*scaleFactor;
 					
-					contentView.addElement(child);
+					chartDataGroup.addElement(child);
 				}
 				
 				ypos -= gap + seriesHeight;
 			}
 			
-			IEventDispatcher(_strand).dispatchEvent(new Event("layoutComplete"));
+			IEventDispatcher(chart).dispatchEvent(new Event("layoutComplete"));
 		}
 	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/60f17d1b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/StackedColumnChartLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/StackedColumnChartLayout.as b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/StackedColumnChartLayout.as
index 574dca8..d0fafc2 100644
--- a/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/StackedColumnChartLayout.as
+++ b/frameworks/as/projects/FlexJSJX/src/org/apache/flex/charts/beads/layouts/StackedColumnChartLayout.as
@@ -19,18 +19,10 @@
 package org.apache.flex.charts.beads.layouts
 {
 	import org.apache.flex.charts.core.ICartesianChartLayout;
-	import org.apache.flex.charts.core.IChart;
 	import org.apache.flex.charts.core.IChartItemRenderer;
-	import org.apache.flex.charts.core.IChartSeries;
-	import org.apache.flex.charts.core.IHorizontalAxisBead;
-	import org.apache.flex.charts.core.IVerticalAxisBead;
 	import org.apache.flex.charts.supportClasses.ColumnSeries;
 	import org.apache.flex.core.IBeadLayout;
-	import org.apache.flex.core.IContentView;
-	import org.apache.flex.core.ILayoutParent;
 	import org.apache.flex.core.ISelectionModel;
-	import org.apache.flex.core.IStrand;
-	import org.apache.flex.core.UIBase;
 	import org.apache.flex.events.Event;
 	import org.apache.flex.events.IEventDispatcher;
 	
@@ -43,7 +35,7 @@ package org.apache.flex.charts.beads.layouts
 	 *  @playerversion AIR 2.6
 	 *  @productversion FlexJS 0.0
 	 */
-	public class StackedColumnChartLayout implements IBeadLayout, ICartesianChartLayout
+	public class StackedColumnChartLayout extends ChartBaseLayout implements IBeadLayout, ICartesianChartLayout
 	{
 		/**
 		 *  constructor
@@ -57,25 +49,6 @@ package org.apache.flex.charts.beads.layouts
 		{
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.flex.core.IBead#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;
-			IEventDispatcher(value).addEventListener("widthChanged", changeHandler);
-			IEventDispatcher(value).addEventListener("childrenAdded", changeHandler);
-			IEventDispatcher(value).addEventListener("itemsCreated", changeHandler);
-			IEventDispatcher(value).addEventListener("layoutNeeded", changeHandler);
-		}
-		
 		private var _gap:Number = 20;
 		
 		/**
@@ -100,31 +73,21 @@ package org.apache.flex.charts.beads.layouts
 		/**
 		 * @private
 		 */
-		private function changeHandler(event:Event):void
+		override protected function performLayout():void
 		{
-			var layoutParent:ILayoutParent = _strand.getBeadByType(ILayoutParent) as ILayoutParent;
-			var contentView:IContentView = layoutParent.contentView as IContentView;
-			
-			var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
+			var selectionModel:ISelectionModel = chart.getBeadByType(ISelectionModel) as ISelectionModel;
 			var dp:Array = selectionModel.dataProvider as Array;
 			if (!dp)
 				return;
 			
-			var series:Array = IChart(_strand).series;
 			var n:int = dp.length;
-			trace("There are "+series.length+" series in this chart");
-			
-			var xAxis:IHorizontalAxisBead;
-			if (_strand.getBeadByType(IHorizontalAxisBead)) xAxis = _strand.getBeadByType(IHorizontalAxisBead) as IHorizontalAxisBead;
-			var xAxisOffset:Number = xAxis == null ? 0 : xAxis.axisHeight;
-			var yAxis:IVerticalAxisBead;
-			if (_strand.getBeadByType(IVerticalAxisBead)) yAxis = _strand.getBeadByType(IVerticalAxisBead) as IVerticalAxisBead;
-			var yAxisOffset:Number = yAxis == null ? 0 : yAxis.axisWidth;
+			var xAxisOffset:Number = horizontalAxisBead == null ? 0 : horizontalAxisBead.axisHeight;
+			var yAxisOffset:Number = verticalAxisBead == null ? 0 : verticalAxisBead.axisWidth;
 			
 			var xpos:Number = yAxisOffset;
 			var ypos:Number = 0;
-			var useWidth:Number = UIBase(_strand).width-yAxisOffset;
-			var useHeight:Number = UIBase(_strand).height - xAxisOffset;
+			var useWidth:Number = chart.width-yAxisOffset;
+			var useHeight:Number = chart.height - xAxisOffset;
 			var itemWidth:Number = (useWidth - gap*(dp.length-1))/dp.length;
 			
 			var maxYValue:Number = 0;
@@ -138,9 +101,9 @@ package org.apache.flex.charts.beads.layouts
 				barValues.push({totalValue:0, scaleFactor:0});
 				var data:Object = dp[i];
 				
-				for (var s:int = 0; s < series.length; s++)
+				for (var s:int = 0; s < chart.series.length; s++)
 				{
-					var bcs:ColumnSeries = series[s] as ColumnSeries;
+					var bcs:ColumnSeries = chart.series[s] as ColumnSeries;
 					var field:String = bcs.yField;
 					
 					var yValue:Number = Number(data[field]);
@@ -157,12 +120,12 @@ package org.apache.flex.charts.beads.layouts
 				data = dp[i];
 				ypos = useHeight;
 				
-				for (s=0; s < series.length; s++)
+				for (s=0; s < chart.series.length; s++)
 				{
-					bcs = series[s] as ColumnSeries;
+					bcs = chart.series[s] as ColumnSeries;
 
 					var child:IChartItemRenderer = bcs.itemRenderer.newInstance() as IChartItemRenderer;
-					child.itemRendererParent = contentView;
+					child.itemRendererParent = chartDataGroup;
 					child.data = data;
 					child.fillColor = bcs.fillColor;
 					yValue = Number(data[bcs.yField]);
@@ -174,13 +137,13 @@ package org.apache.flex.charts.beads.layouts
 					
 					ypos = child.y;
 					
-					contentView.addElement(child);
+					chartDataGroup.addElement(child);
 				}
 				
 				xpos += gap + itemWidth;
 			}
 			
-			IEventDispatcher(_strand).dispatchEvent(new Event("layoutComplete"));
+			IEventDispatcher(chart).dispatchEvent(new Event("layoutComplete"));
 		}
 	}
 }
\ No newline at end of file