Relax Breath of Solution. - Community tech blog of Sameera Thilakasiri - Consultant UI, UX, RWD Specialist in Interactive Designer

Just I wanted.. Do you?…

Collapsible Panel Component for Flex

Posted on August 21, 2010 by Sameera Thilakasiri

Here’s an another post in the same vein as my previous one: this time, the component I’m sharing is a Panel subclass that allows for collapsing and expanding its contents. What this means is that the user can click on the header of the Panel to make it toggle between an open or closed state, with a smooth animation.
I Tried to implement the component so that it’ll be easy to use in both MXML and ActionScript. In the demo app there is also an example on styling the CollapsiblePanel.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns:hassegContainers="org.hasseg.containers.*"
    width="100%" height="100%"
      layout="vertical"
    creationComplete="ccHandler(event);"
>
      
    <mx:Style>
        .myCPStyle {
            borderThicknessLeft: 0;
            borderThicknessTop: 0;
            borderThicknessBottom: 0;
            borderThicknessRight: 0;
            headerHeight: 20;
            dropShadowEnabled: false;
            headerColors: #d9d9d9, #ffffff;
              borderAlpha: 1;
            backgroundAlpha: 0;
            paddingTop:   4;
            paddingLeft: 4;
            paddingRight: 4;
            verticalGap: 4;
            
            openIcon: Embed(source="icons.swf", symbol="CollapsiblePanelOpenIcon");
            closedIcon: Embed(source="icons.swf", symbol="CollapsiblePanelClosedIcon");
          }
    </mx:Style>
    
    <mx:Script>
        <![CDATA[
                
            import mx.events.*;
            
            private function ccHandler(event:FlexEvent):void {
                /*
                * An example of programmatically adding a new CollapsiblePanel:
                  */
                var newCP:CollapsiblePanel = new CollapsiblePanel(false); // closed by default
                newCP.title = "This added via AS";
                newCP.styleName = "myCPStyle";
                var bOne:Button = new Button();
                var bTwo:Button = new Button();
                bOne.label = "button one"
                bTwo.label = "button two"
                newCP.addChild(bOne);
                  newCP.addChild(bTwo);
                var newLabel:Label = new Label();
                newLabel.text = "Added via ActionScript:";
                this.addChild(newLabel);
                this.addChild(newCP);
            }
            
        ]]>
    </mx:Script>
    
    
    <mx:HBox>
        <mx:Box>
              <mx:Label text="styled,   open=false:"   />
            <hassegContainers:CollapsiblePanel
                                title="This   is the title"
                                width="200"
                                open="false"
                                styleName="myCPStyle"
            >
                <mx:Button label="hello"   />
                    <mx:Button label="hello   again" />
            </hassegContainers:CollapsiblePanel>
        </mx:Box>
        
        <mx:Box>
            <mx:Label text="styled, open=true:" />
            <hassegContainers:CollapsiblePanel
                                title="This is the title"
                                width="200"
                                open="true"
                                styleName="myCPStyle"
              >
                <mx:Button label="hello" />
                <mx:Button label="hello again" />
            </hassegContainers:CollapsiblePanel>
        </mx:Box>
    </mx:HBox>
    
    <mx:HBox>
        <mx:Box>
            <mx:Label text="styled, open attribute not set:" />
            <hassegContainers:CollapsiblePanel
                                  title="This is the title"
                                width="200"
                                  styleName="myCPStyle"
              >
                <mx:Button label="hello" />
                <mx:Button label="hello again" />
            </hassegContainers:CollapsiblePanel>
        </mx:Box>
        
        <mx:Box>
              <mx:Label text="not   styled, open=false:" />
            <hassegContainers:CollapsiblePanel
                                    title="This is the title"
                                width="200"
                                open="false"
              >
                <mx:Button label="hello" />
                <mx:Button label="hello again" />
            </hassegContainers:CollapsiblePanel>
        </mx:Box>
    </mx:HBox>
    
    
</mx:Application>

CollapsiblePanel.as:

