Instantly share code, notes, and snippets.
Created
May 4, 2012 09:52
-
Star
(0)
0
You must be signed in to star a gist -
Fork
(0)
0
You must be signed in to fork a gist
-
Save tdavies/2593691 to your computer and use it in GitHub Desktop.
fed up with writing the same button code?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Name: tom Davies | |
* Date: 04/05/12 | |
* Time: 10:08 | |
*/ | |
package com.accumulate.common.utils { | |
import com.accumulate.common.signal.Signal; | |
import flash.display.Sprite; | |
import flash.events.Event; | |
import flash.events.MouseEvent; | |
public class ButtonHelper { | |
private const _mouseDown:Signal = new Signal(); | |
private const _mouseUp:Signal = new Signal(); | |
private const _mouseOver:Signal = new Signal(); | |
private const _mouseOut:Signal = new Signal(); | |
private const _clicked:Signal = new Signal(); | |
private var _enabled:Boolean; | |
private var _skin:Sprite; | |
public function ButtonHelper(skin:Sprite) { | |
_skin = skin; | |
skin.useHandCursor = true; | |
skin.buttonMode = true; | |
skin.mouseChildren = false; | |
if(skin.stage){ | |
addEventListener(); | |
}else{ | |
_skin.addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler,false,0,true); | |
} | |
} | |
public function over(handler:Function):ButtonHelper{ | |
_mouseOver.add(handler); | |
return this; | |
} | |
public function out(handler:Function):ButtonHelper{ | |
_mouseOut.add(handler); | |
return this; | |
} | |
public function up(handler:Function):ButtonHelper{ | |
_mouseUp.add(handler); | |
return this; | |
} | |
public function down(handler:Function):ButtonHelper{ | |
_mouseDown.add(handler); | |
return this; | |
} | |
public function click(handler:Function):ButtonHelper{ | |
_clicked.add(handler); | |
return this; | |
} | |
public function get enabled():Boolean { | |
return _enabled; | |
} | |
public function set enabled(value:Boolean):void { | |
_enabled = value; | |
_skin.mouseEnabled = _enabled; | |
} | |
private function addedToStageHandler(event:Event):void { | |
_skin.removeEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); | |
addEventListener(); | |
} | |
private function addEventListener():void { | |
_skin.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler); | |
_skin.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler); | |
_skin.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); | |
_skin.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); | |
_skin.addEventListener(MouseEvent.CLICK, mouseClickHandler); | |
_skin.addEventListener(Event.REMOVED_FROM_STAGE, removedFromStageHandler); | |
} | |
private function removeEventListener():void { | |
_skin.removeEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler); | |
_skin.removeEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler); | |
_skin.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); | |
_skin.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); | |
_skin.removeEventListener(MouseEvent.CLICK, mouseClickHandler); | |
_skin.removeEventListener(Event.REMOVED_FROM_STAGE, removedFromStageHandler); | |
_mouseUp.removeAll(); | |
_mouseDown.removeAll(); | |
_mouseOut.removeAll(); | |
_mouseOver.removeAll(); | |
_clicked.removeAll(); | |
} | |
private function removedFromStageHandler(event:Event):void { | |
removeEventListener(); | |
} | |
private function mouseUpHandler(event:MouseEvent):void { | |
_mouseUp.dispatch(); | |
} | |
private function mouseDownHandler(event:MouseEvent):void { | |
_mouseDown.dispatch(); | |
} | |
private function mouseOutHandler(event:MouseEvent):void { | |
_mouseOut.dispatch(); | |
} | |
private function mouseOverHandler(event:MouseEvent):void { | |
_mouseOver.dispatch(); | |
} | |
private function mouseClickHandler(event:MouseEvent):void { | |
_clicked.dispatch(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment