Wednesday, 7 November 2012

Blinking Label

Blinking Label:


package LabeledComp
{
    import flash.events.Event;

    import spark.components.Label;

    [Style(name="numOfFramesPerBlink", inherit="yes", type="uint")]
    public class BlinkingLabel extends Label
    {
        private static const DEFAULT_NUM_OF_FRAMES_PER_BLINK:Number = 10;

        private var _explicitVisibility:Boolean = true;

        private var blinkingDirty:Boolean;

        private var currentBlinkingPhaseFrames:uint;

        private var numOfFramesPerBlinkValue:uint = DEFAULT_NUM_OF_FRAMES_PER_BLINK;

        override public function get visible():Boolean
        {
            return _explicitVisibility;
        }

        override public function set visible(value:Boolean):void
        {
            super.visible = value;
            _explicitVisibility = value;
        }

        private var _blinking:Boolean;

        [Bindable]
        public function get blinking():Boolean
        {
            return _blinking;
        }

        public function set blinking(value:Boolean):void
        {
            if (_blinking == value)
                return;
            _blinking = value;
            blinkingDirty = true;
            invalidateProperties();
        }

        override public function styleChanged(styleProp:String):void
        {
            super.styleChanged(styleProp);

            var allStyles:Boolean = styleProp == null || styleProp == "styleName";
            if (allStyles || styleProp == "numOfFramesPerBlink")
            {
                var newNumOfFramesPerBlink:uint = getStyle("numOfFramesPerBlink");
                if (newNumOfFramesPerBlink > 0)
                    numOfFramesPerBlinkValue = newNumOfFramesPerBlink;
                else
                    numOfFramesPerBlinkValue = DEFAULT_NUM_OF_FRAMES_PER_BLINK
            }
        }

        override protected function commitProperties():void
        {
            super.commitProperties();

            if (blinkingDirty)
            {
                if (_blinking)
                {
                    addEventListener(Event.ENTER_FRAME, enterFrameHandler);
                    currentBlinkingPhaseFrames = 0;
                }
                else
                {
                    removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
                    setVisibleState(_explicitVisibility);
                }
                blinkingDirty = false;
            }
        }

        private function setVisibleState(value:Boolean):void
        {
            super.visible = value;
        }

        private function enterFrameHandler(event:Event):void
        {
            currentBlinkingPhaseFrames++;
            if (currentBlinkingPhaseFrames > numOfFramesPerBlinkValue)
            {
                setVisibleState(!super.visible);
                currentBlinkingPhaseFrames = 0;
            }
        }
    }
}

use this component as



<LabeledComp:BlinkingLabel id="lblStatusnotification" visible="false" blinking="true" color="red" fontWeight="bold" numOfFramesPerBlink="10"/>