Skip to content

Instantly share code, notes, and snippets.

@tdavies
Created May 4, 2012 09:52
Show Gist options
  • Save tdavies/2593691 to your computer and use it in GitHub Desktop.
Save tdavies/2593691 to your computer and use it in GitHub Desktop.
fed up with writing the same button code?
/**
* 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