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

Last change on this file since 15001 was 11040, checked in by richard, 11 years ago

Potlatch 0.10d

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