Is this the best approach?
I have been doing something similiar with the WedgeSkin recently for
the Pie Chart.
The problem I found with creating a programmatic skin was that you
couldn't subclass the existing skin and change the fill. As such I
ended up copying the skin and therefore all the logic used to draw the
chart item (not very OO).
I found a neater solution was to subclass the series (PieSeries in my
case) and override updateDisplayList e.g.
override protected function updateDisplayList(
unscaledWidth : Number,
unscaledHeight : Number ) : void
{
super.updateDisplayList( unscaledWidth, unscaledHeight );
// Set the fill colour for all items in the series.
var data : Object = transitionRenderData;
if ( transitionRenderData == null )
{
data = renderData;
}
setFills( data );
}
--- In [email protected], "Jonathan Miranda" <[EMAIL PROTECTED]>
wrote:
>
> Ely, I can't thank you enough :-) I was about to just give up for today
> and you helped me get it working :-)
>
> For those at home wondering the important code now (there's no rectangle
> Ely :-)):
>
>
>
> override protected function
> updateDisplayList(unscaledWidth:Number,unscaledHeight:Number):void {
>
>
> super.updateDisplayList(unscaledWidth, unscaledHeight);
>
> var g:Graphics = graphics;
>
> g.clear();
>
> g.beginFill(colors[(_chartItem ==
> null)? 0:_chartItem.index]);
>
> g.drawRect(0, 0, unscaledWidth, unscaledHeight);
>
> g.endFill();
>
> }
>
>
> And for your viewing pleasure...1 Dashboard down stat! ( a lot like the
> demo but hey, it's customized for my client's needs )
>
>
>
> _________________________________________
>
> Jonathan Miranda
>
> Flexible Master of the Web
>
> "In the game of chess, it's important to never let your opponent see
> your pieces."
>
>
>
> From: [email protected] [mailto:[EMAIL PROTECTED] On
> Behalf Of Ely Greenfield
> Sent: Thursday, February 16, 2006 2:02 PM
> To: [email protected]
> Subject: RE: [flexcoders] Column Chart coloring
>
>
>
>
>
>
>
>
>
> AHHHHHHHH. You using Flex 2! Then I have a very, very different answer
> for you.
>
>
>
> Flex 2 has moved to a model more like datagrid's item renderers. In flex
> 2, you can specify an itemSkin class for a column series, and it will
> create one for every column on the chart.
>
>
>
> You want to define a custom skin class, and assign it to the series as
> so:
>
>
>
> <mx:ColumnSeries itemSkin="CycleSkin" />
>
>
>
> item skins are instantiated for each item in the data provider, and each
> one is passed an instance of mx.charts.ChartItem. The chart item knows
> the item from the dataProvider it represents, and what its index was in
> the dataProvider.
>
>
>
>
>
> Here's a sample skin that should cycle colors:
>
>
>
> import mx.charts.series.items.ColumnSeriesItem;
>
> import mx.skins.ProgrammaticSkin;
>
> import mx.core.IDataObject;
>
>
>
> public class CycleSkin extends mx.skins.ProgrammaticSkin implements
> IDataObject
>
> {
>
> private var colors:Array = [0xFF0000,0x00FF00,0x0000FF];
>
>
> public function CycleSkin()
> {
> }
>
> private var _chartItem:ColumnSeriesItem;
>
>
>
> public function get data():Object
> {return _chartItem;}
>
>
>
> public function set data(value:Object):void
> {
>
> _chartItem = value as ColumnSeriesItem;
>
> invalidateDisplayList();
> }
>
> override protected function updateDisplayList(unscaledWidth:Number,
> unscaledHeight:Number):void
> {
> super.updateDisplayList(unscaledWidth, unscaledHeight);
> var g:Graphics = graphics;
> g.clear();
> g.moveTo(rc.left,rc.top);
>
> g.beginFill(colors[(_chartItem == null)? 0:_chartItem.index]);
> g.lineTo(rc.right,rc.top);
> g.lineTo(rc.right,rc.bottom);
> g.lineTo(rc.left,rc.bottom);
> g.lineTo(rc.left,rc.top);
>
> g.endFill();
> }
>
>
>
> }
>
>
>
> }
>
>
>
>
>
>
>
> ________________________________
>
> From: [email protected] [mailto:[EMAIL PROTECTED] On
> Behalf Of Jonathan Miranda
> Sent: Thursday, February 16, 2006 10:54 AM
> To: [email protected]
> Subject: RE: [flexcoders] Column Chart coloring
>
> Sooooo close, I got it all to compile but the following. I can't figure
> out how to do these functions on "target" because it's a
> IFlexDisplayObject, and all those functions are from the graphics class
> and take an "Object". How can I use these functions on the "target" if
> it's not an Object? Extend it somehow or create an object?
>
> public function draw(target:IFlexDisplayObject, rc:Rectangle):void {
>
> target.beginFill( fills[count] );
>
>
>
> target.moveTo(rc.left,rc.top);
>
> target.lineTo(rc.right,rc.top);
>
> target.lineTo(rc.right,rc.bottom);
>
> target.lineTo(rc.left,rc.bottom);
>
> target.lineTo(rc.left,rc.top);
>
>
>
> target.endFill();
>
>
>
> count++;
>
> }
>
>
>
>
>
> _________________________________________
>
> Jonathan Miranda
>
> Flexible Master of the Web
>
> "In the game of chess, it's important to never let your opponent see
> your pieces."
>
>
>
> From: [email protected] [mailto:[EMAIL PROTECTED] On
> Behalf Of Ely Greenfield
> Sent: Thursday, February 16, 2006 11:27 AM
> To: [email protected]
> Subject: RE: [flexcoders] Column Chart coloring
>
>
>
>
>
>
>
> I'll leave making it compile as an exercise for the reader, but
> something like:
>
>
>
> class CycleRenderer implements BoxRenderer
> {
> private var fills = [0xFF0000,0x00FF00,0x0000FF];
>
> private var count:Number;
>
>
>
> function CycleRenderer()
> {
> }
>
> function beginDraw(target: UIObject, fill:Fill, stroke: Stroke,
> sampleCount : Number)
> {
>
> count = 0;
> }
>
>
>
> function draw(target:UIObject, rc : Rect)
> {
> target.beginFill( fills[count] );
>
>
>
> target.moveTo(rc.left,rc.top);
> target.lineTo(rc.right,rc.top);
> target.lineTo(rc.right,rc.bottom);
> target.lineTo(rc.left,rc.bottom);
> target.lineTo(rc.left,rc.top);
>
> target.endFill();
>
>
>
> count++;
> }
>
>
>
> function endDraw(target:UIObject)
> {
> }
>
> function drawPreview(target:UIObject, rc: Rect, fill : Fill, stroke :
> Stroke)
> {
>
> count = 0;
> draw(target, rc);
> }
> }
>
>
>
> Ely.
>
>
>
>
> ________________________________
>
> From: [email protected] [mailto:[EMAIL PROTECTED] On
> Behalf Of Jonathan Miranda
> Sent: Thursday, February 16, 2006 10:19 AM
> To: [email protected]
> Subject: RE: [flexcoders] Column Chart coloring
>
> Hmm, after messing around with this I can't get it to cycle any type of
> array because it seems to only accept one color...and I can't figure out
> how the renderer can reference which item it's actually on. Best I've
> got so far is just changing one color. Fill (heh, bad joke) up to
> mocking an example?
>
> _________________________________________
>
> Jonathan Miranda
>
> Flexible Master of the Web
>
> "In the game of chess, it's important to never let your opponent see
> your pieces."
>
>
>
> From: [email protected] [mailto:[EMAIL PROTECTED] On
> Behalf Of Ely Greenfield
> Sent: Thursday, February 16, 2006 10:44 AM
> To: [email protected]
> Subject: RE: [flexcoders] Column Chart coloring
>
>
>
>
>
>
>
> You could write a custom renderer for the chart that ignores the colors
> passed in and just cycles through a pre-defined array of colors.
>
>
>
> Ely.
>
>
>
>
>
> ________________________________
>
> From: [email protected] [mailto:[EMAIL PROTECTED] On
> Behalf Of Jonathan Miranda
> Sent: Thursday, February 16, 2006 9:30 AM
> To: [email protected]
> Subject: [flexcoders] Column Chart coloring
>
> Also, something else I'm having trouble finding documentation on....
>
> I need to step through colors - let's say red,white,blue. It's one
> ColumnSeries - is there a way I can cycle through colors for each
> column?
>
> _________________________________________
>
> Jonathan Miranda
>
> Flexible Master of the Web
>
> "In the game of chess, it's important to never let your opponent see
> your pieces."
>
>
>
>
>
>
>
>
>
> --
> Flexcoders Mailing List
> FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> Search Archives:
> http://www.mail-archive.com/flexcoders%40yahoogroups.com
>
>
>
>
> SPONSORED LINKS
>
> Web site design development
> <http://groups.yahoo.com/gads?t=ms&k=Web+site+design+development&w1=Web+
> site+design+development&w2=Computer+software+development&w3=Software+des
> ign+and+development&w4=Macromedia+flex&w5=Software+development+best+prac
> tice&c=5&s=166&.sig=L-4QTvxB_quFDtMyhrQaHQ>
>
> Computer software development
> <http://groups.yahoo.com/gads?t=ms&k=Computer+software+development&w1=We
> b+site+design+development&w2=Computer+software+development&w3=Software+d
> esign+and+development&w4=Macromedia+flex&w5=Software+development+best+pr
> actice&c=5&s=166&.sig=lvQjSRfQDfWudJSe1lLjHw>
>
> Software design and development
> <http://groups.yahoo.com/gads?t=ms&k=Software+design+and+development&w1=
> Web+site+design+development&w2=Computer+software+development&w3=Software
> +design+and+development&w4=Macromedia+flex&w5=Software+development+best+
> practice&c=5&s=166&.sig=1pMBCdo3DsJbuU9AEmO1oQ>
>
> Macromedia flex
> <http://groups.yahoo.com/gads?t=ms&k=Macromedia+flex&w1=Web+site+design+
> development&w2=Computer+software+development&w3=Software+design+and+deve
> lopment&w4=Macromedia+flex&w5=Software+development+best+practice&c=5&s=1
> 66&.sig=OO6nPIrz7_EpZI36cYzBjw>
>
> Software development best practice
> <http://groups.yahoo.com/gads?t=ms&k=Software+development+best+practice&
> w1=Web+site+design+development&w2=Computer+software+development&w3=Softw
> are+design+and+development&w4=Macromedia+flex&w5=Software+development+be
> st+practice&c=5&s=166&.sig=f89quyyulIDsnABLD6IXIw>
>
>
>
>
>
> ________________________________
>
> YAHOO! GROUPS LINKS
>
>
>
> * Visit your group "flexcoders
> <http://groups.yahoo.com/group/flexcoders> " on the web.
>
> * To unsubscribe from this group, send an email to:
> [EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>
>
> * Your use of Yahoo! Groups is subject to the Yahoo! Terms of
> Service <http://docs.yahoo.com/info/terms/> .
>
>
>
> ________________________________
>
--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/flexcoders/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/