It works perfectly now! Maybe I should be listening to whatever music you're listening to :-)
I guess I'm going to have to do some studying on mx_internal as I haven't explored that yet. Thank you very much! Paul --- In flexcoders@yahoogroups.com, "Michael Schmalle" <[EMAIL PROTECTED]> wrote: > > Ok, I got it; > > MXML APP > ----------------------------------------------------------- > <?xml version="1.0" encoding="utf-8"?> > <mx:Application > xmlns:mx="http://www.adobe.com/2006/mxml" > layout="absolute"> > > > <mx:Script> > <![CDATA[ > > import mx.core.mx_internal; > use namespace mx_internal; > > private function changeIcon(event:MouseEvent):void > { > myPanel.titleIconObject.color = 0xFFCC00; > } > > ]]> > </mx:Script> > > <mx:Panel id="myPanel" > titleIcon="{Icon}" > title="Icon Panel"> > > <mx:List/> > > <mx:Button > label="Change" > click="changeIcon(event)"/> > > </mx:Panel> > > </mx:Application> > > > Icon Class > -------------------------------------------------------------------- > > package > { > > import mx.skins.ProgrammaticSkin; > > public class Icon extends ProgrammaticSkin > { > private var _color:uint = 0xFF0000; > > public function get color():uint > { > return _color; > } > public function set color(value:uint):void > { > _color = value; > validateDisplayList(); > } > > public function Icon() > { > super(); > } > > override public function get measuredHeight():Number > { > return 16; > } > > override public function get measuredWidth():Number > { > return 16; > } > > override protected function updateDisplayList(unscaledWidth:Number, > > unscaledHeight:Number):void > { > super.updateDisplayList(unscaledWidth, unscaledHeight); > > graphics.clear(); > graphics.beginFill(_color, 1); > graphics.drawRect(0, 0, unscaledWidth, unscaledHeight); > graphics.endFill(); > } > } > } > > > Peace, Mike > > > On 4/27/07, Michael Schmalle <[EMAIL PROTECTED]> wrote: > > > > ok, > > > > I have wasted enough time here, listening to music, I will go make it > > work. > > > > Will post the class. :) > > > > Peace, Mike > > > > On 4/27/07, Paul Whitelock <[EMAIL PROTECTED]> wrote: > > > > > > I got a different error this time: > > > > > > TypeError: Error #1034: Type Coercion failed: cannot convert > > > components::[EMAIL PROTECTED] to Namespace. > > > > > > Are you sure it's not Friday the 13th? > > > > > > Paul > > > > > > --- In flexcoders@yahoogroups.com <flexcoders%40yahoogroups.com>, > > > "Michael Schmalle" > > > <teoti.graphix@> wrote: > > > > > > > > HAHA, > > > > > > > > Man, it must be Friday. > > > > > > > > Ok, the problem is this; > > > > > > > > titleIcon is the setter for the reference to the class that is > > > creating the > > > > icon. > > > > > > > > You need the actual reference to the icon instance. > > > > > > > > try this; > > > > > > > > import mx.core.mx_internal; > > > > use namespace mx_internal; > > > > > > > > myPanel::mx_internal.titleIconObject.color = 0x00FF00; > > > > > > > > BTW we all know mx_internal is not supported but it will get you > > > what you > > > > want. :) > > > > > > > > Peace, Mike > > > > > > > > > > > > On 4/27/07, Paul Whitelock <news@> wrote: > > > > > > > > > > Unfortunately that did not work. It looks like the setter is not > > > > > really being called after all. When I do this: > > > > > > > > > > myPanel.titleIcon.color = 0x00FF00; > > > > > > > > > > What seems to be happening is that it is creating a property called > > > > > "color" just as if myPanel.titleIcon was a generic Object. > > > > > > > > > > I tried creating a "doIconColor" function (rather than using a > > > setter) > > > > > in Icon and calling it like this: > > > > > > > > > > Icon(myPanel.titleIcon).doIconColor(0xFF00FF); > > > > > > > > > > But this results in an TypeError: > > > > > > > > > > TypeError: Error #1034: Type Coercion failed: cannot convert > > > > > components::Icon$ to components.Icon. > > > > > > > > > > I can't simply do this: > > > > > > > > > > myPanel.titleIcon.doIconColor(0xFF00FF); > > > > > > > > > > because I get a compile error (call to a possibly undefined method > > > > > doIconColor) > > > > > > > > > > So the question now becomes, how do I call a function of my Icon > > > > > class? Thanks for any suggestions! > > > > > > > > > > Paul > > > > > > > > > > --- In flexcoders@yahoogroups.com <flexcoders%40yahoogroups.com><flexcoders%40yahoogroups.com>, > > > > > > "Michael > > > > > Schmalle" > > > > > <teoti.graphix@> wrote: > > > > > > > > > > > > Ah, > > > > > > > > > > > > I know why you are not seeing updateDisplayList() called. > > > > > > > > > > > > Since this is ProgrammaticSkin, if the size doesn't change, the > > > > > method will > > > > > > skip. The layoutManager calls setActualSize() and in that call if > > > > > height or > > > > > > width did not change, you won't get the call. > > > > > > > > > > > > I had this same problem. > > > > > > > > > > > > In your color property, call validateDisplayList(); that will do > > > the > > > > > trick. > > > > > > > > > > > > Peace, Mike > > > > > > > > > > > > > > > > > > > > > > > > On 4/27/07, Michael Schmalle <teoti.graphix@> wrote: > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > For one I see you are missing; > > > > > > > > > > > > > > graphics.clear(); > > > > > > > > > > > > > > Try that, I don't think you are erasing the old color. > > > > > > > > > > > > > > Peace, Mike > > > > > > > > > > > > > > PS hehe I was thinking about something else when I responded and > > > > > forgot > > > > > > > the internal icon is typed IFlexDisplayObject. > > > > > > > > > > > > > > > > > > > > > > > > > > > > On 4/27/07, Paul Whitelock <news@> wrote: > > > > > > > > > > > > > > > > Well here's the deal. I've created an simple icon class that > > > > > draws a > > > > > > > > red square like this: > > > > > > > > > > > > > > > > package components { > > > > > > > > > > > > > > > > import mx.skins.ProgrammaticSkin; > > > > > > > > > > > > > > > > public class Icon extends ProgrammaticSkin { > > > > > > > > > > > > > > > > private var iconColor:uint = 0xFF0000; > > > > > > > > > > > > > > > > public function Icon() { > > > > > > > > super(); > > > > > > > > } > > > > > > > > > > > > > > > > public function set color(value:uint):void { > > > > > > > > iconColor = value; > > > > > > > > invalidateDisplayList(); > > > > > > > > } > > > > > > > > > > > > > > > > override public function get measuredHeight():Number { > > > > > > > > return 16; > > > > > > > > } > > > > > > > > > > > > > > > > override public function get measuredWidth():Number { > > > > > > > > return 16; > > > > > > > > } > > > > > > > > > > > > > > > > override protected function > > > > > > > > updateDisplayList(unscaledWidth:Number, > > > > > unscaledHeight:Number):void { > > > > > > > > super.updateDisplayList(unscaledWidth, unscaledHeight); > > > > > > > > graphics.beginFill(iconColor, 1); > > > > > > > > graphics.drawRect(0, 0, unscaledWidth, unscaledHeight); > > > > > > > > graphics.endFill(); > > > > > > > > } > > > > > > > > } > > > > > > > > } > > > > > > > > > > > > > > > > I can place this icon in a Panel like this: > > > > > > > > > > > > > > > > <mx:Panel id="myPanel" titleIcon="{Icon}" ... > > > > > > > > > > > > > > > > > So far so good -- the red square is drawn in the top left > > > corner of > > > > > > > > the title area and it appears that I can call the color setter > > > > > > > > function like this: > > > > > > > > > > > > > > > > myPanel.titleIcon.color = 0x00FF00; > > > > > > > > > > > > > > > > But when I do this the icon color never changes. It appears > > > that the > > > > > > > > calling invalidateDisplayList() never results in a call to > > > > > > > > updateDisplayList(). > > > > > > > > > > > > > > > > Any ideas? > > > > > > > > > > > > > > > > Paul > > > > > > > > > > > > > > > > > > > > > > > > --- In flexcoders@yahoogroups.com<flexcoders%40yahoogroups.com><flexcoders%40yahoogroups.com> > > > > > <flexcoders%40yahoogroups.com>, Paul J > > > > > > > > DeCoursey <paul@> wrote: > > > > > > > > > > > > > > > > > > I've been able to get it to work for buttons and the like by > > > > > extending > > > > > > > > > > > > > > > > > ProgrammaticSkin and passing in the class. I've never even > > > > > used the > > > > > > > > > icon on a TitleWindow to even know how it's supposed to > > > work. It > > > > > > > > should > > > > > > > > > work, because everything is a class, but it might not know > > > > > what to do > > > > > > > > > with it. > > > > > > > > > > > > > > > > > > Paul > > > > > > > > > > > > > > > > > > Michael Schmalle wrote: > > > > > > > > > > Hi, > > > > > > > > > > > > > > > > > > > > The simple answer is no. > > > > > > > > > > > > > > > > > > > > Why? > > > > > > > > > > > > > > > > > > > > The titleIcon class is of type Class. This class cannot be > > > > > > > > subclassed. > > > > > > > > > > > > > > > > > > > > My advice to you is create a subclass of TitleWindow and > > > > > create the > > > > > > > > > > method > > > > > > > > > > you are talking about there. > > > > > > > > > > > > > > > > > > > > Since you cannot load icons at runtime, you could create a > > > > > simple > > > > > > > > > > iconLibraryModule that held your extra icons and then the > > > > > method you > > > > > > > > > > > > > > > > > > created > > > > > > > > > > in the subclass would then load the icons from the icon > > > > > library on > > > > > > > > demand > > > > > > > > > > through some type of string call into the library. > > > > > > > > > > > > > > > > > > > > Conclusion, there is no way to create an image like > > > component in > > > > > > > > > > components > > > > > > > > > > with properties of type Class. In my custom window, I > > > wrap the > > > > > > > > icon in a > > > > > > > > > > UIComponent, this way when I am rendering the icon, I have > > > 2 > > > > > > > > options. The > > > > > > > > > > icon property is the 'source' but not the actual instance > > > > > that is > > > > > > > > > > manipulated in the component UI. > > > > > > > > > > > > > > > > > > > > Peace, Mike > > > > > > > > > > > > > > > > > > > > On 4/27/07, Paul Whitelock <news@> wrote: > > > > > > > > > >> > > > > > > > > > >> Would anyone know if there is a way to create an > > > component that > > > > > > > > can be > > > > > > > > > >> used as an icon for any component that accepts an icon? > > > > > > > > > >> > > > > > > > > > >> For example, TitleWindow accepts a titleIcon. I would > > > like to > > > > > > > > create > > > > > > > > > >> an AS3 class that I can instantiate and specify for the > > > > > > > > TitleWindow's > > > > > > > > > >> titleIcon. As conditions change in the window, I'd like > > > to > > > > > be able > > > > > > > > to > > > > > > > > > >> make a function call to the icon class and have it update > > > > > the icon > > > > > > > > > >> displayed by the TitleWindow. The class would > > > programatically > > > > > > > > create > > > > > > > > > >> the icon (i.e., it would not use an embedded asset). > > > > > > > > > >> > > > > > > > > > >> Ideally the icon component should be able to be used > > > for any > > > > > > > > component > > > > > > > > > >> that accepts an icon. > > > > > > > > > >> > > > > > > > > > >> Any idea if this can be done and if so where I should > > > start > > > > > > > > looking to > > > > > > > > > >> create such a component? Thanks! > > > > > > > > > >> > > > > > > > > > >> Paul > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > Teoti Graphix > > > > > > > http://www.teotigraphix.com > > > > > > > > > > > > > > Blog - Flex2Components > > > > > > > http://www.flex2components.com > > > > > > > > > > > > > > You can find more by solving the problem then by 'asking the > > > > > question'. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > Teoti Graphix > > > > > > http://www.teotigraphix.com > > > > > > > > > > > > Blog - Flex2Components > > > > > > http://www.flex2components.com > > > > > > > > > > > > You can find more by solving the problem then by 'asking the > > > question'. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > Teoti Graphix > > > > http://www.teotigraphix.com > > > > > > > > Blog - Flex2Components > > > > http://www.flex2components.com > > > > > > > > You can find more by solving the problem then by 'asking the > > > question'. > > > > > > > > > > > > > > > > > > > > > -- > > Teoti Graphix > > http://www.teotigraphix.com > > > > Blog - Flex2Components > > http://www.flex2components.com > > > > You can find more by solving the problem then by 'asking the question'. > > > > > > -- > Teoti Graphix > http://www.teotigraphix.com > > Blog - Flex2Components > http://www.flex2components.com > > You can find more by solving the problem then by 'asking the question'. >