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, 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
>







Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it now. 



      
____________________________________________________________________________________
Be a better friend, newshound, and 
know-it-all with Yahoo! Mobile.  Try it now.  
http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ 

Reply via email to