~eda-qa/dhlib/main

« back to all changes in this revision

Viewing changes to lib/ui/ButtonBase.mhx

  • Committer: edA-qa mort-ora-y
  • Date: 2010-04-03 10:34:57 UTC
  • Revision ID: eda-qa@disemia.com-20100403103457-ro7xslj1ct0wpnm1
adding common button base

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package ui;
 
2
 
 
3
import flash.events.MouseEvent;
 
4
import flash.display.Sprite;
 
5
 
 
6
/** 
 
7
 * Implements a common base for button like items. This allows the creation of custom
 
8
 * draw classes far easier than working with Button and simpler than mimic'ing all behaviour.
 
9
 *
 
10
 * You must override _resize
 
11
 *      It will be called whenever the image might change (status change of some kind). You 
 
12
 * may use the down and over variables to determine how to draw the button.
 
13
 */
 
14
class ButtonBase extends Sprite, implements Widget
 
15
{
 
16
        var down : Bool;        //the button is in the down position
 
17
        var over : Bool; //the mouse is over the button
 
18
        
 
19
        var event : Action; //the action to perform on clicking
 
20
        
 
21
        function new( event : Action )
 
22
        {
 
23
                super();
 
24
                MixinWidget();
 
25
                
 
26
                this.event = event;
 
27
                down = false;
 
28
                over = false;
 
29
                enabled = true;
 
30
                
 
31
                //setup flash
 
32
                buttonMode = true;
 
33
                useHandCursor = true;   //look clickable
 
34
                mouseChildren = false;  //so added images don't change cursor
 
35
                
 
36
                addEventListener( MouseEvent.MOUSE_DOWN, onMouseDown, false, 0, true /*weak*/ );
 
37
                addEventListener( MouseEvent.MOUSE_UP, onMouseUp,false, 0, true /*weak*/ );
 
38
                addEventListener( MouseEvent.MOUSE_OVER, onMouseOver,false, 0, true /*weak*/ );
 
39
                addEventListener( MouseEvent.MOUSE_OUT, onMouseOut,false, 0, true /*weak*/ );
 
40
        }
 
41
        
 
42
        function onMouseDown( evt : MouseEvent )
 
43
        {
 
44
                evt.stopPropagation();  //we hide this from our visual ancestors
 
45
                if( !enabled )
 
46
                        return;
 
47
                        
 
48
                down = true;
 
49
                update();
 
50
        }
 
51
        
 
52
        function onMouseUp( evt : MouseEvent )
 
53
        {
 
54
                evt.stopPropagation();  //we hide this from our visual ancestors
 
55
                if( !enabled )
 
56
                        return;
 
57
                        
 
58
                var wasDown = down;
 
59
                down = false;
 
60
                update();
 
61
                
 
62
                //only handle if we were actually down, to prevent spurious half-events from activating
 
63
                if( wasDown )
 
64
                        Action.handle( this, event );
 
65
        }
 
66
        
 
67
        function onMouseOver( evt : MouseEvent )
 
68
        {
 
69
                over = true;
 
70
                down = evt.buttonDown;
 
71
                
 
72
                if( !enabled )
 
73
                        return;
 
74
                        
 
75
                update();
 
76
        }
 
77
        
 
78
        function onMouseOut( evt : MouseEvent )
 
79
        {
 
80
                over = false;
 
81
                down = false;
 
82
                
 
83
                if( !enabled )
 
84
                        return;
 
85
                        
 
86
                update();
 
87
        }
 
88
        
 
89
        function _resize( w : Float, h : Float )
 
90
        {
 
91
                Assert.pureVirtual();
 
92
        }
 
93
        
 
94
        define(`AbstractGFX')
 
95
        include(`MixinWidget.ihx')
 
96
}