It may be more code - But not only is it best practices, it's also using the framework to your advantage, and is far more efficient.
On Feb 7, 2008 2:19 PM, Merrill, Jason <[EMAIL PROTECTED]> wrote: > My opinion is that is a lot of code to wade through! > > > Jason Merrill > *Bank of America * > GT&O L&LD Solutions Design & Development > eTools & Multimedia > > *Bank of America Flash Platform Developer Community* > > > ------------------------------ > *From:* [email protected] [mailto:[EMAIL PROTECTED] *On > Behalf Of *Sherif Abdou > *Sent:* Thursday, February 07, 2008 1:36 PM > *To:* [email protected] > > *Subject:* Re: [flexcoders] Re: is this how to use commitProperties > > so good? bad? any opinions? > > ----- Original Message ---- > From: Sherif Abdou <[EMAIL PROTECTED]> > To: [email protected] > Sent: Wednesday, February 6, 2008 9:53:43 PM > Subject: Re: [flexcoders] Re: is this how to use commitProperties > > if anyone cares to check, is this how your suppose to do the stuff or is > it overkill. This is a Tab that contains a Close Button so if the user > clicks on the close Button then the tab gets removed and depending on the > policy that gets picked it reacts. > * > > package > * flexlib.controls. tabBarClasses > > { > > *import* flash.display. DisplayObject; > > *import* flash.events. Event; > > *import* flash.events. MouseEvent; > > *import* flexlib.constants. AdvancedTabConst ant; > > *import* flexlib.interfaces. ICustomComponent Styles; > > *import* mx.controls. Button; > > *import* mx.controls. tabBarClasses. Tab; > > *import* mx.core.UIComponent ; > > /** > > * The Style For the Close Button that will be used > > */ > > [ > *Style*(name=*"tabCloseButtonStyl eName"*,type=*"String"*, inherit=*"no"* > )] > > /** > > * The Style that is used for the indicator, it will be an image > > */ > > [ > *Style*(name=*"indicatorClass"*, type=*"String"*, inherit=*"no"*)] > > *public* *class* AdvancedTab *extends* Tab *implements*ICustomComponentSty > les > > { > > /** > > * Flag to Know if the Button has been created or not > > */ > > *private* *var* _closeButtonCreated :Boolean; > > /** > > * The Button that will aid us in closing the Tab AKA removing it from the > scene > > */ > > *private* *var* closeButton: Button; > > /** > > * The Display Indicator that gets seen between the tabs when we move them > > */ > > *private* *var* indicatorDisplay: UIComponent; > > *public* *function* AdvancedTab( ) > > { > > *super*(); > > *//enable Mouse Children so we can Have Interaction with the Buttons* > > *//and other Stuff that will be placed on the Tab, by Default it is false* > > *//reason is if there is a textField in the Tab then a click may be > dispatched or* > > *//heard in the textField instead of the Tab itself and sometimes you dont > want that to* > > *//happen.* > > mouseChildren= > *true*; > > } > > /** > > * Used to Determine whether or not there was a change in the Close Policy > > */ > > *private* *var* _closePolicyChanged :Boolean; > > /** > > * Internal Value for the ClosePolicy so we can react > > * accordingly > > */ > > *private* *var* _closePolicy: String; > > [ > *Inspectable*(defaultValue=*"close_always"*,enumeration=*"close_always, > close_rollover, close_never, close_selected"*)] > > *public* *function* *set* closePolicy( value:String) :*void*{ > > *if*(_closePolicy !=value){ > > _closePolicy= value; > > _closePolicyChanged = > *true*; > > invalidatePropertie s(); > > dispatchEvent( > *new* Event(*"closePolicyChanged "*)); > > } > > } > > [ > *Bindable*(event=*"closePolicyChanged "*)] > > *public* *function* *get* closePolicy( ):String{ > > *return* _closePolicy; > > } > > /** > > * Override the CreateChildren so we can create the Close Button, Only > Create Children > > * and nothing else, can't size them or position them > > */ > > *override* *protected* *function* createChildren( ):*void*{ > > *//call the super method so the other stuff gets constructed like * > > *//the Button itself and all the other stuff that creates the Tab* > > *super*.createChildren( ); > > *//always check if the Button is not made* > > *if*(!closeButton) { > > *//safe now we can create it* > > closeButton = > *new* Button(); > > *//listen for the click event so we know when to close the tab* > > closeButton. addEventListener (MouseEvent. CLICK,onCloseBut > tonClickHandler) ; > > *//hide the close button* > > closeButton. visible= > *false*; > > _closeButtonCreated = > *true*; > > addChild(closeButto n); > > } > > /** > > * Used to Display the Indicator, first get the Style as a class > > * then what you would need to do is create the style as a class > > */ > > *if*(!indicatorDisplay) { > > indicatorDisplay = > *new* UIComponent( ) > > addChild(indicatorD isplay > *as* DisplayObject) ; > > } > > *//call to set the styles* > > setCustomStyles( ); > > } > > /** > > * Called On when the User Clicks on the Close Button, > > * all we are going to do is dispatch that the user > > * wants to close the tab and handle in the AdvanedTabBar > > * so it gets removed cleanly > > */ > > *private* *function* onCloseButtonClickH andler(event: MouseEvent) :*void*{ > > > dispatchEvent( > *new* Event(AdvancedTabCo nstant.CLOSE_ TAB)); > > } > > /** > > * Override the measure to set the compenents custom size > > * We set the Close Button Size here and the Indicator?? > > */ > > *override* *protected* *function* measure():*void*{ > > *super*.measure(); > > *if*(_closeButtonCreate d){ > > closeButton. width = closeButton. height=16; > > _closeButtonCreated = > *false*; > > } > > } > > /** > > * The Sizes and Positions the Children > > */ > > *override* *protected* *function* updateDisplayList( unscaledWidth: > Number, unscaledHeight: Number):*void*{ > > *super*.updateDisplayList( unscaledWidth, unscaledHeight) ; > > *//check to see if we have the Button* > > *if*(closeButton. visible){ > > closeButton. move(unscaledWid th-closeButton. width,4); > > *//change the index of where the button is so we can adjust it* > > setChildIndex( closeButton, numChildren- 2); > > } > > *if*(indicatorDisplay) { > > setChildIndex( indicatorDisplay ,numChildren- 1); > > } > > } > > /** > > * Create the CommitProperties so we determine if there is a need > > * to change the closePolicy Buttons > > */ > > *override* *protected* *function* commitProperties( ):*void*{ > > *super*.commitProperties( ); > > *if*(_closePolicyChange d){ > > *switch*(closePolicy) { > > *case* AdvancedTabConstant .CLOSE_ALWAYS: > > closeButton. visible= > *true*; > > *break*; > > *case* AdvancedTabConstant .CLOSE_NEVER: > > closeButton. visible= > *false*; > > *break*; > > *case* AdvancedTabConstant .CLOSE_SELECTED: > > *if*(selected){ > > closeButton. visible= > *true*; > > } > *else*{ > > closeButton. visible= > *false*; > > } > > *break*; > > *case* AdvancedTabConstant .CLOSE_ROLLOVER: > > *if*(AdvancedTabConstan t.TAB_ROLLED_ OVER){ > > closeButton. visible= > *true*; > > } > *else*{ > > closeButton. visible= > *false*; > > } > > } > > invalidateDisplayLi st(); > > _closePolicyChanged = > *false*; > > } > > } > > /** > > * Sets The Custom Styles for The Indicator and for the button after they > have been created > > */ > > *public* *function* setCustomStyles( ):*void*{ > > *//Set the Style of the Button here* > > closeButton. styleName = getStyle( > *"tabCloseButtonStyl eName"*); > > *//set the Style of the Indicator Button here* > > indicatorDisplay. setStyle( > *"backgroundImage"*,getStyle(*"indicatorClass"*)); > > } > > /** > > * Keep Track of When the User is over the Button > > */ > > *override* *protected* *function* rollOverHandler( event:MouseEvent ):* > void*{ > > AdvancedTabConstant .TAB_ROLLED_ OVER = > *true*; > > _closePolicyChanged = > *true*; > > invalidatePropertie s(); > > *super*.rollOverHandler( event); > > } > > *override* *protected* *function* rollOutHandler( event:MouseEvent ):*void > *{ > > AdvancedTabConstant .TAB_ROLLED_ OVER= > *false*; > > _closePolicyChanged = > *true*; > > invalidatePropertie s(); > > *super*.rollOutHandler( event); > > } > > } > > } > > > ----- Original Message ---- > From: ecancil <[EMAIL PROTECTED] com> > To: [EMAIL PROTECTED] ups.com > Sent: Wednesday, February 6, 2008 7:46:45 PM > Subject: [flexcoders] Re: is this how to use commitProperties > > it doesnt matter how many times you call invalidate - it will still > only do it once - that's the whole point. > --- In [EMAIL PROTECTED] ups.com <flexcoders%40yahoogroups.com>, Sherif > Abdou <[EMAIL PROTECTED] ..> wrote: > > > > my bad, i for some reason sent it to flexComponents instead instead > of flexcoders so sorry for double post > > i am just wondering if this is how it usually gets used > > /** > > * Used to Determine whether or not there was a change in the Close > Policy > > */ > > private var _closePolicyChanged :Boolean; > > /** > > * Internal Value for the ClosePolicy so we can react > > * accordingly > > */ > > private var _closePolicy: String; > > [Inspectable( defaultValue= "close_always" ,enumeration= "close_always , > close_rollover , close_never, close_selected" )] > > public function set closePolicy( value:String) :void{ > > _closePolicy= value; > > _closePolicyChanged =true; > > this.invalidateProp erties(); > > dispatchEvent( new Event("closePolicyC hanged")) ; > > } > > [Bindable(event= "closePolicyChan ged")] > > public function get closePolicy( ):String{ > > return _closePolicy; > > } > > > > /** > > * Create the CommitProperties so we determine if there is a need > > * to change the closePolicy Buttons > > */ > > override protected function commitProperties( ):void{ > > super.commitPropert ies(); > > if(_closePolicyChan ged){ > > invalidateDisplayLi st(); > > _closePolicyChanged =false; > > } > > } > > > > > > > ____________ _________ _________ _________ _________ _________ _ > > Be a better friend, newshound, and > > know-it-all with Yahoo! Mobile. Try it now. > http://mobile. yahoo.com/ ;_ylt=Ahu06i62sR 8HDtDypao8Wcj9tA > cJ<http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAc%21+J> > > > > > > ------------------------------ > Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it > now.<http://us.rd.yahoo.com/evt=51733/*http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ> > > > ------------------------------ > Never miss a thing. Make Yahoo your > homepage.<http://us.rd.yahoo.com/evt=51438/*http://www.yahoo.com/r/hs> > >

