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'.
>


Reply via email to