source: code/Website/open-flash-chart/elements/menu/Menu.as

Last change on this file was 7849, checked in by dennisw, 15 years ago
File size: 3.7 KB
Line 
1package elements.menu {
2
3 import flash.display.Sprite;
4 import flash.events.MouseEvent;
5 import elements.menu.menuItem;
6 import caurina.transitions.Tweener;
7 import caurina.transitions.Equations;
8 import string.Utils;
9 import flash.filters.DropShadowFilter;
10
11 public class Menu extends Sprite {
12
13 private var original_alpha:Number;
14 private var props:Properties;
15 private var first_showing:Boolean;
16 private var hidden_pos:Number;
17
18 public function Menu( chartID:String, json:Object ) {
19
20 this.props = new DefaultMenuProperties(json);
21
22 this.original_alpha = 0.4;
23 this.alpha = 1;
24
25 var pos:Number = 5;
26 var height:Number = 0;
27 this.first_showing = true;
28
29 for each ( var val:Object in json.values )
30 {
31 var tmp:DefaultCameraIconProperties = new DefaultCameraIconProperties(val);
32 var menu_item:menuItem = menu_item_factory.make(chartID, tmp);
33 menu_item.x = 5;
34 menu_item.y = pos;
35 this.addChild(menu_item);
36 height = menu_item.y + menu_item.height + 5;
37 pos += menu_item.height + 5;
38 }
39
40 var width:Number = 0;
41
42 for ( var i:Number = 0; i < this.numChildren; i++ )
43 width = Math.max( width, this.getChildAt(i).width );
44
45 this.draw(width+10, height);
46 this.hidden_pos = height;
47
48 /*
49 var dropShadow:DropShadowFilter = new flash.filters.DropShadowFilter();
50 dropShadow.blurX = 4;
51 dropShadow.blurY = 4;
52 dropShadow.distance = 4;
53 dropShadow.angle = 45;
54 dropShadow.quality = 2;
55 dropShadow.alpha = 0.5;
56 // apply shadow filter
57 this.filters = [dropShadow];
58 */
59
60
61 this.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
62 this.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
63 }
64
65 private function draw(width:Number, height:Number): void {
66
67 this.graphics.clear();
68
69 var colour:Number = string.Utils.get_colour( this.props.get('colour') );
70 var o_colour:Number = string.Utils.get_colour( this.props.get('outline-colour') );
71
72 this.graphics.lineStyle( 1, o_colour );
73 this.graphics.beginFill(colour, 1);
74 this.graphics.moveTo( 0, -2 );
75 this.graphics.lineTo( 0, height );
76 this.graphics.lineTo( width-25, height );
77 this.graphics.lineTo( width-20, height+10 );
78 this.graphics.lineTo( width, height+10 );
79 this.graphics.lineTo( width, -2 );
80 this.graphics.endFill();
81
82 // arrows
83 this.graphics.lineStyle( 1, o_colour );
84 this.graphics.moveTo( width-15, height+3 );
85 this.graphics.lineTo( width-10, height+8 );
86 this.graphics.lineTo( width-5, height+3 );
87
88 this.graphics.moveTo( width-15, height );
89 this.graphics.lineTo( width-10, height+5 );
90 this.graphics.lineTo( width-5, height );
91
92 }
93
94 public function mouseOverHandler(event:MouseEvent):void {
95 Tweener.removeTweens(this);
96 Tweener.addTween(this, { y:0, time:0.4, transition:Equations.easeOutBounce } );
97 Tweener.addTween(this, { alpha:1, time:0.4, transition:Equations.easeOutBounce } );
98 }
99
100 public function mouseOutHandler(event:MouseEvent):void {
101 this.hide_menu();
102 }
103
104 private function hide_menu(): void
105 {
106 Tweener.removeTweens(this);
107 Tweener.addTween(this, { y:-this.hidden_pos, time:0.4, transition:Equations.easeOutBounce } );
108 Tweener.addTween(this, { alpha:this.original_alpha, time:0.4, transition:Equations.easeOutBounce } );
109 }
110
111 public function resize(): void {
112
113 if ( this.first_showing ) {
114 this.y = 0;
115 this.first_showing = false;
116 Tweener.removeTweens(this);
117 Tweener.addTween(this, { time:3, onComplete:this.hide_menu } );
118 }
119 else {
120 this.y = -(this.height) + 10;
121 }
122 this.x = this.stage.stageWidth - this.width - 5;
123
124 }
125 }
126}
Note: See TracBrowser for help on using the repository browser.