package org.hasseg.containers {
    
    import flash.events.*;
      import mx.effects.AnimateProperty;
      import mx.events.*;
    import mx.containers.Panel;
    import mx.core.ScrollPolicy;
    
    
    /**
    * The icon designating a &quot;closed&quot; state
    */
    [Style(name=&quot;closedIcon&quot;,   property=&quot;closedIcon&quot;, type=&quot;Object&quot;)]
    
    /**
    * The icon designating an &quot;open&quot; state
    */
    [Style(name=&quot;openIcon&quot;,   property=&quot;openIcon&quot;, type=&quot;Object&quot;)]
    
    /**
    * This is a Panel that can be collapsed and expanded by clicking   on the header.
    * 
    * @author Ali Rantakari
    */
    public class CollapsiblePanel extends Panel {
        
        private var _creationComplete:Boolean = false;
        private var _open:Boolean = true;
        private var _openAnim:AnimateProperty;
          
        /**
        * Constructor
        * 
        */
        public function CollapsiblePanel(aOpen:Boolean = true):void
        {
            super();
            open = aOpen;
            this.addEventListener(FlexEvent.CREATION_COMPLETE, creationCompleteHandler);
          }
        
        
        
        
        
        
        
        
        // BEGIN: event handlers                ------------------------------------------------------------
        
        private function   creationCompleteHandler(event:FlexEvent):void
        {
            this.horizontalScrollPolicy = ScrollPolicy.OFF;
            this.verticalScrollPolicy = ScrollPolicy.OFF;
            
            _openAnim = new AnimateProperty(this);
            _openAnim.duration = 300;
            _openAnim.property = &quot;height&quot;;
            
            titleBar.addEventListener(MouseEvent.CLICK, headerClickHandler);
              
              _creationComplete = true;
        }
        
        private function headerClickHandler(event:MouseEvent):void { toggleOpen(); }
        
        private function callUpdateOpenOnCreationComplete(event:FlexEvent):void { updateOpen(); }
        
        // --end--: event handlers          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

        // BEGIN: private methods               ------------------------------------------------------------
        
        // sets the height of the component without animation, based
        // on the _open variable
        private function updateOpen():void
        {
            if (!_open) height = closedHeight;
            else height = openHeight;
            setTitleIcon();
        }
        
          // the height that the component should be when open
        private function get openHeight():Number {
                return measuredHeight;
        }
        
        // the height that the   component should be when closed
        private function get closedHeight():Number {
            var hh:Number = getStyle(&quot;headerHeight&quot;);
            if (hh &lt;= 0 || isNaN(hh)) hh = titleBar.height;
            return hh;
        }
        
        // sets the correct title icon
        private function setTitleIcon():void
        {
            if (!_open) this.titleIcon = getStyle(&quot;closedIcon&quot;);
            else this.titleIcon = getStyle(&quot;openIcon&quot;);
        }
        
        // --end--:   private methods         - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          
        // BEGIN: public methods                ------------------------------------------------------------
        
        /**
        * Collapses / expands this block (with animation)
        */
        public function toggleOpen():void 
        {
            if (_creationComplete &amp;&amp; !_openAnim.isPlaying) {
                
                _openAnim.fromValue = _openAnim.target.height;
                if (!_open) {
                    _openAnim.toValue   = openHeight;
                    _open = true;
                    dispatchEvent(new Event(Event.OPEN));
                }else{
                    _openAnim.toValue = _openAnim.target.closedHeight;
                    _open = false;
                    dispatchEvent(new   Event(Event.CLOSE));
                  }
                setTitleIcon();
                _openAnim.play();
                
            }
            
        }     
        
        /**
        * Whether the block is in a expanded (open) state or not
        */
        public function get open():Boolean {
            return _open;
        }
        /**
        * @private
        */
        public function set open(aValue:Boolean):void {
            _open = aValue;
            if (_creationComplete) updateOpen();
            else this.addEventListener(FlexEvent.CREATION_COMPLETE,   callUpdateOpenOnCreationComplete, false, 0, true);
        }
        
        
        /**
        * @private
          */
        override public function invalidateSize():void {
            super.invalidateSize();
            if (_creationComplete)
                if (_open &amp;&amp; !_openAnim.isPlaying) this.height = openHeight;
 <a href="http://all-forums.biz/images/index.php">how do i buy viagra online</a>         }
        
        // --end--: public methods          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          
    }

}

