I need to create an instance of a PlotSeries icon. It's easy enough to
discover the PlotSeries item renderer:
var renderer:ClassFactory = plotSeries.getStyle("itemRenderer");
However, if I have not figured out how to create an instance of the renderer so
I can add it to the display list.
Here is a short test program, consisting of two files. The first file is a
VBox whose icon property should be set to the item renderer instance.
// TestBox.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.controls.*;
import mx.charts.series.PlotSeries;
public var plotSeries:PlotSeries;
public var generator:Class;
override protected function createChildren():void {
super.createChildren();
if (false) { // this works (icon is shown)
icon = generator;
} else { // does not work (no icon)
var renderer:ClassFactory =
plotSeries.getStyle("itemRenderer");
icon = renderer.generator;
/* var x:* = renderer.newInstance();
trace(x); */
}
}
]]>
</mx:Script>
</mx:VBox>
// index.mxml
/* This is the application; it contains two embedded images that can be used to
set the TestBox's icon property. That works.
onPlotChartComplete() sets the icon. */
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:local="*"
xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.charts.series.PlotSeries;
[Bindable]
private var expensesAC:ArrayCollection = new ArrayCollection( [
{ Month: "Jan", Profit: 2000, Expenses: 1500, Amount: 450 },
{ Month: "Feb", Profit: 1000, Expenses: 200, Amount: 600 },
{ Month: "Mar", Profit: 1500, Expenses: 500, Amount: 300 }
]);
[Embed(source="warning.png")]
private static var WarningClass:Class;
[Embed(source="error.png")]
private static var ErrorClass:Class;
private function onPlotChartComplete():void {
var testBox1:TestBox = new TestBox();
testBox1.plotSeries = plotSeries1;
testBox1.generator = ErrorClass;
testBox1.label = "Error";
tab.addChild(testBox1);
var testBox2:TestBox = new TestBox();
testBox2.plotSeries = plotSeries2;
testBox2.generator = WarningClass;
testBox2.label = "Warning";
tab.addChild(testBox2);
}
]]>
</mx:Script>
<mx:PlotChart
creationComplete="onPlotChartComplete()"
dataProvider="{expensesAC}"
height="50%"
width="100%">
<mx:series>
<mx:PlotSeries
id="plotSeries1"
xField="Expenses"
yField="Profit"
displayName="Plot 1" />
<mx:PlotSeries
id="plotSeries2"
xField="Amount"
yField="Expenses"
displayName="Plot 2" />
</mx:series>
</mx:PlotChart>
<mx:TabNavigator height="50%" id="tab" width="100%" />
</mx:Application>
Suggestions?
Mike