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

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

Potlatch 0.8b

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