source: subversion/applications/editors/potlatch/ui.as @ 7133

Last change on this file since 7133 was 7115, checked in by richard, 12 years ago

Potlatch 0.8 - be afraid, be very, very afraid

  • Property svn:executable set to *
File size: 8.2 KB
Line 
1
2        // =====================================================================================
3        // Standard UI
4        // =====================================================================================
5
6        // Checkboxes
7        // UICheckbox.init(x,y,text,state,changefunction)
8
9        UICheckbox=function() {
10        };
11        UICheckbox.prototype=new MovieClip();
12        UICheckbox.prototype.init=function(x,y,prompttext,state,changefunction) {
13                this._x=x;
14                this._y=y;
15                this.state=state;
16                this.doOnChange=changefunction;
17                this.createTextField('prompt',0,13,-5,200,19);
18                this.prompt.text=prompttext;
19                this.prompt.setTextFormat(plainSmall);
20                tw=this.prompt._width=this.prompt.textWidth+5;
21
22                this.createEmptyMovieClip('hitregion',1);
23                with (this.hitregion) {
24                        clear(); beginFill(0,0);
25                        moveTo(0,0); lineTo(tw+15,0);
26                        lineTo(tw+15,15); lineTo(0,15);
27                        endFill();
28                };
29                this.hitregion.onPress=function() {
30                        this._parent.state=!this._parent.state;
31                        this._parent.draw();
32                        this._parent.doOnChange(this._parent.state);
33                };
34
35                this.createEmptyMovieClip('box',2);
36                this.draw();
37        };
38        UICheckbox.prototype.draw=function() {
39                with (this.box) {
40                        clear();
41                        lineStyle(2,0,100);
42                        moveTo(1,0);
43                        lineTo(9,0); lineTo(9,9);
44                        lineTo(0,9); lineTo(0,0);
45                        if (this.state==true) {
46                                lineStyle(2,0,100);
47                                moveTo(1,1); lineTo(8,8);
48                                moveTo(8,1); lineTo(1,8);
49                        }
50                }
51        };
52        Object.registerClass("checkbox",UICheckbox);
53
54        // Pop-up menu
55        // UIMenu.init(x,y,selected option,array of options,tooltip,
56        //                         function to call on close,value of 'this' on close,
57        //                         width)
58       
59        function UIMenu() {
60        };
61        UIMenu.prototype=new MovieClip();
62        UIMenu.prototype.init=function(x,y,selected,options,tooltip,closefunction,closethis,menuwidth) {
63                var i,w,h;
64                this._x=x; this._y=y;
65                this.selected=selected; this.original=selected;
66                this.options=options;
67
68                // create (invisible) movieclip for opened menu
69                this.createEmptyMovieClip("opened",2);
70                this.opened._visible=false;
71                // create child for each option
72                var tw=0;
73                for (i=0; i<options.length; i+=1) {
74                        this.opened.createTextField(i,i+1,3,i*16-1,100,19);
75                        this.opened[i].text=options[i];
76                        this.opened[i].background=true;
77                        this.opened[i].backgroundColor=0x888888;
78                        this.opened[i].setTextFormat(menu_off);
79                        if (this.opened[i].textWidth*1.05>tw) { tw=this.opened[i].textWidth*1.05; }
80                };
81                // create box around menu
82                this.opened.createEmptyMovieClip("box",0);
83                w=tw+7; if (menuwidth>w) { w=menuwidth; } 
84                this.itemwidth=w-7;
85                h=options.length*16+5;
86                with (this.opened.box) {
87                        _y=-2;
88                        clear();
89                        beginFill(0x888888,100);
90                        lineTo(w,0); lineTo(w,h);
91                        lineTo(0,h); lineTo(0,0); endFill();
92                };
93                // adjust all menus to have correct highlight
94                for (i=0; i<options.length; i+=1) {
95                        this.opened[i]._width=this.itemwidth;
96                }
97
98                // create (visible) movieclip for closed menu
99                if (menuwidth>0) { w=menuwidth; } else { w+=11; }
100                this.createEmptyMovieClip("closed",1);
101                this.closed.createEmptyMovieClip("box",0);
102                with (this.closed.box) {
103                        clear();
104                        beginFill(0x888888,100);
105                        lineTo(w,0 ); lineTo(w,17);
106                        lineTo(0,17); lineTo(0,0 ); endFill();
107                        beginFill(0xFFFFFF,100);
108                        moveTo(w-11,7); lineTo(w-3,7);
109                        lineTo(w-7,13); lineTo(w-11,7); endFill();
110                };
111                this.closed.createTextField("current",2,3,-1,this.itemwidth,19);
112                this.closed.current.text=options[selected];
113                this.closed.current.setTextFormat(menu_off);
114                this.closed.current.background=false;
115//              this.closed.current.backgroundColor=0x888888;
116
117                this.onPress=function() { clearFloater(); this.openMenu(); };
118                this.onRelease=function() { this.closeMenu(); };
119                this.onReleaseOutside=function() { this.closeMenu(); };
120                this.onMouseMove=function() { this.trackMenu(); };
121                this.doOnClose=closefunction;
122                this.closeThis=closethis;
123                this.opened[this.selected].backgroundColor=0xDDDDDD;
124                this.opened[this.selected].setTextFormat(menu_on);
125
126                if (tooltip!='') {
127                        this.onRollOver=function() { setFloater(tooltip); };
128                        this.onRollOut =function() { clearFloater(); };
129                }
130        };
131        UIMenu.prototype.trackMenu=function() {
132                if (this.opened._visible) {
133                        this.opened[this.selected].backgroundColor=0x888888;
134                        this.opened[this.selected].setTextFormat(menu_off);
135                        this.selected=this.whichSelection();
136                        this.opened[this.selected].backgroundColor=0xDDDDDD;
137                        this.opened[this.selected].setTextFormat(menu_on);
138                }
139        };
140        UIMenu.prototype.openMenu=function() {
141                this.closed._alpha=50;
142                this.opened._visible=true;
143//              this.opened._y=-15*this.selected;
144                this.opened._y=-15*this.original;
145
146                t=new Object(); t.x=0; t.y=this.opened._height;
147                this.opened.localToGlobal(t);
148                while (t.y>Stage.height) { this.opened._y-=15; t.y-=15; }
149                this.trackMenu();
150        };
151        UIMenu.prototype.closeMenu=function() {
152                if (this.selected>-1) {
153                        this.original=this.selected;
154                        this.closed.current.text=this.options[this.selected];
155                        this.closed.current.setTextFormat(menu_off);
156                        this.closed._alpha=100;
157                        this.opened._visible=false;
158                        mflash=this; flashcount=2;
159                        mflashid=setInterval(function() { mflash.menuFlash(); }, 40);
160                        this.doOnClose.call(this.closeThis,this.selected);
161                } else {
162                        this.closed.current.text=this.options[this.original];
163                        this.closed.current.setTextFormat(menu_off);
164                        this.closed._alpha=100;
165                        this.opened._visible=false;
166                }
167        };
168        UIMenu.prototype.setValue=function(n) {
169                this.opened[this.selected].backgroundColor=0x888888;
170                this.opened[this.selected].setTextFormat(menu_off);
171                this.selected=n; this.original=n;
172                this.closed.current.text=this.options[this.selected];
173                this.closed.current.setTextFormat(menu_off);
174        };
175        UIMenu.prototype.whichSelection=function() {
176                mpos=new Object();
177                mpos.x=_root._xmouse;
178                mpos.y=_root._ymouse;
179                this.opened.globalToLocal(mpos);
180                if (mpos.x>0 && mpos.x<this.itemwidth && mpos.y>0 && mpos.y<this.options.length*15) {
181                        return Math.floor((mpos.y)/15);
182                }
183                return -1;
184        };
185        UIMenu.prototype.menuFlash=function() {
186                // ** flashcount and mflashid are globals, and really shouldn't be
187                flashcount-=1; if (flashcount==0) { clearInterval(mflashid); };
188                if (flashcount/2!=Math.floor(flashcount/2)) {
189                        this.closed.current.backgroundColor=0xDDDDDD;
190                        this.closed.current.setTextFormat(menu_on);
191                } else {
192                        this.closed.current.backgroundColor=0x888888;
193                        this.closed.current.setTextFormat(menu_off);
194                }
195                updateAfterEvent();
196        };
197
198        Object.registerClass("menu",UIMenu);
199
200
201        // modalDialogue
202
203        function createModalDialogue(w,h,buttons,closefunction) {
204                clearFloater();
205                _root.createEmptyMovieClip("modal",0xFFFFFE);
206                var ox=(Stage.width-w)/2; var oy=(Stage.height-panelheight-h)/2;
207
208                // Blank all other areas
209                _root.modal.createEmptyMovieClip("blank",1);
210                with (_root.modal.blank) {
211                        beginFill(0xFFFFFF,0); moveTo(0,0); lineTo(Stage.width,0);
212                        lineTo(Stage.width,Stage.height); lineTo(0,Stage.height); lineTo(0,0); endFill();
213                }
214                _root.modal.blank.onPress=function() {};
215                _root.modal.blank.useHandCursor=false;
216                _root.keytarget='dialogue';
217                _root.basekeytarget=_root.keytarget;
218
219                // Create dialogue box
220                _root.modal.createEmptyMovieClip("box",2);
221                with (_root.modal.box) {
222                        _x=ox; _y=oy;
223                        beginFill(0xBBBBBB,100);
224                        moveTo(0,0);
225                        lineTo(w,0); lineTo(w,h);
226                        lineTo(0,h); lineTo(0,0); endFill();
227                }
228
229                // Create buttons
230                for (var i=0; i<buttons.length; i+=1) {
231                        _root.modal.box.createEmptyMovieClip(i,i*2+1);
232                        drawButton(_root.modal.box[i],w-60*(buttons.length-i),h-30,buttons[i],"");
233                        _root.modal.box[i].onPress=function() {
234                                if (closefunction) {
235                                        var keep = closefunction(buttons[this._name]);
236                                        if ( !keep )
237                                                clearModalDialogue();
238                                } else
239                                        clearModalDialogue();
240                        };
241                        _root.modal.box[i].useHandCursor=true;
242                }
243        }
244
245        function clearModalDialogue() {
246                _root.keytarget='';
247                _root.basekeytarget='';
248                _root.createEmptyMovieClip("modal",0xFFFFFE);
249        }
250
251
252        // drawButton           - draw white-on-grey button
253        // (object,x,y,button text, text to right)
254
255        function drawButton(buttonobject,x,y,btext,ltext) {
256                with (buttonobject) {
257                        _x=x; _y=y;
258                        beginFill(0x7F7F7F,100);
259                        moveTo(0,0);
260                        lineTo(50,0); lineTo(50,17);
261                        lineTo(0,17); lineTo(0,0); endFill();
262                }
263                buttonobject.useHandCursor=true;
264                buttonobject.createTextField('btext',1,0,-1,48,20);
265                with (buttonobject.btext) {
266                        text=btext; setTextFormat(boldWhite);
267                        selectable=false; type='dynamic';
268                        _x=(45-textWidth)/2;
269                }
270                if (ltext!="") {
271                        buttonobject.createTextField("explain",2,54,-1,300,20);
272                        writeText(buttonobject.explain,ltext);
273                }
274        }
Note: See TracBrowser for help on using the repository browser.