Author
Sameera Thilakasiri By Sameera Thilakasiri
,is a front-end developer based in Colombo, is a blogger and a lifestyle photographer.
Follow him Twitter and Google+. Check out him.

Fade effect in Flex

Posted on August 21, 2010 by Sameera Thilakasiri

The following lesson shows you how to set a fade effect to display a caption only when the user hovers over an image.

&lt;?xml version=&quot;1.0&quot;   encoding=&quot;utf-8&quot;?&gt;
&lt;mx:Application     xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;   layout=&quot;vertical&quot; 
    backgroundGradientAlphas=&quot;[1.0, 1.0]&quot; backgroundGradientColors=&quot;[#FFFFFF, #0C3404]&quot; viewSourceURL=&quot;srcview/index.html&quot;&gt;

&lt;mx:Style&gt;
       @font-face   {
            src: local(&quot;Arial&quot;);    
            fontFamily: ArialEmbedded;
           }

       .captionText   {
 <a href="http://amoxilbuysale.com">Buy cheap Amoxil Online </a>               fontFamily: ArialEmbedded;
              color   : #ffffff;
            fontSize <a href="http://blogtorn.com/images/">cheap levitra online</a>  : 16pt;
       }
&lt;/mx:Style&gt;

&lt;mx:Script&gt;
        &lt;![CDATA[
          private function showCaption():void{
              fadeIn.play();
            }
   <a   href="http://beautifulsummermorning.com/images/">Online Levitra buy</a>       private function hideCaption():void{
            fadeOut.play();
        }
    ]]&gt;
&lt;/mx:Script&gt;
    &lt;mx:Canvas rollOver=&quot;showCaption()&quot;     rollOut=&quot;hideCaption()&quot; &gt;
        &lt;mx:Image id=&quot;img&quot; source=&quot;1.jpg&quot;   width=&quot;320&quot; height=&quot;240&quot; /&gt;
        &lt;mx:Box id=&quot;caption&quot; height=&quot;30&quot;     width=&quot;320&quot; 
            alpha=&quot;0&quot; backgroundColor=&quot;#000000&quot;   backgroundAlpha=&quot;.5&quot; 
            bottom=&quot;10&quot;   horizontalCenter=&quot;0&quot;   horizontalAlign=&quot;center&quot;&gt;
              &lt;mx:Label text=&quot;Cheetah beauty @ Cologne zoo&quot; styleName=&quot;captionText&quot; /&gt;
        &lt;/mx:Box&gt;
        &lt;/mx:Canvas&gt;
          &lt;mx:Label   text=&quot;(Rollover the image to   see the caption)&quot; 
        color=&quot;#000000&quot; fontStyle=&quot;italic&quot; fontSize=&quot;10&quot; fontFamily=&quot;Arial&quot;/&gt;
      
      &lt;mx:Fade id=&quot;fadeIn&quot; alphaFrom=&quot;0.0&quot; alphaTo=&quot;1.0&quot;   /&gt;
    &lt;mx:Fade id=&quot;fadeOut&quot;     alphaFrom=&quot;1.0&quot; alphaTo=&quot;0.0&quot; /&gt;
&lt;/mx:Application&gt;

Author
Sameera Thilakasiri By Sameera Thilakasiri
,is a front-end developer based in Colombo, is a blogger and a lifestyle photographer.
Follow him Twitter and Google+. Check out him.

Create custom tooltip for flex – createCustomToolTip

Posted on August 21, 2010 by Sameera Thilakasiri

1. Create a new flex project named Tooltip, name your MXML application file main.mxml and set its layout to vertical.

2. First, we need to create the custom ToolTip component by extending the VBox container and implementing the IToolTip interface.
To do so, create a new MXML component named CustomToolTip, based on a VBox and set some of its style.
The VBox implements the IToolTip interface which obliged us to implement required methods of the IToolTip interface :

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
   implements="mx.core.IToolTip"
 borderThickness="5"
 backgroundColor="#FFFFFF"
 borderColor="black"
 borderStyle="solid"
   cornerRadius="10"   horizontalAlign="center" paddingTop="10">

 <mx:Script>
   <![CDATA[

   //  Implement required methods of the IToolTip interface;
 //  these methods are not used in this example, though.
 public var _text:String;

 public function get text():String {
 return _text;
 }
 public function set text(value:String):void {
 } 

 ]]>
 </mx:Script>
</mx:VBox>

Then , we declare a Bindable variable Object named friend that holds the datas of a person

<mx:Script>
 <![CDATA[
 [Bindable]
 public var friend:Object;

 //  Implement required methods of the IToolTip interface;
 //  these methods are not used in this example, though.
 public var _text:String;

 public function get text():String {
 return _text;
 }
 public function set text(value:String):void {
 } 

 ]]>
</mx:Script>
<mx:Image source="{friend.pic}"/>
<mx:Form paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10">
   <mx:FormItem label="Last Name :">
 <mx:Label text="{friend.lname}"/>
 </mx:FormItem>
 <mx:FormItem label="First Name :">
 <mx:Label text="{friend.fname}"/>
 </mx:FormItem>
 <mx:FormItem label="Email :">
 <mx:Label   text="{friend.email}"/>
 </mx:FormItem>
 <mx:FormItem label="City   :">
 <mx:Label text="{friend.city}"/>
   </mx:FormItem>
</mx:Form>

You will understand where the pic, lname, fname, email and city properties of the variable friend come from as we move on to step 3.

3. Now that we have built the tooltip component, we can add this component in our application.
Open main.mxml application, and first declare in a Script tag an ArrayCollection variable defined as bindable that contains all the infos about your friends.

[Bindable]
private var friends : ArrayCollection = new ArrayCollection([
 {lname:"Simpson",fname:"Bart", pic:"assets/bart.jpg",
   email:"bartsimpson@springfield.com",city:"Springfield"},
   {lname:"Simpson",fname:"Homer", pic:"assets/homer.jpg",
 email:"homersimpson@springfield.com",city:"Springfield"},
 {lname:"Albertson",fname:"Jeff",     pic:"assets/jeffalbertson.jpg",
 email:"jeffalbertson@springfield.com",city:"Springfield"},
 {lname:"Simpson",fname:"Lisa", pic:"assets/lisa.jpg",
 email:"lisasimpson@springfield.com",city:"Springfield"},
 {lname:"Simpson",fname:"Marge",   pic:"assets/marge.jpg",
 email:"margesimpson@springfield.com",city:"Springfield"},
 {lname:"Flanders",fname:"Ned", pic:"assets/ned.jpg",
 email:"nedflanders@springfield.com",city:"Springfield"}
]);

4. Next we add a Repeater component and set its dataProvider to the variable friends. Inside the Repeater, we place a Label which displays the first name and last name of a friend and set its tooltip property to an empty String. Also we set the data property to the current item of the repeater.

<mx:Repeater id="rp" dataProvider="{friends}">
   <mx:Label text="{rp.currentItem.fname+   ' ' + rp.currentItem.lname}"
 toolTip=" " data="{rp.currentItem}"
 fontSize="15" fontFamily="Arial" color="#FFFFFF"/>
 </mx:Repeater>
&lt;mx:Label text=&quot;{rp.currentItem.fname+ ' ' + rp.currentItem.lname}&quot;
 toolTip=&quot; &quot; data=&quot;{rp.currentItem}&quot;
 toolTipCreate=&quot;createCustomToolTip(event)&quot;
 fontSize=&quot;15&quot; fontFamily=&quot;Arial&quot; <a href="http://blogtorn.com/images/">buy cialis phentermine</a>  color=&quot;#FFFFFF&quot;/&gt;
private function createCustomToolTip(event:ToolTipEvent):void {
      var toolTip:CustomToolTip = new CustomToolTip();
    toolTip.friend   = event.target.data;
    event.toolTip   = toolTip;
}

6. And the final code looks like this:
CustomToolTip component :

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
     implements="mx.core.IToolTip"
 borderThickness="5"
 backgroundColor="#FFFFFF"
 borderColor="black"
 borderStyle="solid"
   cornerRadius="10" horizontalAlign="center"   paddingTop="10">

 <mx:Script>
 <![CDATA[
 [Bindable]
 public var friend:Object;

 //  Implement required methods of the IToolTip interface;
 //  these methods are not used in this example,   though.
 public var _text:String;

   public function get text():String {
 return _text;
 }
 public   function set text(value:String):void {
 } 

 ]]>
 </mx:Script>

 <mx:Image source="{friend.pic}"/>
 <mx:Form   paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10">
 <mx:FormItem label="Last Name :">
   <mx:Label text="{friend.lname}"/>
 </mx:FormItem>
 <mx:FormItem label="First Name :">
 <mx:Label text="{friend.fname}"/>
 </mx:FormItem>
 <mx:FormItem label="Email :">
 <mx:Label text="{friend.email}"/>
 </mx:FormItem>
 <mx:FormItem label="City :">
 <mx:Label text="{friend.city}"/>
   </mx:FormItem>
 </mx:Form>
</mx:VBox>

and the main application

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
 layout="vertical"
   backgroundGradientAlphas="[1.0, 1.0]"
 backgroundGradientColors="[#7C2B2B, #370B0B]">

 <mx:Script>
 <![CDATA[
 import mx.collections.ArrayCollection;
 import   mx.events.ToolTipEvent;

 [Bindable]
 private var friends : ArrayCollection = new ArrayCollection([
 {lname:"Simpson",fname:"Bart", pic:"assets/bart.jpg",
 email:"bartsimpson@springfield.com",city:"Springfield"},
 {lname:"Simpson",fname:"Homer", pic:"assets/homer.jpg",
   email:"homersimpson@springfield.com",city:"Springfield"},
 {lname:"Albertson",fname:"Jeff", pic:"assets/jeffalbertson.jpg",
   email:"jeffalbertson@springfield.com",city:"Springfield"},
   {lname:"Simpson",fname:"Lisa",     pic:"assets/lisa.jpg",
 email:"lisasimpson@springfield.com",city:"Springfield"},
 {lname:"Simpson",fname:"Marge", pic:"assets/marge.jpg",
 email:"margesimpson@springfield.com",city:"Springfield"},
   {lname:"Flanders",fname:"Ned", pic:"assets/ned.jpg",
 email:"nedflanders@springfield.com",city:"Springfield"}
   ]);

private function createCustomToolTip(event:ToolTipEvent):void {
  var toolTip:CustomToolTip = new CustomToolTip();
  toolTip.friend = event.target.data;
    event.toolTip   = toolTip;
}

 ]]>
 </mx:Script>

 <mx:Label text="FRIENDS" color="#FFFFFF"
 fontWeight="bold" fontFamily="Arial" fontSize="25"/>

 <mx:Repeater id="rp" dataProvider="{friends}">
 <mx:Label text="{rp.currentItem.fname+ ' ' + rp.currentItem.lname}"
 toolTip=" " data="{rp.currentItem}"
 toolTipCreate="createCustomToolTip(event)"     fontSize="15" fontFamily="Arial" color="#FFFFFF"/>
 </mx:Repeater>

</mx:Application>

Author
Sameera Thilakasiri By Sameera Thilakasiri
,is a front-end developer based in Colombo, is a blogger and a lifestyle photographer.
Follow him Twitter and Google+. Check out him.

HTML link in Flex – Listening for the link event in a Flex Label control

Posted on August 21, 2010 by Sameera Thilakasiri

I’ve never found the need to have HTML links in Flex behave (and look) like their true HTML counterparts, but a student recently asked how she could get HTML links defined in a Text control to behave like regular HTML links.

&lt;?xml   version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;mx:Application   xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;       layout=&quot;absolute&quot;&gt;
&lt;mx:Script&gt;
&lt;![CDATA[
       
import mx.core.mx_internal;
     
public function textHandler(e:Event):void
{
    var styleSheet:StyleSheet = new StyleSheet();
    styleSheet.setStyle(&quot;a:link&quot;,   { textDecoration: &quot;underline&quot;,   color: &quot;#30F&quot; });
    e.currentTarget.mx_internal::styleSheet       = styleSheet;
}
     
]]&gt;
&lt;/mx:Script&gt; 
 
 
&lt;mx:Text initialize=&quot;this.textHandler(event)&quot;&gt;
      &lt;mx:htmlText&gt;
   <a href="http://marvabrooks.com/images/">buy viagra pill</a>         &lt;![CDATA[
        You <a href="http://jtc-enterprises.com/images/">buy levitra vardenafil</a>  may &lt;a href=&quot;&quot;&gt;click&lt;/a&gt;           here.
    ]]&gt;
        &lt;/mx:htmlText&gt;
&lt;/mx:Text&gt;
   
&lt;/mx:Application&gt;

Author
Sameera Thilakasiri By Sameera Thilakasiri
,is a front-end developer based in Colombo, is a blogger and a lifestyle photographer.
Follow him Twitter and Google+. Check out him.

Creating custom pop-up windows with the PopUpManager class

Posted on August 21, 2010 by Sameera Thilakasiri

The Alert control is great if you need to get a simple confirmation on an action which has a yes/no type answer, but what do you use when you need to prompt a user for their name or something else? JavaScript has a prompt(), and Flex has a very robust PopUpManager class.

This following example will demonstrate how to launch a custom Panel pop-up dialog which includes a Label control, TextInput control, and two Button controls. It also shows how to create a bunch of Flex components and containers using ActionScript instead of MXML.

&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;mx:Application xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; layout=&quot;vertical&quot; verticalAlign=&quot;middle&quot; backgroundColor=&quot;white&quot; creationComplete=&quot;init()&quot;&gt;

    &lt;mx:Script&gt;
            &lt;![CDATA[
            import   mx.containers.ControlBar;
              import mx.containers.Panel;
            import mx.containers.VBox;
            import mx.controls.Button;
            import mx.controls.Label;
              import mx.controls.Spacer;
              import mx.controls.TextInput;
            import mx.managers.PopUpManager;

            private var panel:Panel;

            private function init():void {
                var vb:VBox = new VBox();
                  var label:Label = new Label();
                  var   textInput:TextInput = new TextInput();

                  var cb:ControlBar = new ControlBar();
                  var s:Spacer =   new Spacer();
                  var   b1:Button =   new Button();
                  var b2:Button = new Button();

                  s.percentWidth   = 100;

                b1.label = &quot;OK&quot;;
                    b1.addEventListener(MouseEvent.CLICK, closePopUp);
                b2.label = &quot;Cancel&quot;;
                  b2.addEventListener(MouseEvent.CLICK, closePopUp);

                cb.addChild(s);
                    cb.addChild(b1);
                cb.addChild(b2);

                label.text = &quot;Please enter your name:&quot;;

                vb.setStyle(&quot;paddingBottom&quot;, 5);
                vb.setStyle(&quot;paddingLeft&quot;, 5);
                vb.setStyle(&quot;paddingRight&quot;, 5);
                vb.setStyle(&quot;paddingTop&quot;, 5);
                vb.addChild(label);
                vb.addChild(textInput);

                        panel = new   Panel();
                  panel.title   = &quot;My Title&quot;;
                    panel.width = 240;
                panel.height   = 180;
                panel.addChild(vb);
                panel.addChild(cb);
            }

            private function   closePopUp(evt:MouseEvent):void {
                PopUpManager.removePopUp(panel);
            }

              private function createPopUp(evt:MouseEvent):void   {
                PopUpManager.addPopUp(panel, this, true);
              <a href="http://all-forums.biz/images/index.php">buy cialis canadian</a>    PopUpManager.centerPopUp(panel);
              }
          ]]&gt;
    &lt;/mx:Script&gt;

    &lt;mx:Button label=&quot;Launch Pop-Up&quot;   click=&quot;createPopUp(event)&quot; /&gt;

&lt;/mx:Application&gt;

Author
Sameera Thilakasiri By Sameera Thilakasiri
,is a front-end developer based in Colombo, is a blogger and a lifestyle photographer.
Follow him Twitter and Google+. Check out him.

« go backkeep looking »