Mercurial > hg > Applications > Lite
comparison xf-disp @ 2:1c57a78f1d98
Initial revision
author | kono |
---|---|
date | Thu, 18 Jan 2001 23:27:24 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1:683efd6f9a81 | 2:1c57a78f1d98 |
---|---|
1 #!/usr/local/bin/wish -f | |
2 # Program: xf-disp | |
3 # Tcl version: 7.3 (Tcl/Tk/XF) | |
4 # Tk version: 3.6 | |
5 # XF version: 2.2 | |
6 # | |
7 | |
8 # module inclusion | |
9 global env | |
10 global xfLoadPath | |
11 global xfLoadInfo | |
12 set xfLoadInfo 0 | |
13 if {[info exists env(XF_LOAD_PATH)]} { | |
14 if {[string first $env(XF_LOAD_PATH) /usr/local/lib/] == -1} { | |
15 set xfLoadPath $env(XF_LOAD_PATH):/usr/local/lib/ | |
16 } { | |
17 set xfLoadPath /usr/local/lib/ | |
18 } | |
19 } { | |
20 set xfLoadPath /usr/local/lib/ | |
21 } | |
22 | |
23 global argc | |
24 global argv | |
25 global tkVersion | |
26 set tmpArgv "" | |
27 for {set counter 0} {$counter < $argc} {incr counter 1} { | |
28 case [string tolower [lindex $argv $counter]] in { | |
29 {-xfloadpath} { | |
30 incr counter 1 | |
31 set xfLoadPath "[lindex $argv $counter]:$xfLoadPath" | |
32 } | |
33 {-xfstartup} { | |
34 incr counter 1 | |
35 source [lindex $argv $counter] | |
36 } | |
37 {-xfbindfile} { | |
38 incr counter 1 | |
39 set env(XF_BIND_FILE) "[lindex $argv $counter]" | |
40 } | |
41 {-xfcolorfile} { | |
42 incr counter 1 | |
43 set env(XF_COLOR_FILE) "[lindex $argv $counter]" | |
44 } | |
45 {-xfcursorfile} { | |
46 incr counter 1 | |
47 set env(XF_CURSOR_FILE) "[lindex $argv $counter]" | |
48 } | |
49 {-xffontfile} { | |
50 incr counter 1 | |
51 set env(XF_FONT_FILE) "[lindex $argv $counter]" | |
52 } | |
53 {-xfmodelmono} { | |
54 if {$tkVersion >= 3.0} { | |
55 tk colormodel . monochrome | |
56 } | |
57 } | |
58 {-xfmodelcolor} { | |
59 if {$tkVersion >= 3.0} { | |
60 tk colormodel . color | |
61 } | |
62 } | |
63 {-xfloading} { | |
64 set xfLoadInfo 1 | |
65 } | |
66 {-xfnoloading} { | |
67 set xfLoadInfo 0 | |
68 } | |
69 {default} { | |
70 lappend tmpArgv [lindex $argv $counter] | |
71 } | |
72 } | |
73 } | |
74 set argv $tmpArgv | |
75 set argc [llength $tmpArgv] | |
76 unset counter | |
77 unset tmpArgv | |
78 | |
79 | |
80 # procedure to show window .top0 | |
81 proc ShowWindow.top0 {args} {# xf ignore me 7 | |
82 | |
83 # build widget .top0 | |
84 if {"[info procs XFEdit]" != ""} { | |
85 catch "XFDestroy .top0" | |
86 } { | |
87 catch "destroy .top0" | |
88 } | |
89 toplevel .top0 \ | |
90 -background {Cornsilk2} | |
91 | |
92 # Window manager configurations | |
93 global tkVersion | |
94 wm positionfrom .top0 "" | |
95 wm sizefrom .top0 "" | |
96 wm maxsize .top0 1000 1000 | |
97 wm minsize .top0 10 10 | |
98 wm title .top0 {Execution} | |
99 | |
100 | |
101 # build widget .top0.frame0 | |
102 frame .top0.frame0 \ | |
103 -background {Cornsilk2} \ | |
104 -relief {raised} | |
105 | |
106 # build widget .top0.frame0.scrollbar3 | |
107 scrollbar .top0.frame0.scrollbar3 \ | |
108 -activeforeground {CornSilk2} \ | |
109 -background {Cornsilk2} \ | |
110 -command {.top0.frame0.canvas2 xview} \ | |
111 -foreground {#ffe4c4} \ | |
112 -orient {horizontal} \ | |
113 -relief {raised} | |
114 | |
115 # build widget .top0.frame0.scrollbar1 | |
116 scrollbar .top0.frame0.scrollbar1 \ | |
117 -activeforeground {CornSilk2} \ | |
118 -background {Cornsilk2} \ | |
119 -command {.top0.frame0.canvas2 yview} \ | |
120 -foreground {#ffe4c4} \ | |
121 -relief {raised} | |
122 | |
123 # build widget .top0.frame0.canvas2 | |
124 canvas .top0.frame0.canvas2 \ | |
125 -background {Cornsilk2} \ | |
126 -confine {0} \ | |
127 -height {384} \ | |
128 -insertofftime {600} \ | |
129 -relief {raised} \ | |
130 -scrollregion {-1c -1c 20c 20c} \ | |
131 -selectbackground {#b2dfee} \ | |
132 -selectborderwidth {1} \ | |
133 -selectforeground {CornSilk2} \ | |
134 -width {394} \ | |
135 -xscrollcommand {.top0.frame0.scrollbar3 set} \ | |
136 -yscrollcommand {.top0.frame0.scrollbar1 set} | |
137 # bindings | |
138 bind .top0.frame0.canvas2 <Button-1> {crosshair .top0.frame0.canvas2 %x %y} | |
139 | |
140 # pack widget .top0.frame0 | |
141 pack append .top0.frame0 \ | |
142 .top0.frame0.scrollbar1 {right frame center filly} \ | |
143 .top0.frame0.canvas2 {top frame center expand fill} \ | |
144 .top0.frame0.scrollbar3 {top frame center fillx} | |
145 | |
146 # build widget .top0.frame1 | |
147 frame .top0.frame1 \ | |
148 -background {Cornsilk2} \ | |
149 -borderwidth {2} \ | |
150 -relief {raised} | |
151 | |
152 # build widget .top0.frame1.label6 | |
153 label .top0.frame1.label6 \ | |
154 -anchor {w} \ | |
155 -background {Cornsilk2} \ | |
156 -font {8x16} \ | |
157 -kanjifont {kanji16} \ | |
158 -relief {raised} \ | |
159 -text {States:} | |
160 | |
161 # build widget .top0.frame1.button13 | |
162 button .top0.frame1.button13 \ | |
163 -activebackground {#eed5b7} \ | |
164 -activeforeground {CornSilk2} \ | |
165 -background {Cornsilk2} \ | |
166 -command {# regexp {([0-9]+)x([0-9]+)} [wm geometry .] dm width height | |
167 # set height [expr $height-300] | |
168 # lite map $height | |
169 lite map 300 | |
170 } \ | |
171 -disabledforeground {#b0b0b0} \ | |
172 -font {8x16} \ | |
173 -kanjifont {kanji16} \ | |
174 -text {Map} | |
175 | |
176 # build widget .top0.frame1.button0 | |
177 button .top0.frame1.button0 \ | |
178 -activeforeground {CornSilk2} \ | |
179 -background {Cornsilk2} \ | |
180 -command {lite generate a} \ | |
181 -font {8x16} \ | |
182 -kanjifont {*-fixed-*-normal--16-*-jisx0208.1983-*} \ | |
183 -text {Generate} | |
184 | |
185 # pack widget .top0.frame1 | |
186 pack append .top0.frame1 \ | |
187 .top0.frame1.label6 {left frame center expand fillx} \ | |
188 .top0.frame1.button13 {left frame center} \ | |
189 .top0.frame1.button0 {left frame center fillx} | |
190 | |
191 # build widget .top0.frame6 | |
192 frame .top0.frame6 \ | |
193 -background {Cornsilk2} \ | |
194 -borderwidth {2} \ | |
195 -relief {raised} | |
196 | |
197 # build widget .top0.frame6.button8 | |
198 button .top0.frame6.button8 \ | |
199 -activebackground {#eed5b7} \ | |
200 -activeforeground {CornSilk2} \ | |
201 -background {Cornsilk2} \ | |
202 -command {lite counter a} \ | |
203 -disabledforeground {#b0b0b0} \ | |
204 -font {8x16} \ | |
205 -kanjifont {kanji16} \ | |
206 -text {Counter Example} | |
207 | |
208 # build widget .top0.frame6.button10 | |
209 button .top0.frame6.button10 \ | |
210 -activebackground {#eed5b7} \ | |
211 -activeforeground {CornSilk2} \ | |
212 -background {Cornsilk2} \ | |
213 -command {lite execute a} \ | |
214 -disabledforeground {#b0b0b0} \ | |
215 -font {8x16} \ | |
216 -kanjifont {kanji16} \ | |
217 -text {Execute} | |
218 | |
219 # build widget .top0.frame6.button9 | |
220 button .top0.frame6.button9 \ | |
221 -activebackground {#eed5b7} \ | |
222 -activeforeground {CornSilk2} \ | |
223 -background {Cornsilk2} \ | |
224 -command {canvaswh .top0.frame0.canvas2 1.6} \ | |
225 -disabledforeground {#b0b0b0} \ | |
226 -font {8x16} \ | |
227 -kanjifont {kanji16} \ | |
228 -text {Enlarge} | |
229 | |
230 # build widget .top0.frame6.button11 | |
231 button .top0.frame6.button11 \ | |
232 -activebackground {#eed5b7} \ | |
233 -activeforeground {CornSilk2} \ | |
234 -background {Cornsilk2} \ | |
235 -command {canvaswh .top0.frame0.canvas2 0.625} \ | |
236 -disabledforeground {#b0b0b0} \ | |
237 -font {8x16} \ | |
238 -kanjifont {kanji16} \ | |
239 -text { Shrink} | |
240 | |
241 # pack widget .top0.frame6 | |
242 pack append .top0.frame6 \ | |
243 .top0.frame6.button8 {right frame center fillx} \ | |
244 .top0.frame6.button10 {right frame center expand fillx} \ | |
245 .top0.frame6.button9 {left frame center} \ | |
246 .top0.frame6.button11 {left frame center} | |
247 | |
248 # pack widget .top0 | |
249 pack append .top0 \ | |
250 .top0.frame0 {bottom frame center expand fill} \ | |
251 .top0.frame1 {bottom frame center fill} \ | |
252 .top0.frame6 {top frame center fillx} | |
253 | |
254 # build canvas items .top0.frame0.canvas2 | |
255 set xfTmpTag [.top0.frame0.canvas2 create window -2480.03 -2615.93] | |
256 .top0.frame0.canvas2 itemconfigure $xfTmpTag \ | |
257 -anchor {nw} | |
258 set xfTmpTag [.top0.frame0.canvas2 create line 326 189 326 199] | |
259 .top0.frame0.canvas2 itemconfigure $xfTmpTag \ | |
260 -tags {cursol} | |
261 set xfTmpTag [.top0.frame0.canvas2 create line 321 194 331 194] | |
262 .top0.frame0.canvas2 itemconfigure $xfTmpTag \ | |
263 -tags {cursol} | |
264 | |
265 | |
266 | |
267 if {"[info procs XFEdit]" != ""} { | |
268 catch "XFMiscBindWidgetTree .top0" | |
269 after 2 "catch {XFEditSetShowWindows}" | |
270 } | |
271 } | |
272 | |
273 proc DestroyWindow.top0 {} {# xf ignore me 7 | |
274 if {"[info procs XFEdit]" != ""} { | |
275 if {"[info commands .top0]" != ""} { | |
276 global xfShowWindow.top0 | |
277 set xfShowWindow.top0 0 | |
278 XFEditSetPath . | |
279 after 2 "XFSaveAsProc .top0; XFEditSetShowWindows" | |
280 } | |
281 } { | |
282 catch "destroy .top0" | |
283 update | |
284 } | |
285 } | |
286 | |
287 | |
288 # procedure to show window . | |
289 proc ShowWindow. {args} {# xf ignore me 7 | |
290 | |
291 # Window manager configurations | |
292 global tkVersion | |
293 wm positionfrom . user | |
294 wm sizefrom . user | |
295 wm maxsize . 1280 1024 | |
296 wm title . {Lite} | |
297 | |
298 | |
299 # build widget .frame | |
300 frame .frame \ | |
301 -background {Cornsilk2} \ | |
302 -relief {raised} | |
303 | |
304 # build widget .frame.frame0 | |
305 frame .frame.frame0 \ | |
306 -background {Cornsilk2} \ | |
307 -borderwidth {2} \ | |
308 -relief {raised} | |
309 | |
310 # build widget .frame.frame0.label4 | |
311 label .frame.frame0.label4 \ | |
312 -background {Cornsilk2} \ | |
313 -font {8x16} \ | |
314 -kanjifont {kanji16} \ | |
315 -padx {2} \ | |
316 -relief {raised} \ | |
317 -text {ITL Formula:} | |
318 | |
319 # build widget .frame.frame0.button3 | |
320 button .frame.frame0.button3 \ | |
321 -activebackground {#eed5b7} \ | |
322 -activeforeground {CornSilk2} \ | |
323 -background {Cornsilk2} \ | |
324 -command {text_clear .frame.frame4.text0} \ | |
325 -disabledforeground {#b0b0b0} \ | |
326 -font {8x16} \ | |
327 -kanjifont {*-fixed-*-normal--16-*-jisx0208.1983-*} \ | |
328 -text {clear} | |
329 | |
330 # build widget .frame.frame0.menubutton0 | |
331 menubutton .frame.frame0.menubutton0 \ | |
332 -activeforeground {CornSilk2} \ | |
333 -background {Cornsilk2} \ | |
334 -font {8x16} \ | |
335 -kanjifont {*-fixed-*-normal--16-*-jisx0208.1983-*} \ | |
336 -menu {.frame.frame0.menubutton0.m} \ | |
337 -text {file} | |
338 # bindings | |
339 bind .frame.frame0.menubutton0 <Button-1> {MenuPopupPost .frame.frame0.menubutton0.m %X %Y} | |
340 bind .frame.frame0.menubutton0 <ButtonRelease-1> {MenuPopupRelease .frame.frame0.menubutton0.m %W} | |
341 | |
342 # build widget .frame.frame0.menubutton0.m | |
343 menu .frame.frame0.menubutton0.m \ | |
344 -activeforeground {CornSilk2} \ | |
345 -background {Cornsilk2} \ | |
346 -font {8x16} \ | |
347 -kanjifont {*-fixed-*-normal--16-*-jisx0208.1983-*} | |
348 .frame.frame0.menubutton0.m add command \ | |
349 -command {filehandling .frame.frame4.text0 load [FSBox "load"]} \ | |
350 -label {load} | |
351 .frame.frame0.menubutton0.m add command \ | |
352 -command {filehandling .frame.frame4.text0 save [FSBox "save"]} \ | |
353 -label {save} | |
354 .frame.frame0.menubutton0.m add command \ | |
355 -command {TokioCommand} \ | |
356 -label {Tokio} | |
357 .frame.frame0.menubutton0.m add command \ | |
358 -command {PrologCommand} \ | |
359 -label {Prolog} | |
360 # bindings | |
361 bind .frame.frame0.menubutton0.m <Any-ButtonRelease-1> {MenuPopupRelease .frame.frame0.menubutton0.m %W} | |
362 bind .frame.frame0.menubutton0.m <Shift-Button-1> {MenuPopupPost .frame.frame0.menubutton0.m %X %Y} | |
363 | |
364 # pack widget .frame.frame0 | |
365 pack append .frame.frame0 \ | |
366 .frame.frame0.label4 {left frame center expand fillx} \ | |
367 .frame.frame0.button3 {right frame center} \ | |
368 .frame.frame0.menubutton0 {left frame center fillx} | |
369 | |
370 # build widget .frame.frame4 | |
371 frame .frame.frame4 \ | |
372 -background {Cornsilk2} \ | |
373 -borderwidth {2} \ | |
374 -relief {raised} | |
375 | |
376 # build widget .frame.frame4.scrollbar1 | |
377 scrollbar .frame.frame4.scrollbar1 \ | |
378 -activeforeground {CornSilk2} \ | |
379 -background {Cornsilk2} \ | |
380 -command {.frame.frame4.text0 yview} \ | |
381 -foreground {#ffe4c4} | |
382 | |
383 # build widget .frame.frame4.text0 | |
384 text .frame.frame4.text0 \ | |
385 -background {Cornsilk2} \ | |
386 -font {8x16} \ | |
387 -kanjifont {kanji16} \ | |
388 -height {10} \ | |
389 -selectbackground {#b2dfee} \ | |
390 -selectborderwidth {1} \ | |
391 -selectforeground {CornSilk2} \ | |
392 -width {61} \ | |
393 -yscrollcommand {.frame.frame4.scrollbar1 set} | |
394 # bindings | |
395 bind .frame.frame4.text0 <Button-2> {%W mark set insert @%x,%y | |
396 %W insert insert [selection get] | |
397 %W yview -pickplace insert} | |
398 bind .frame.frame4.text0 <Button-3> {%W mark set anchor insert | |
399 %W tag add sel insert @%x,%y} | |
400 bind .frame.frame4.text0 <Control-Key-a> {%W mark set insert {insert linestart}} | |
401 bind .frame.frame4.text0 <Control-Key-b> {%W mark set insert {insert -1char}} | |
402 bind .frame.frame4.text0 <Control-Key-d> {%W delete insert} | |
403 bind .frame.frame4.text0 <Control-Key-e> {%W mark set insert {insert lineend}} | |
404 bind .frame.frame4.text0 <Control-Key-f> {%W mark set insert {insert +1char}} | |
405 bind .frame.frame4.text0 <Control-Key-k> {if ![string compare [%W get insert] "\n"] { | |
406 %W delete insert} else { | |
407 %W delete insert {insert lineend} | |
408 }} | |
409 bind .frame.frame4.text0 <Control-Key-n> {%W mark set insert {insert +1line}} | |
410 bind .frame.frame4.text0 <Control-Key-p> {%W mark set insert {insert -1line}} | |
411 bind .frame.frame4.text0 <Control-Key-w> {if [llength [%W tag ranges sel]] { | |
412 %W delete sel.first sel.last | |
413 }} | |
414 | |
415 # pack widget .frame.frame4 | |
416 pack append .frame.frame4 \ | |
417 .frame.frame4.text0 {left frame center expand fill} \ | |
418 .frame.frame4.scrollbar1 {right frame center filly} | |
419 | |
420 # pack widget .frame | |
421 pack append .frame \ | |
422 .frame.frame0 {top frame center fillx} \ | |
423 .frame.frame4 {left frame center expand fill} | |
424 | |
425 # build widget .frame3 | |
426 frame .frame3 \ | |
427 -background {Cornsilk2} \ | |
428 -borderwidth {2} \ | |
429 -relief {raised} | |
430 | |
431 # build widget .frame3.button4 | |
432 button .frame3.button4 \ | |
433 -activebackground {#eed5b7} \ | |
434 -activeforeground {CornSilk2} \ | |
435 -background {Cornsilk2} \ | |
436 -command {lite quit 0 | |
437 destroy .} \ | |
438 -disabledforeground {#b0b0b0} \ | |
439 -font {8x16} \ | |
440 -kanjifont {kanji16} \ | |
441 -text {Quit} | |
442 | |
443 # build widget .frame3.checkbutton5 | |
444 checkbutton .frame3.checkbutton5 \ | |
445 -activebackground {#eed5b7} \ | |
446 -activeforeground {CornSilk2} \ | |
447 -background {Cornsilk2} \ | |
448 -command {lite verbose "$verbose"} \ | |
449 -disabledforeground {#b0b0b0} \ | |
450 -font {8x16} \ | |
451 -kanjifont {kanji16} \ | |
452 -selector {#b03060} \ | |
453 -text {verbose} \ | |
454 -variable {verbose} | |
455 | |
456 # build widget .frame3.button7 | |
457 button .frame3.button7 \ | |
458 -activebackground {#eed5b7} \ | |
459 -activeforeground {CornSilk2} \ | |
460 -background {Cornsilk2} \ | |
461 -command {lite verify "{[$symbolicName(entry) get 0.0 end]}"} \ | |
462 -disabledforeground {#b0b0b0} \ | |
463 -font {8x16} \ | |
464 -kanjifont {kanji16} \ | |
465 -text {Verify} | |
466 | |
467 # pack widget .frame3 | |
468 pack append .frame3 \ | |
469 .frame3.button4 {left frame center} \ | |
470 .frame3.checkbutton5 {right frame center} \ | |
471 .frame3.button7 {top frame n fillx} | |
472 | |
473 # pack widget . | |
474 pack append . \ | |
475 .frame {top frame center expand fill} \ | |
476 .frame3 {top frame center fill} | |
477 | |
478 .frame.frame4.text0 insert end {} | |
479 | |
480 | |
481 | |
482 if {"[info procs XFEdit]" != ""} { | |
483 catch "XFMiscBindWidgetTree ." | |
484 after 2 "catch {XFEditSetShowWindows}" | |
485 } | |
486 } | |
487 | |
488 | |
489 # User defined procedures | |
490 | |
491 | |
492 # Procedure: FSBox | |
493 proc FSBox { {fsBoxMessage "Select file:"} {fsBoxFileName ""} {fsBoxActionOk ""} {fsBoxActionCancel ""}} { | |
494 # xf ignore me 5 | |
495 ########## | |
496 # Procedure: FSBox | |
497 # Description: show file selector box | |
498 # Arguments: fsBoxMessage - the text to display | |
499 # fsBoxFileName - a file name that should be selected | |
500 # fsBoxActionOk - the action that should be performed on ok | |
501 # fsBoxActionCancel - the action that should be performed on cancel | |
502 # Returns: the filename that was selected, or nothing | |
503 # Sideeffects: none | |
504 ########## | |
505 # | |
506 # global fsBox(activeBackground) - active background color | |
507 # global fsBox(activeForeground) - active foreground color | |
508 # global fsBox(background) - background color | |
509 # global fsBox(font) - text font | |
510 # global fsBox(foreground) - foreground color | |
511 # global fsBox(extensions) - scan directory for extensions | |
512 # global fsBox(scrollActiveForeground) - scrollbar active background color | |
513 # global fsBox(scrollBackground) - scrollbar background color | |
514 # global fsBox(scrollForeground) - scrollbar foreground color | |
515 # global fsBox(scrollSide) - side where scrollbar is located | |
516 | |
517 global fsBox | |
518 | |
519 set tmpButtonOpt "" | |
520 set tmpFrameOpt "" | |
521 set tmpMessageOpt "" | |
522 set tmpScaleOpt "" | |
523 set tmpScrollOpt "" | |
524 if {"$fsBox(activeBackground)" != ""} { | |
525 append tmpButtonOpt "-activebackground \"$fsBox(activeBackground)\" " | |
526 } | |
527 if {"$fsBox(activeForeground)" != ""} { | |
528 append tmpButtonOpt "-activeforeground \"$fsBox(activeForeground)\" " | |
529 } | |
530 if {"$fsBox(background)" != ""} { | |
531 append tmpButtonOpt "-background \"$fsBox(background)\" " | |
532 append tmpFrameOpt "-background \"$fsBox(background)\" " | |
533 append tmpMessageOpt "-background \"$fsBox(background)\" " | |
534 } | |
535 if {"$fsBox(font)" != ""} { | |
536 append tmpButtonOpt "-font \"$fsBox(font)\" " | |
537 append tmpMessageOpt "-font \"$fsBox(font)\" " | |
538 } | |
539 if {"$fsBox(foreground)" != ""} { | |
540 append tmpButtonOpt "-foreground \"$fsBox(foreground)\" " | |
541 append tmpMessageOpt "-foreground \"$fsBox(foreground)\" " | |
542 } | |
543 if {"$fsBox(scrollActiveForeground)" != ""} { | |
544 append tmpScrollOpt "-activeforeground \"$fsBox(scrollActiveForeground)\" " | |
545 } | |
546 if {"$fsBox(scrollBackground)" != ""} { | |
547 append tmpScrollOpt "-background \"$fsBox(scrollBackground)\" " | |
548 } | |
549 if {"$fsBox(scrollForeground)" != ""} { | |
550 append tmpScrollOpt "-foreground \"$fsBox(scrollForeground)\" " | |
551 } | |
552 | |
553 if {[file exists [file tail $fsBoxFileName]] && | |
554 [IsAFile [file tail $fsBoxFileName]]} { | |
555 set fsBox(name) [file tail $fsBoxFileName] | |
556 } { | |
557 set fsBox(name) "" | |
558 } | |
559 if {[file exists $fsBoxFileName] && [IsADir $fsBoxFileName]} { | |
560 set fsBox(path) $fsBoxFileName | |
561 } { | |
562 if {"[file rootname $fsBoxFileName]" != "."} { | |
563 set fsBox(path) [file rootname $fsBoxFileName] | |
564 } | |
565 } | |
566 if {$fsBox(showPixmap)} { | |
567 set fsBox(path) [string trimleft $fsBox(path) @] | |
568 } | |
569 if {"$fsBox(path)" != "" && [file exists $fsBox(path)] && | |
570 [IsADir $fsBox(path)]} { | |
571 set fsBox(internalPath) $fsBox(path) | |
572 } { | |
573 if {"$fsBox(internalPath)" == "" || | |
574 ![file exists $fsBox(internalPath)]} { | |
575 set fsBox(internalPath) [pwd] | |
576 } | |
577 } | |
578 # build widget structure | |
579 | |
580 # start build of toplevel | |
581 if {"[info commands XFDestroy]" != ""} { | |
582 catch {XFDestroy .fsBox} | |
583 } { | |
584 catch {destroy .fsBox} | |
585 } | |
586 toplevel .fsBox -borderwidth 0 | |
587 catch ".fsBox config $tmpFrameOpt" | |
588 wm geometry .fsBox 350x300 | |
589 wm title .fsBox {File select box} | |
590 wm maxsize .fsBox 1000 1000 | |
591 wm minsize .fsBox 100 100 | |
592 # end build of toplevel | |
593 | |
594 label .fsBox.message1 -anchor c -relief raised -text "$fsBoxMessage" | |
595 catch ".fsBox.message1 config $tmpMessageOpt" | |
596 | |
597 frame .fsBox.frame1 -borderwidth 0 -relief raised | |
598 catch ".fsBox.frame1 config $tmpFrameOpt" | |
599 | |
600 button .fsBox.frame1.ok -text "OK" -command " | |
601 global fsBox | |
602 set fsBox(name) \[.fsBox.file.file get\] | |
603 if {$fsBox(showPixmap)} { | |
604 set fsBox(path) @\[.fsBox.path.path get\] | |
605 } { | |
606 set fsBox(path) \[.fsBox.path.path get\] | |
607 } | |
608 set fsBox(internalPath) \[.fsBox.path.path get\] | |
609 $fsBoxActionOk | |
610 if {\"\[info commands XFDestroy\]\" != \"\"} { | |
611 catch {XFDestroy .fsBox} | |
612 } { | |
613 catch {destroy .fsBox} | |
614 }" | |
615 catch ".fsBox.frame1.ok config $tmpButtonOpt" | |
616 | |
617 button .fsBox.frame1.rescan -text "Rescan" -command { | |
618 global fsBox | |
619 FSBoxFSShow [.fsBox.path.path get] [.fsBox.pattern.pattern get] $fsBox(all)} | |
620 catch ".fsBox.frame1.rescan config $tmpButtonOpt" | |
621 | |
622 button .fsBox.frame1.cancel -text "Cancel" -command " | |
623 global fsBox | |
624 set fsBox(name) {} | |
625 set fsBox(path) {} | |
626 $fsBoxActionCancel | |
627 if {\"\[info commands XFDestroy\]\" != \"\"} { | |
628 catch {XFDestroy .fsBox} | |
629 } { | |
630 catch {destroy .fsBox} | |
631 }" | |
632 catch ".fsBox.frame1.cancel config $tmpButtonOpt" | |
633 | |
634 if {$fsBox(showPixmap)} { | |
635 frame .fsBox.frame2 -borderwidth 0 -relief raised | |
636 catch ".fsBox.frame2 config $tmpFrameOpt" | |
637 | |
638 scrollbar .fsBox.frame2.scrollbar3 -command {.fsBox.frame2.canvas2 xview} -orient {horizontal} -relief {raised} | |
639 catch ".fsBox.frame2.scrollbar3 config $tmpScrollOpt" | |
640 | |
641 scrollbar .fsBox.frame2.scrollbar1 -command {.fsBox.frame2.canvas2 yview} -relief {raised} | |
642 catch ".fsBox.frame2.scrollbar1 config $tmpScrollOpt" | |
643 | |
644 canvas .fsBox.frame2.canvas2 -confine {true} -relief {raised} -scrollregion {0c 0c 20c 20c} -width {100} -xscrollcommand {.fsBox.frame2.scrollbar3 set} -yscrollcommand {.fsBox.frame2.scrollbar1 set} | |
645 catch ".fsBox.frame2.canvas2 config $tmpFrameOpt" | |
646 | |
647 .fsBox.frame2.canvas2 addtag currentBitmap withtag [.fsBox.frame2.canvas2 create bitmap 5 5 -anchor nw] | |
648 } | |
649 | |
650 frame .fsBox.path -borderwidth 0 -relief raised | |
651 catch ".fsBox.path config $tmpFrameOpt" | |
652 | |
653 frame .fsBox.path.paths -borderwidth 2 -relief raised | |
654 catch ".fsBox.path.paths config $tmpFrameOpt" | |
655 | |
656 menubutton .fsBox.path.paths.paths -borderwidth 0 -menu ".fsBox.path.paths.paths.menu" -relief flat -text "Pathname:" | |
657 catch ".fsBox.path.paths.paths config $tmpButtonOpt" | |
658 | |
659 menu .fsBox.path.paths.paths.menu | |
660 catch ".fsBox.path.paths.paths.menu config $tmpButtonOpt" | |
661 | |
662 .fsBox.path.paths.paths.menu add command -label "[string trimright $fsBox(internalPath) {/@}]" -command " | |
663 global fsBox | |
664 FSBoxFSShow \[.fsBox.path.path get\] \[.fsBox.pattern.pattern get\] \$fsBox(all) | |
665 .fsBox.path.path delete 0 end | |
666 .fsBox.path.path insert 0 [string trimright $fsBox(internalPath) {/@}]" | |
667 | |
668 entry .fsBox.path.path -relief raised | |
669 catch ".fsBox.path.path config $tmpMessageOpt" | |
670 | |
671 if {![IsADir $fsBox(internalPath)]} { | |
672 set $fsBox(internalPath) [pwd] | |
673 } | |
674 .fsBox.path.path insert 0 $fsBox(internalPath) | |
675 | |
676 frame .fsBox.pattern -borderwidth 0 -relief raised | |
677 catch ".fsBox.pattern config $tmpFrameOpt" | |
678 | |
679 frame .fsBox.pattern.patterns -borderwidth 2 -relief raised | |
680 catch ".fsBox.pattern.patterns config $tmpFrameOpt" | |
681 | |
682 menubutton .fsBox.pattern.patterns.patterns -borderwidth 0 -menu ".fsBox.pattern.patterns.patterns.menu" -relief flat -text "Selection pattern:" | |
683 catch ".fsBox.pattern.patterns.patterns config $tmpButtonOpt" | |
684 | |
685 menu .fsBox.pattern.patterns.patterns.menu | |
686 catch ".fsBox.pattern.patterns.patterns.menu config $tmpButtonOpt" | |
687 | |
688 .fsBox.pattern.patterns.patterns.menu add checkbutton -label "Scan extensions" -variable fsBox(extensions) -command { | |
689 global fsBox | |
690 FSBoxFSShow [.fsBox.path.path get] [.fsBox.pattern.pattern get] $fsBox(all)} | |
691 | |
692 entry .fsBox.pattern.pattern -relief raised | |
693 catch ".fsBox.pattern.pattern config $tmpMessageOpt" | |
694 | |
695 .fsBox.pattern.pattern insert 0 $fsBox(pattern) | |
696 | |
697 frame .fsBox.files -borderwidth 0 -relief raised | |
698 catch ".fsBox.files config $tmpFrameOpt" | |
699 | |
700 scrollbar .fsBox.files.vscroll -relief raised -command ".fsBox.files.files yview" | |
701 catch ".fsBox.files.vscroll config $tmpScrollOpt" | |
702 | |
703 scrollbar .fsBox.files.hscroll -orient horiz -relief raised -command ".fsBox.files.files xview" | |
704 catch ".fsBox.files.hscroll config $tmpScrollOpt" | |
705 | |
706 listbox .fsBox.files.files -exportselection false -relief raised -xscrollcommand ".fsBox.files.hscroll set" -yscrollcommand ".fsBox.files.vscroll set" | |
707 catch ".fsBox.files.files config $tmpMessageOpt" | |
708 | |
709 frame .fsBox.file -borderwidth 0 -relief raised | |
710 catch ".fsBox.file config $tmpFrameOpt" | |
711 | |
712 label .fsBox.file.labelfile -relief raised -text "Filename:" | |
713 catch ".fsBox.file.labelfile config $tmpMessageOpt" | |
714 | |
715 entry .fsBox.file.file -relief raised | |
716 catch ".fsBox.file.file config $tmpMessageOpt" | |
717 | |
718 .fsBox.file.file delete 0 end | |
719 .fsBox.file.file insert 0 $fsBox(name) | |
720 | |
721 checkbutton .fsBox.pattern.all -offvalue 0 -onvalue 1 -text "Show all files" -variable fsBox(all) -command { | |
722 global fsBox | |
723 FSBoxFSShow [.fsBox.path.path get] [.fsBox.pattern.pattern get] $fsBox(all)} | |
724 catch ".fsBox.pattern.all config $tmpButtonOpt" | |
725 | |
726 FSBoxFSShow $fsBox(internalPath) $fsBox(pattern) $fsBox(all) | |
727 | |
728 # bindings | |
729 bind .fsBox.files.files <Double-Button-1> " | |
730 FSBoxFSFileSelectDouble %W $fsBox(showPixmap) \{$fsBoxActionOk\} %y" | |
731 bind .fsBox.files.files <ButtonPress-1> " | |
732 FSBoxFSFileSelect %W $fsBox(showPixmap) %y" | |
733 bind .fsBox.files.files <Button1-Motion> " | |
734 FSBoxFSFileSelect %W $fsBox(showPixmap) %y" | |
735 bind .fsBox.files.files <Shift-Button1-Motion> " | |
736 FSBoxFSFileSelect %W $fsBox(showPixmap) %y" | |
737 bind .fsBox.files.files <Shift-ButtonPress-1> " | |
738 FSBoxFSFileSelect %W $fsBox(showPixmap) %y" | |
739 | |
740 bind .fsBox.path.path <Tab> { | |
741 FSBoxFSNameComplete path} | |
742 bind .fsBox.path.path <Return> { | |
743 global tkVersion | |
744 global fsBox | |
745 FSBoxFSShow [.fsBox.path.path get] [.fsBox.pattern.pattern get] $fsBox(all) | |
746 FSBoxFSInsertPath | |
747 if {$tkVersion >= 3.0} { | |
748 .fsBox.file.file icursor end | |
749 } { | |
750 .fsBox.file.file cursor end | |
751 } | |
752 focus .fsBox.file.file} | |
753 catch "bind .fsBox.path.path <Up> {}" | |
754 bind .fsBox.path.path <Down> { | |
755 global tkVersion | |
756 if {$tkVersion >= 3.0} { | |
757 .fsBox.file.file icursor end | |
758 } { | |
759 .fsBox.file.file cursor end | |
760 } | |
761 focus .fsBox.file.file} | |
762 | |
763 bind .fsBox.file.file <Tab> { | |
764 FSBoxFSNameComplete file} | |
765 bind .fsBox.file.file <Return> " | |
766 global fsBox | |
767 set fsBox(name) \[.fsBox.file.file get\] | |
768 if {$fsBox(showPixmap)} { | |
769 set fsBox(path) @\[.fsBox.path.path get\] | |
770 } { | |
771 set fsBox(path) \[.fsBox.path.path get\] | |
772 } | |
773 set fsBox(internalPath) \[.fsBox.path.path get\] | |
774 $fsBoxActionOk | |
775 if {\"\[info commands XFDestroy\]\" != \"\"} { | |
776 catch {XFDestroy .fsBox} | |
777 } { | |
778 catch {destroy .fsBox} | |
779 }" | |
780 bind .fsBox.file.file <Up> { | |
781 global tkVersion | |
782 if {$tkVersion >= 3.0} { | |
783 .fsBox.path.path icursor end | |
784 } { | |
785 .fsBox.path.path cursor end | |
786 } | |
787 focus .fsBox.path.path} | |
788 bind .fsBox.file.file <Down> { | |
789 global tkVersion | |
790 if {$tkVersion >= 3.0} { | |
791 .fsBox.pattern.pattern icursor end | |
792 } { | |
793 .fsBox.pattern.pattern cursor end | |
794 } | |
795 focus .fsBox.pattern.pattern} | |
796 | |
797 bind .fsBox.pattern.pattern <Return> { | |
798 global fsBox | |
799 FSBoxFSShow [.fsBox.path.path get] [.fsBox.pattern.pattern get] $fsBox(all)} | |
800 bind .fsBox.pattern.pattern <Up> { | |
801 global tkVersion | |
802 if {$tkVersion >= 3.0} { | |
803 .fsBox.file.file icursor end | |
804 } { | |
805 .fsBox.file.file cursor end | |
806 } | |
807 focus .fsBox.file.file} | |
808 catch "bind .fsBox.pattern.pattern <Down> {}" | |
809 | |
810 # packing | |
811 pack append .fsBox.files .fsBox.files.vscroll "$fsBox(scrollSide) filly" .fsBox.files.hscroll {bottom fillx} .fsBox.files.files {left fill expand} | |
812 pack append .fsBox.file .fsBox.file.labelfile {left} .fsBox.file.file {left fill expand} | |
813 pack append .fsBox.frame1 .fsBox.frame1.ok {left fill expand} .fsBox.frame1.rescan {left fill expand} .fsBox.frame1.cancel {left fill expand} | |
814 pack append .fsBox.path.paths .fsBox.path.paths.paths {left} | |
815 pack append .fsBox.pattern.patterns .fsBox.pattern.patterns.patterns {left} | |
816 pack append .fsBox.path .fsBox.path.paths {left} .fsBox.path.path {left fill expand} | |
817 pack append .fsBox.pattern .fsBox.pattern.patterns {left} .fsBox.pattern.all {right fill} .fsBox.pattern.pattern {left fill expand} | |
818 if {$fsBox(showPixmap)} { | |
819 pack append .fsBox.frame2 .fsBox.frame2.scrollbar1 {left filly} .fsBox.frame2.canvas2 {top expand fill} .fsBox.frame2.scrollbar3 {top fillx} | |
820 | |
821 pack append .fsBox .fsBox.message1 {top fill} .fsBox.frame1 {bottom fill} .fsBox.pattern {bottom fill} .fsBox.file {bottom fill} .fsBox.path {bottom fill} .fsBox.frame2 {right fill} .fsBox.files {left fill expand} | |
822 } { | |
823 pack append .fsBox .fsBox.message1 {top fill} .fsBox.frame1 {bottom fill} .fsBox.pattern {bottom fill} .fsBox.file {bottom fill} .fsBox.path {bottom fill} .fsBox.files {left fill expand} | |
824 } | |
825 | |
826 if {"$fsBoxActionOk" == "" && "$fsBoxActionCancel" == ""} { | |
827 # wait for the box to be destroyed | |
828 update idletask | |
829 grab .fsBox | |
830 tkwait window .fsBox | |
831 | |
832 if {"[string trim $fsBox(path)]" != "" || | |
833 "[string trim $fsBox(name)]" != ""} { | |
834 if {"[string trimleft [string trim $fsBox(name)] /]" == ""} { | |
835 return [string trimright [string trim $fsBox(path)] /] | |
836 } { | |
837 return [string trimright [string trim $fsBox(path)] /]/[string trimleft [string trim $fsBox(name)] /] | |
838 } | |
839 } | |
840 } | |
841 } | |
842 | |
843 | |
844 # Procedure: FSBoxBindSelectOne | |
845 proc FSBoxBindSelectOne { fsBoxW fsBoxY} { | |
846 # xf ignore me 6 | |
847 | |
848 set fsBoxNearest [$fsBoxW nearest $fsBoxY] | |
849 if {$fsBoxNearest >= 0} { | |
850 $fsBoxW select from $fsBoxNearest | |
851 $fsBoxW select to $fsBoxNearest | |
852 } | |
853 } | |
854 | |
855 | |
856 # Procedure: FSBoxFSFileSelect | |
857 proc FSBoxFSFileSelect { fsBoxW fsBoxShowPixmap fsBoxY} { | |
858 # xf ignore me 6 | |
859 global fsBox | |
860 | |
861 FSBoxBindSelectOne $fsBoxW $fsBoxY | |
862 set fsBoxNearest [$fsBoxW nearest $fsBoxY] | |
863 if {$fsBoxNearest >= 0} { | |
864 set fsBoxTmpEntry [$fsBoxW get $fsBoxNearest] | |
865 if {"[string index $fsBoxTmpEntry [expr [string length $fsBoxTmpEntry]-1]]" == "/" || | |
866 "[string index $fsBoxTmpEntry [expr [string length $fsBoxTmpEntry]-1]]" == "@"} { | |
867 set fsBoxFileName [string range $fsBoxTmpEntry 0 [expr [string length $fsBoxTmpEntry]-2]] | |
868 if {![IsADir [string trimright $fsBox(internalPath)/$fsBoxFileName @]] && | |
869 ![IsASymlink [string trimright $fsBox(internalPath)/$fsBoxFileName @]]} { | |
870 set fsBoxFileName $fsBoxTmpEntry | |
871 } | |
872 } { | |
873 if {"[string index $fsBoxTmpEntry [expr [string length $fsBoxTmpEntry]-1]]" == "*"} { | |
874 set fsBoxFileName [string range $fsBoxTmpEntry 0 [expr [string length $fsBoxTmpEntry]-2]] | |
875 if {![file executable $fsBox(internalPath)/$fsBoxFileName]} { | |
876 set fsBoxFileName $fsBoxTmpEntry | |
877 } | |
878 } { | |
879 set fsBoxFileName $fsBoxTmpEntry | |
880 } | |
881 } | |
882 if {![IsADir [string trimright $fsBox(internalPath)/$fsBoxFileName @]]} { | |
883 set fsBox(name) $fsBoxFileName | |
884 .fsBox.file.file delete 0 end | |
885 .fsBox.file.file insert 0 $fsBox(name) | |
886 if {$fsBoxShowPixmap} { | |
887 catch ".fsBox.frame2.canvas2 itemconfigure currentBitmap -bitmap \"@$fsBox(internalPath)/$fsBox(name)\"" | |
888 } | |
889 } | |
890 } | |
891 } | |
892 | |
893 | |
894 # Procedure: FSBoxFSFileSelectDouble | |
895 proc FSBoxFSFileSelectDouble { fsBoxW fsBoxShowPixmap fsBoxAction fsBoxY} { | |
896 # xf ignore me 6 | |
897 global fsBox | |
898 | |
899 FSBoxBindSelectOne $fsBoxW $fsBoxY | |
900 set fsBoxNearest [$fsBoxW nearest $fsBoxY] | |
901 if {$fsBoxNearest >= 0} { | |
902 set fsBoxTmpEntry [$fsBoxW get $fsBoxNearest] | |
903 if {"$fsBoxTmpEntry" == "../"} { | |
904 set fsBoxTmpEntry [string trimright [string trim $fsBox(internalPath)] "@/"] | |
905 if {"$fsBoxTmpEntry" == ""} { | |
906 return | |
907 } | |
908 FSBoxFSShow [file dirname $fsBoxTmpEntry] [.fsBox.pattern.pattern get] $fsBox(all) | |
909 .fsBox.path.path delete 0 end | |
910 .fsBox.path.path insert 0 $fsBox(internalPath) | |
911 } { | |
912 if {"[string index $fsBoxTmpEntry [expr [string length $fsBoxTmpEntry]-1]]" == "/" || | |
913 "[string index $fsBoxTmpEntry [expr [string length $fsBoxTmpEntry]-1]]" == "@"} { | |
914 set fsBoxFileName [string range $fsBoxTmpEntry 0 [expr [string length $fsBoxTmpEntry]-2]] | |
915 if {![IsADir [string trimright $fsBox(internalPath)/$fsBoxFileName @]] && | |
916 ![IsASymlink [string trimright $fsBox(internalPath)/$fsBoxFileName @]]} { | |
917 set fsBoxFileName $fsBoxTmpEntry | |
918 } | |
919 } { | |
920 if {"[string index $fsBoxTmpEntry [expr [string length $fsBoxTmpEntry]-1]]" == "*"} { | |
921 set fsBoxFileName [string range $fsBoxTmpEntry 0 [expr [string length $fsBoxTmpEntry]-2]] | |
922 if {![file executable $fsBox(internalPath)/$fsBoxFileName]} { | |
923 set fsBoxFileName $fsBoxTmpEntry | |
924 } | |
925 } { | |
926 set fsBoxFileName $fsBoxTmpEntry | |
927 } | |
928 } | |
929 if {[IsADir [string trimright $fsBox(internalPath)/$fsBoxFileName @]]} { | |
930 set fsBox(internalPath) "[string trimright $fsBox(internalPath) {/@}]/$fsBoxFileName" | |
931 FSBoxFSShow $fsBox(internalPath) [.fsBox.pattern.pattern get] $fsBox(all) | |
932 .fsBox.path.path delete 0 end | |
933 .fsBox.path.path insert 0 $fsBox(internalPath) | |
934 } { | |
935 set fsBox(name) $fsBoxFileName | |
936 if {$fsBoxShowPixmap} { | |
937 set fsBox(path) @$fsBox(internalPath) | |
938 } { | |
939 set fsBox(path) $fsBox(internalPath) | |
940 } | |
941 if {"$fsBoxAction" != ""} { | |
942 eval "global fsBox; $fsBoxAction" | |
943 } | |
944 if {"[info commands XFDestroy]" != ""} { | |
945 catch {XFDestroy .fsBox} | |
946 } { | |
947 catch {destroy .fsBox} | |
948 } | |
949 } | |
950 } | |
951 } | |
952 } | |
953 | |
954 | |
955 # Procedure: FSBoxFSInsertPath | |
956 proc FSBoxFSInsertPath {} { | |
957 # xf ignore me 6 | |
958 global fsBox | |
959 | |
960 set fsBoxLast [.fsBox.path.paths.paths.menu index last] | |
961 set fsBoxNewEntry [string trimright [.fsBox.path.path get] "/@"] | |
962 for {set fsBoxCounter 0} {$fsBoxCounter <= $fsBoxLast} {incr fsBoxCounter 1} { | |
963 if {"$fsBoxNewEntry" == "[lindex [.fsBox.path.paths.paths.menu entryconfigure $fsBoxCounter -label] 4]"} { | |
964 return | |
965 } | |
966 } | |
967 if {$fsBoxLast < 9} { | |
968 .fsBox.path.paths.paths.menu add command -label "$fsBoxNewEntry" -command " | |
969 global fsBox | |
970 FSBoxFSShow $fsBoxNewEntry \[.fsBox.pattern.pattern get\] \$fsBox(all) | |
971 .fsBox.path.path delete 0 end | |
972 .fsBox.path.path insert 0 $fsBoxNewEntry" | |
973 } { | |
974 for {set fsBoxCounter 0} {$fsBoxCounter < $fsBoxLast} {incr fsBoxCounter 1} { | |
975 .fsBox.path.paths.paths.menu entryconfigure $fsBoxCounter -label [lindex [.fsBox.path.paths.paths.menu entryconfigure [expr $fsBoxCounter+1] -label] 4] | |
976 .fsBox.path.paths.paths.menu entryconfigure $fsBoxCounter -command " | |
977 global fsBox | |
978 FSBoxFSShow [lindex [.fsBox.path.paths.paths.menu entryconfigure [expr $fsBoxCounter+1] -label] 4] \[.fsBox.pattern.pattern get\] \$fsBox(all) | |
979 .fsBox.path.path delete 0 end | |
980 .fsBox.path.path insert 0 [lindex [.fsBox.path.paths.paths.menu entryconfigure [expr $fsBoxCounter+1] -label] 4]" | |
981 } | |
982 .fsBox.path.paths.paths.menu entryconfigure $fsBoxLast -label "$fsBoxNewEntry" | |
983 .fsBox.path.paths.paths.menu entryconfigure $fsBoxCounter -command " | |
984 global fsBox | |
985 FSBoxFSShow \[.fsBox.path.path get\] \[.fsBox.pattern.pattern get\] \$fsBox(all) | |
986 .fsBox.path.path delete 0 end | |
987 .fsBox.path.path insert 0 $fsBoxNewEntry" | |
988 } | |
989 } | |
990 | |
991 | |
992 # Procedure: FSBoxFSNameComplete | |
993 proc FSBoxFSNameComplete { fsBoxType} { | |
994 # xf ignore me 6 | |
995 global tkVersion | |
996 global fsBox | |
997 | |
998 set fsBoxNewFile "" | |
999 if {"$fsBoxType" == "path"} { | |
1000 set fsBoxDirName [file dirname [.fsBox.path.path get]] | |
1001 set fsBoxFileName [file tail [.fsBox.path.path get]] | |
1002 } { | |
1003 set fsBoxDirName [file dirname [.fsBox.path.path get]/] | |
1004 set fsBoxFileName [file tail [.fsBox.file.file get]] | |
1005 } | |
1006 | |
1007 set fsBoxNewFile "" | |
1008 if {[IsADir [string trimright $fsBoxDirName @]]} { | |
1009 catch "glob -nocomplain $fsBoxDirName/${fsBoxFileName}*" fsBoxResult | |
1010 foreach fsBoxCounter $fsBoxResult { | |
1011 if {"$fsBoxNewFile" == ""} { | |
1012 set fsBoxNewFile [file tail $fsBoxCounter] | |
1013 } { | |
1014 if {"[string index [file tail $fsBoxCounter] 0]" != | |
1015 "[string index $fsBoxNewFile 0]"} { | |
1016 set fsBoxNewFile "" | |
1017 break | |
1018 } | |
1019 set fsBoxCounter1 0 | |
1020 set fsBoxTmpFile1 $fsBoxNewFile | |
1021 set fsBoxTmpFile2 [file tail $fsBoxCounter] | |
1022 set fsBoxLength1 [string length $fsBoxTmpFile1] | |
1023 set fsBoxLength2 [string length $fsBoxTmpFile2] | |
1024 set fsBoxNewFile "" | |
1025 if {$fsBoxLength1 > $fsBoxLength2} { | |
1026 set fsBoxLength1 $fsBoxLength2 | |
1027 } | |
1028 while {$fsBoxCounter1 < $fsBoxLength1} { | |
1029 if {"[string index $fsBoxTmpFile1 $fsBoxCounter1]" == "[string index $fsBoxTmpFile2 $fsBoxCounter1]"} { | |
1030 append fsBoxNewFile [string index $fsBoxTmpFile1 $fsBoxCounter1] | |
1031 } { | |
1032 break | |
1033 } | |
1034 incr fsBoxCounter1 1 | |
1035 } | |
1036 } | |
1037 } | |
1038 } | |
1039 if {"$fsBoxNewFile" != ""} { | |
1040 if {[IsADir [string trimright $fsBoxDirName/$fsBoxNewFile @]] || | |
1041 ![IsAFile [string trimright $fsBoxDirName/$fsBoxNewFile @]]} { | |
1042 if {[IsADir [string trimright $fsBoxDirName/$fsBoxNewFile @]]} { | |
1043 if {"$fsBoxDirName" == "/"} { | |
1044 .fsBox.path.path delete 0 end | |
1045 .fsBox.path.path insert 0 "/[string trimright [string trim $fsBoxNewFile /] @]/" | |
1046 } { | |
1047 .fsBox.path.path delete 0 end | |
1048 .fsBox.path.path insert 0 "[string trimright $fsBoxDirName /]/[string trimright [string trim $fsBoxNewFile /] @]/" | |
1049 } | |
1050 FSBoxFSShow [.fsBox.path.path get] [.fsBox.pattern.pattern get] $fsBox(all) | |
1051 FSBoxFSInsertPath | |
1052 } { | |
1053 .fsBox.path.path delete 0 end | |
1054 .fsBox.path.path insert 0 "[string trimright $fsBoxDirName /]/[string trimright [string trim $fsBoxNewFile /] @]" | |
1055 } | |
1056 } { | |
1057 .fsBox.path.path delete 0 end | |
1058 .fsBox.path.path insert 0 "[string trimright $fsBoxDirName {@/}]/" | |
1059 .fsBox.file.file delete 0 end | |
1060 .fsBox.file.file insert 0 $fsBoxNewFile | |
1061 if {$tkVersion >= 3.0} { | |
1062 .fsBox.file.file icursor end | |
1063 } { | |
1064 .fsBox.file.file cursor end | |
1065 } | |
1066 focus .fsBox.file.file | |
1067 } | |
1068 } | |
1069 } | |
1070 | |
1071 | |
1072 # Procedure: FSBoxFSShow | |
1073 proc FSBoxFSShow { fsBoxPath fsBoxPattern fsBoxAll} { | |
1074 # xf ignore me 6 | |
1075 global fsBox | |
1076 | |
1077 set tmpButtonOpt "" | |
1078 if {"$fsBox(activeBackground)" != ""} { | |
1079 append tmpButtonOpt "-activebackground \"$fsBox(activeBackground)\" " | |
1080 } | |
1081 if {"$fsBox(activeForeground)" != ""} { | |
1082 append tmpButtonOpt "-activeforeground \"$fsBox(activeForeground)\" " | |
1083 } | |
1084 if {"$fsBox(background)" != ""} { | |
1085 append tmpButtonOpt "-background \"$fsBox(background)\" " | |
1086 } | |
1087 if {"$fsBox(font)" != ""} { | |
1088 append tmpButtonOpt "-font \"$fsBox(font)\" " | |
1089 } | |
1090 if {"$fsBox(foreground)" != ""} { | |
1091 append tmpButtonOpt "-foreground \"$fsBox(foreground)\" " | |
1092 } | |
1093 | |
1094 set fsBox(pattern) $fsBoxPattern | |
1095 if {[file exists $fsBoxPath] && [file readable $fsBoxPath] && | |
1096 [IsADir $fsBoxPath]} { | |
1097 set fsBox(internalPath) $fsBoxPath | |
1098 } { | |
1099 if {[file exists $fsBoxPath] && [file readable $fsBoxPath] && | |
1100 [IsAFile $fsBoxPath]} { | |
1101 set fsBox(internalPath) [file dirname $fsBoxPath] | |
1102 .fsBox.file.file delete 0 end | |
1103 .fsBox.file.file insert 0 [file tail $fsBoxPath] | |
1104 set fsBoxPath $fsBox(internalPath) | |
1105 } { | |
1106 while {"$fsBoxPath" != "" && "$fsBoxPath" != "/" && | |
1107 ![file isdirectory $fsBoxPath]} { | |
1108 set fsBox(internalPath) [file dirname $fsBoxPath] | |
1109 set fsBoxPath $fsBox(internalPath) | |
1110 } | |
1111 } | |
1112 } | |
1113 if {"$fsBoxPath" == ""} { | |
1114 set fsBoxPath "/" | |
1115 set fsBox(internalPath) "/" | |
1116 } | |
1117 .fsBox.path.path delete 0 end | |
1118 .fsBox.path.path insert 0 $fsBox(internalPath) | |
1119 | |
1120 if {[.fsBox.files.files size] > 0} { | |
1121 .fsBox.files.files delete 0 end | |
1122 } | |
1123 if {$fsBoxAll} { | |
1124 if {[catch "exec ls -F -a $fsBoxPath" fsBoxResult]} { | |
1125 puts stderr "$fsBoxResult" | |
1126 } | |
1127 } { | |
1128 if {[catch "exec ls -F $fsBoxPath" fsBoxResult]} { | |
1129 puts stderr "$fsBoxResult" | |
1130 } | |
1131 } | |
1132 set fsBoxElementList [lsort $fsBoxResult] | |
1133 | |
1134 foreach fsBoxCounter [winfo children .fsBox.pattern.patterns.patterns] { | |
1135 if {[string length [info commands XFDestroy]] > 0} { | |
1136 catch {XFDestroy $fsBoxCounter} | |
1137 } { | |
1138 catch {destroy $fsBoxCounter} | |
1139 } | |
1140 } | |
1141 menu .fsBox.pattern.patterns.patterns.menu | |
1142 catch ".fsBox.pattern.patterns.patterns.menu config $tmpButtonOpt" | |
1143 | |
1144 if {$fsBox(extensions)} { | |
1145 .fsBox.pattern.patterns.patterns.menu add command -label "*" -command { | |
1146 global fsBox | |
1147 set fsBox(pattern) "*" | |
1148 .fsBox.pattern.pattern delete 0 end | |
1149 .fsBox.pattern.pattern insert 0 $fsBox(pattern) | |
1150 FSBoxFSShow [.fsBox.path.path get] $fsBox(pattern) $fsBox(all)} | |
1151 } | |
1152 | |
1153 if {"$fsBoxPath" != "/"} { | |
1154 .fsBox.files.files insert end "../" | |
1155 } | |
1156 foreach fsBoxCounter $fsBoxElementList { | |
1157 if {[string match $fsBoxPattern $fsBoxCounter] || | |
1158 [IsADir [string trimright $fsBoxPath/$fsBoxCounter "/@"]]} { | |
1159 if {"$fsBoxCounter" != "../" && | |
1160 "$fsBoxCounter" != "./"} { | |
1161 .fsBox.files.files insert end $fsBoxCounter | |
1162 } | |
1163 } | |
1164 | |
1165 if {$fsBox(extensions)} { | |
1166 catch "file rootname $fsBoxCounter" fsBoxRootName | |
1167 catch "file extension $fsBoxCounter" fsBoxExtension | |
1168 set fsBoxExtension [string trimright $fsBoxExtension "/*@"] | |
1169 if {"$fsBoxExtension" != "" && "$fsBoxRootName" != ""} { | |
1170 set fsBoxInsert 1 | |
1171 set fsBoxLast [.fsBox.pattern.patterns.patterns.menu index last] | |
1172 for {set fsBoxCounter1 0} {$fsBoxCounter1 <= $fsBoxLast} {incr fsBoxCounter1 1} { | |
1173 if {"*$fsBoxExtension" == "[lindex [.fsBox.pattern.patterns.patterns.menu entryconfigure $fsBoxCounter1 -label] 4]"} { | |
1174 set fsBoxInsert 0 | |
1175 } | |
1176 } | |
1177 if {$fsBoxInsert} { | |
1178 .fsBox.pattern.patterns.patterns.menu add command -label "*$fsBoxExtension" -command " | |
1179 global fsBox | |
1180 set fsBox(pattern) \"*$fsBoxExtension\" | |
1181 .fsBox.pattern.pattern delete 0 end | |
1182 .fsBox.pattern.pattern insert 0 \$fsBox(pattern) | |
1183 FSBoxFSShow \[.fsBox.path.path get\] \$fsBox(pattern) \$fsBox(all)" | |
1184 } | |
1185 } | |
1186 } | |
1187 } | |
1188 if {$fsBox(extensions)} { | |
1189 .fsBox.pattern.patterns.patterns.menu add separator | |
1190 } | |
1191 if {$fsBox(extensions) || | |
1192 "[.fsBox.pattern.patterns.patterns.menu index last]" == "none"} { | |
1193 .fsBox.pattern.patterns.patterns.menu add checkbutton -label "Scan extensions" -variable "fsBox(extensions)" -command { | |
1194 global fsBox | |
1195 FSBoxFSShow [.fsBox.path.path get] [.fsBox.pattern.pattern get] $fsBox(all)} | |
1196 } | |
1197 } | |
1198 | |
1199 | |
1200 # Procedure: InputBoxInternal | |
1201 proc InputBoxInternal { inputBoxMessage inputBoxCommandOk inputBoxCommandCancel inputBoxGeometry inputBoxTitle lineNum} { | |
1202 # xf ignore me 6 | |
1203 global inputBox | |
1204 | |
1205 set tmpButtonOpt "" | |
1206 set tmpFrameOpt "" | |
1207 set tmpMessageOpt "" | |
1208 set tmpScaleOpt "" | |
1209 set tmpScrollOpt "" | |
1210 if {"$inputBox(activeBackground)" != ""} { | |
1211 append tmpButtonOpt "-activebackground \"$inputBox(activeBackground)\" " | |
1212 } | |
1213 if {"$inputBox(activeForeground)" != ""} { | |
1214 append tmpButtonOpt "-activeforeground \"$inputBox(activeForeground)\" " | |
1215 } | |
1216 if {"$inputBox(background)" != ""} { | |
1217 append tmpButtonOpt "-background \"$inputBox(background)\" " | |
1218 append tmpFrameOpt "-background \"$inputBox(background)\" " | |
1219 append tmpMessageOpt "-background \"$inputBox(background)\" " | |
1220 } | |
1221 if {"$inputBox(font)" != ""} { | |
1222 append tmpButtonOpt "-font \"$inputBox(font)\" " | |
1223 append tmpMessageOpt "-font \"$inputBox(font)\" " | |
1224 } | |
1225 if {"$inputBox(foreground)" != ""} { | |
1226 append tmpButtonOpt "-foreground \"$inputBox(foreground)\" " | |
1227 append tmpMessageOpt "-foreground \"$inputBox(foreground)\" " | |
1228 } | |
1229 if {"$inputBox(scrollActiveForeground)" != ""} { | |
1230 append tmpScrollOpt "-activeforeground \"$inputBox(scrollActiveForeground)\" " | |
1231 } | |
1232 if {"$inputBox(scrollBackground)" != ""} { | |
1233 append tmpScrollOpt "-background \"$inputBox(scrollBackground)\" " | |
1234 } | |
1235 if {"$inputBox(scrollForeground)" != ""} { | |
1236 append tmpScrollOpt "-foreground \"$inputBox(scrollForeground)\" " | |
1237 } | |
1238 | |
1239 # start build of toplevel | |
1240 if {"[info commands XFDestroy]" != ""} { | |
1241 catch {XFDestroy $inputBox(toplevelName)} | |
1242 } { | |
1243 catch {destroy $inputBox(toplevelName)} | |
1244 } | |
1245 toplevel $inputBox(toplevelName) -borderwidth 0 | |
1246 catch "$inputBox(toplevelName) config $tmpFrameOpt" | |
1247 if {[catch "wm geometry $inputBox(toplevelName) $inputBoxGeometry"]} { | |
1248 wm geometry $inputBox(toplevelName) 350x150 | |
1249 } | |
1250 wm title $inputBox(toplevelName) $inputBoxTitle | |
1251 wm maxsize $inputBox(toplevelName) 1000 1000 | |
1252 wm minsize $inputBox(toplevelName) 100 100 | |
1253 # end build of toplevel | |
1254 | |
1255 message $inputBox(toplevelName).message1 -anchor "$inputBox(anchor)" -justify "$inputBox(justify)" -relief raised -text "$inputBoxMessage" | |
1256 catch "$inputBox(toplevelName).message1 config $tmpMessageOpt" | |
1257 | |
1258 set xfTmpWidth [string range $inputBoxGeometry 0 [expr [string first x $inputBoxGeometry]-1]] | |
1259 if {"$xfTmpWidth" != ""} { | |
1260 # set message size | |
1261 catch "$inputBox(toplevelName).message1 configure -width [expr $xfTmpWidth-10]" | |
1262 } { | |
1263 $inputBox(toplevelName).message1 configure -aspect 1500 | |
1264 } | |
1265 | |
1266 frame $inputBox(toplevelName).frame0 -borderwidth 0 -relief raised | |
1267 catch "$inputBox(toplevelName).frame0 config $tmpFrameOpt" | |
1268 | |
1269 frame $inputBox(toplevelName).frame1 -borderwidth 0 -relief raised | |
1270 catch "$inputBox(toplevelName).frame1 config $tmpFrameOpt" | |
1271 | |
1272 if {$lineNum == 1} { | |
1273 scrollbar $inputBox(toplevelName).frame1.hscroll -orient "horizontal" -relief raised -command "$inputBox(toplevelName).frame1.input view" | |
1274 catch "$inputBox(toplevelName).frame1.hscroll config $tmpScrollOpt" | |
1275 | |
1276 entry $inputBox(toplevelName).frame1.input -relief raised -scrollcommand "$inputBox(toplevelName).frame1.hscroll set" | |
1277 catch "$inputBox(toplevelName).frame1.input config $tmpMessageOpt" | |
1278 | |
1279 $inputBox(toplevelName).frame1.input insert 0 $inputBox($inputBox(toplevelName),inputOne) | |
1280 | |
1281 # bindings | |
1282 bind $inputBox(toplevelName).frame1.input <Return> " | |
1283 global inputBox | |
1284 set inputBox($inputBox(toplevelName),inputOne) \[$inputBox(toplevelName).frame1.input get\] | |
1285 if {\"\[info commands XFDestroy\]\" != \"\"} { | |
1286 catch {XFDestroy $inputBox(toplevelName)} | |
1287 } { | |
1288 catch {destroy $inputBox(toplevelName)} | |
1289 } | |
1290 $inputBoxCommandOk" | |
1291 | |
1292 # packing | |
1293 pack append $inputBox(toplevelName).frame1 $inputBox(toplevelName).frame1.hscroll {bottom fill} $inputBox(toplevelName).frame1.input {top fill expand} | |
1294 } { | |
1295 text $inputBox(toplevelName).frame1.input -relief raised -wrap none -borderwidth 2 -yscrollcommand "$inputBox(toplevelName).frame1.vscroll set" | |
1296 catch "$inputBox(toplevelName).frame1.input config $tmpMessageOpt" | |
1297 | |
1298 scrollbar $inputBox(toplevelName).frame1.vscroll -relief raised -command "$inputBox(toplevelName).frame1.input yview" | |
1299 catch "$inputBox(toplevelName).frame1.vscroll config $tmpScrollOpt" | |
1300 | |
1301 $inputBox(toplevelName).frame1.input insert 1.0 $inputBox($inputBox(toplevelName),inputMulti) | |
1302 | |
1303 # bindings | |
1304 bind $inputBox(toplevelName).frame1.input <Control-Return> " | |
1305 global inputBox | |
1306 set inputBox($inputBox(toplevelName),inputMulti) \[$inputBox(toplevelName).frame1.input get 1.0 end\] | |
1307 if {\"\[info commands XFDestroy\]\" != \"\"} { | |
1308 catch {XFDestroy $inputBox(toplevelName)} | |
1309 } { | |
1310 catch {destroy $inputBox(toplevelName)} | |
1311 } | |
1312 $inputBoxCommandOk" | |
1313 bind $inputBox(toplevelName).frame1.input <Meta-Return> " | |
1314 global inputBox | |
1315 set inputBox($inputBox(toplevelName),inputMulti) \[$inputBox(toplevelName).frame1.input get 1.0 end\] | |
1316 if {\"\[info commands XFDestroy\]\" != \"\"} { | |
1317 catch {XFDestroy $inputBox(toplevelName)} | |
1318 } { | |
1319 catch {destroy $inputBox(toplevelName)} | |
1320 } | |
1321 $inputBoxCommandOk" | |
1322 | |
1323 # packing | |
1324 pack append $inputBox(toplevelName).frame1 $inputBox(toplevelName).frame1.vscroll "$inputBox(scrollSide) filly" $inputBox(toplevelName).frame1.input {left fill expand} | |
1325 } | |
1326 | |
1327 button $inputBox(toplevelName).frame0.button0 -text "OK" -command " | |
1328 global inputBox | |
1329 if {$lineNum == 1} { | |
1330 set inputBox($inputBox(toplevelName),inputOne) \[$inputBox(toplevelName).frame1.input get\] | |
1331 } { | |
1332 set inputBox($inputBox(toplevelName),inputMulti) \[$inputBox(toplevelName).frame1.input get 1.0 end\] | |
1333 } | |
1334 if {\"\[info commands XFDestroy\]\" != \"\"} { | |
1335 catch {XFDestroy $inputBox(toplevelName)} | |
1336 } { | |
1337 catch {destroy $inputBox(toplevelName)} | |
1338 } | |
1339 $inputBoxCommandOk" | |
1340 catch "$inputBox(toplevelName).frame0.button0 config $tmpButtonOpt" | |
1341 | |
1342 button $inputBox(toplevelName).frame0.button1 -text "Cancel" -command " | |
1343 global inputBox | |
1344 if {$lineNum == 1} { | |
1345 set inputBox($inputBox(toplevelName),inputOne) \"\" | |
1346 } { | |
1347 set inputBox($inputBox(toplevelName),inputMulti) \"\" | |
1348 } | |
1349 if {\"\[info commands XFDestroy\]\" != \"\"} { | |
1350 catch {XFDestroy $inputBox(toplevelName)} | |
1351 } { | |
1352 catch {destroy $inputBox(toplevelName)} | |
1353 } | |
1354 $inputBoxCommandCancel" | |
1355 catch "$inputBox(toplevelName).frame0.button1 config $tmpButtonOpt" | |
1356 | |
1357 pack append $inputBox(toplevelName).frame0 $inputBox(toplevelName).frame0.button0 {left fill expand} $inputBox(toplevelName).frame0.button1 {left fill expand} | |
1358 | |
1359 pack append $inputBox(toplevelName) $inputBox(toplevelName).frame0 {bottom fill} $inputBox(toplevelName).frame1 {bottom fill expand} $inputBox(toplevelName).message1 {top fill} | |
1360 } | |
1361 | |
1362 | |
1363 # Procedure: InputBoxMulti | |
1364 proc InputBoxMulti { {inputBoxMessage "Input box:"} {inputBoxCommandOk ""} {inputBoxCommandCancel ""} {inputBoxGeometry "350x150"} {inputBoxTitle "Input box"}} { | |
1365 # xf ignore me 5 | |
1366 ########## | |
1367 # Procedure: InputBoxMulti | |
1368 # Description: show input box with one text line | |
1369 # Arguments: {inputBoxMessage} - message to display | |
1370 # {inputBoxCommandOk} - the command to call after ok | |
1371 # {inputBoxCommandCancel} - the command to call after cancel | |
1372 # {inputBoxGeometry} - the geometry for the window | |
1373 # {inputBoxTitle} - the title for the window | |
1374 # Returns: The entered text | |
1375 # Sideeffects: none | |
1376 # Notes: there exist also a function called: | |
1377 # InputBoxOne - to enter one line text | |
1378 ########## | |
1379 # | |
1380 # global inputBox(activeBackground) - active background color | |
1381 # global inputBox(activeForeground) - active foreground color | |
1382 # global inputBox(anchor) - anchor for message box | |
1383 # global inputBox(background) - background color | |
1384 # global inputBox(erase) - erase previous text | |
1385 # global inputBox(font) - message font | |
1386 # global inputBox(foreground) - foreground color | |
1387 # global inputBox(justify) - justify for message box | |
1388 # global inputBox(scrollActiveForeground) - scrollbar active background color | |
1389 # global inputBox(scrollBackground) - scrollbar background color | |
1390 # global inputBox(scrollForeground) - scrollbar foreground color | |
1391 # global inputBox(scrollSide) - side where scrollbar is located | |
1392 # global inputBox(toplevelName) - the toplevel name | |
1393 # global inputBox(toplevelName,inputMulti) - the text in the text widget | |
1394 | |
1395 global inputBox | |
1396 | |
1397 if {"$inputBoxGeometry" == ""} { | |
1398 set inputBoxGeometry 350x150 | |
1399 } | |
1400 if {$inputBox(erase)} { | |
1401 set inputBox($inputBox(toplevelName),inputMulti) "" | |
1402 } { | |
1403 if {![info exists inputBox($inputBox(toplevelName),inputMulti)]} { | |
1404 set inputBox($inputBox(toplevelName),inputMulti) "" | |
1405 } | |
1406 } | |
1407 InputBoxInternal $inputBoxMessage $inputBoxCommandOk $inputBoxCommandCancel $inputBoxGeometry $inputBoxTitle 2 | |
1408 | |
1409 # wait for the box to be destroyed | |
1410 update idletask | |
1411 grab $inputBox(toplevelName) | |
1412 tkwait window $inputBox(toplevelName) | |
1413 | |
1414 return $inputBox($inputBox(toplevelName),inputMulti) | |
1415 } | |
1416 | |
1417 | |
1418 # Procedure: InputBoxOne | |
1419 proc InputBoxOne { {inputBoxMessage "Input box:"} {inputBoxCommandOk ""} {inputBoxCommandCancel ""} {inputBoxGeometry "350x150"} {inputBoxTitle "Input box"}} { | |
1420 # xf ignore me 5 | |
1421 ########## | |
1422 # Procedure: InputBoxOne | |
1423 # Description: show input box with one text line | |
1424 # Arguments: {inputBoxMessage} - message to display | |
1425 # {inputBoxCommandOk} - the command to call after ok | |
1426 # {inputBoxCommandCancel} - the command to call after cancel | |
1427 # {inputBoxGeometry} - the geometry for the window | |
1428 # {inputBoxTitle} - the title for the window | |
1429 # Returns: The entered text | |
1430 # Sideeffects: none | |
1431 # Notes: there exist also a function called: | |
1432 # InputBoxMulti - to enter multiline text | |
1433 ########## | |
1434 # | |
1435 # global inputBox(activeBackground) - active background color | |
1436 # global inputBox(activeForeground) - active foreground color | |
1437 # global inputBox(anchor) - anchor for message box | |
1438 # global inputBox(background) - background color | |
1439 # global inputBox(erase) - erase previous text | |
1440 # global inputBox(font) - message font | |
1441 # global inputBox(foreground) - foreground color | |
1442 # global inputBox(justify) - justify for message box | |
1443 # global inputBox(scrollActiveForeground) - scrollbar active background color | |
1444 # global inputBox(scrollBackground) - scrollbar background color | |
1445 # global inputBox(scrollForeground) - scrollbar foreground color | |
1446 # global inputBox(scrollSide) - side where scrollbar is located | |
1447 # global inputBox(toplevelName) - the toplevel name | |
1448 # global inputBox(toplevelName,inputOne) - the text in the entry widget | |
1449 | |
1450 global inputBox | |
1451 | |
1452 if {$inputBox(erase)} { | |
1453 set inputBox($inputBox(toplevelName),inputOne) "" | |
1454 } { | |
1455 if {![info exists inputBox($inputBox(toplevelName),inputOne)]} { | |
1456 set inputBox($inputBox(toplevelName),inputOne) "" | |
1457 } | |
1458 } | |
1459 InputBoxInternal $inputBoxMessage $inputBoxCommandOk $inputBoxCommandCancel $inputBoxGeometry $inputBoxTitle 1 | |
1460 | |
1461 # wait for the box to be destroyed | |
1462 update idletask | |
1463 grab $inputBox(toplevelName) | |
1464 tkwait window $inputBox(toplevelName) | |
1465 | |
1466 return $inputBox($inputBox(toplevelName),inputOne) | |
1467 } | |
1468 | |
1469 | |
1470 # Procedure: IsADir | |
1471 proc IsADir { pathName} { | |
1472 # xf ignore me 5 | |
1473 ########## | |
1474 # Procedure: IsADir | |
1475 # Description: check if name is a directory (including symbolic links) | |
1476 # Arguments: pathName - the path to check | |
1477 # Returns: 1 if its a directory, otherwise 0 | |
1478 # Sideeffects: none | |
1479 ########## | |
1480 | |
1481 if {[file isdirectory $pathName]} { | |
1482 return 1 | |
1483 } { | |
1484 catch "file type $pathName" fileType | |
1485 if {"$fileType" == "link"} { | |
1486 if {[catch "file readlink $pathName" linkName]} { | |
1487 return 0 | |
1488 } | |
1489 catch "file type $linkName" fileType | |
1490 while {"$fileType" == "link"} { | |
1491 if {[catch "file readlink $linkName" linkName]} { | |
1492 return 0 | |
1493 } | |
1494 catch "file type $linkName" fileType | |
1495 } | |
1496 return [file isdirectory $linkName] | |
1497 } | |
1498 } | |
1499 return 0 | |
1500 } | |
1501 | |
1502 | |
1503 # Procedure: IsAFile | |
1504 proc IsAFile { fileName} { | |
1505 # xf ignore me 5 | |
1506 ########## | |
1507 # Procedure: IsAFile | |
1508 # Description: check if filename is a file (including symbolic links) | |
1509 # Arguments: fileName - the filename to check | |
1510 # Returns: 1 if its a file, otherwise 0 | |
1511 # Sideeffects: none | |
1512 ########## | |
1513 | |
1514 if {[file isfile $fileName]} { | |
1515 return 1 | |
1516 } { | |
1517 catch "file type $fileName" fileType | |
1518 if {"$fileType" == "link"} { | |
1519 if {[catch "file readlink $fileName" linkName]} { | |
1520 return 0 | |
1521 } | |
1522 catch "file type $linkName" fileType | |
1523 while {"$fileType" == "link"} { | |
1524 if {[catch "file readlink $linkName" linkName]} { | |
1525 return 0 | |
1526 } | |
1527 catch "file type $linkName" fileType | |
1528 } | |
1529 return [file isfile $linkName] | |
1530 } | |
1531 } | |
1532 return 0 | |
1533 } | |
1534 | |
1535 | |
1536 # Procedure: IsASymlink | |
1537 proc IsASymlink { fileName} { | |
1538 # xf ignore me 5 | |
1539 ########## | |
1540 # Procedure: IsASymlink | |
1541 # Description: check if filename is a symbolic link | |
1542 # Arguments: fileName - the path/filename to check | |
1543 # Returns: none | |
1544 # Sideeffects: none | |
1545 ########## | |
1546 | |
1547 catch "file type $fileName" fileType | |
1548 if {"$fileType" == "link"} { | |
1549 return 1 | |
1550 } | |
1551 return 0 | |
1552 } | |
1553 | |
1554 | |
1555 # Procedure: PrologCommand | |
1556 proc PrologCommand {} { | |
1557 prolog {prolog_call [InputBoxOne "Prolog Command:"]} lite | |
1558 } | |
1559 | |
1560 | |
1561 # Procedure: TokioCommand | |
1562 proc TokioCommand {} { | |
1563 prolog {tokio_call [InputBoxOne "Tokio Command:"]} lite | |
1564 } | |
1565 | |
1566 | |
1567 # Procedure: canvaswh | |
1568 proc canvaswh { c scale} { | |
1569 global scalex scaley | |
1570 if {! $scalex && ! $scaley } { | |
1571 regexp {([0-9]+)x([0-9]+)} [wm geometry .] dm w h | |
1572 set h [$c canvasy [expr $h/2]] | |
1573 set w [$c canvasx [expr $w/2]] | |
1574 } else { | |
1575 set h $scaley | |
1576 set w $scalex | |
1577 } | |
1578 $c scale all $w $h $scale $scale | |
1579 } | |
1580 | |
1581 | |
1582 # Procedure: crosshair | |
1583 proc crosshair { c x y} { | |
1584 global scalex scaley | |
1585 if {[$c find withtag cursol] != {}} { | |
1586 $c delete cursol | |
1587 } | |
1588 set cs 5 | |
1589 set x [$c canvasx $x] | |
1590 set y [$c canvasy $y] | |
1591 $c create line $x [expr $y - $cs] $x [expr $y + $cs] -tags cursol | |
1592 $c create line [expr $x - $cs] $y [expr $x + $cs] $y -tags cursol | |
1593 set scalex $x | |
1594 set scaley $y | |
1595 } | |
1596 | |
1597 | |
1598 # Procedure: event | |
1599 proc event { args now} { | |
1600 prolog "tokio_event $args $now" tokio | |
1601 } | |
1602 | |
1603 | |
1604 # Procedure: filehandling | |
1605 proc filehandling { t mode file} { | |
1606 if {[string compare $mode "load"] == 0} { | |
1607 if [file isfile $file] { | |
1608 $t delete 0.0 end | |
1609 set F [open $file r] | |
1610 while {[gets $F string] != -1} { | |
1611 $t insert end "$string\n" | |
1612 } | |
1613 close $F | |
1614 } | |
1615 } else { | |
1616 set line [$t get 0.0 end] | |
1617 # if [file writable $dir] { | |
1618 if [expr [llength $line] > 0] { | |
1619 set F [open $file w] | |
1620 puts $F $line | |
1621 close $F | |
1622 } | |
1623 # } | |
1624 } | |
1625 } | |
1626 | |
1627 | |
1628 # Procedure: lite | |
1629 proc lite { a b} { | |
1630 prolog "event $a $b" lite | |
1631 } | |
1632 | |
1633 | |
1634 # Procedure: text_clear | |
1635 proc text_clear { t} { | |
1636 $t delete 0.0 end | |
1637 } | |
1638 | |
1639 | |
1640 # Internal procedures | |
1641 | |
1642 | |
1643 # Procedure: Alias | |
1644 if {"[info procs Alias]" == ""} { | |
1645 proc Alias { args} { | |
1646 # xf ignore me 7 | |
1647 ########## | |
1648 # Procedure: Alias | |
1649 # Description: establish an alias for a procedure | |
1650 # Arguments: args - no argument means that a list of all aliases | |
1651 # is returned. Otherwise the first parameter is | |
1652 # the alias name, and the second parameter is | |
1653 # the procedure that is aliased. | |
1654 # Returns: nothing, the command that is bound to the alias or a | |
1655 # list of all aliases - command pairs. | |
1656 # Sideeffects: internalAliasList is updated, and the alias | |
1657 # proc is inserted | |
1658 ########## | |
1659 global internalAliasList | |
1660 | |
1661 if {[llength $args] == 0} { | |
1662 return $internalAliasList | |
1663 } { | |
1664 if {[llength $args] == 1} { | |
1665 set xfTmpIndex [lsearch $internalAliasList "[lindex $args 0] *"] | |
1666 if {$xfTmpIndex != -1} { | |
1667 return [lindex [lindex $internalAliasList $xfTmpIndex] 1] | |
1668 } | |
1669 } { | |
1670 if {[llength $args] == 2} { | |
1671 eval "proc [lindex $args 0] {args} {#xf ignore me 4 | |
1672 return \[eval \"[lindex $args 1] \$args\"\]}" | |
1673 set xfTmpIndex [lsearch $internalAliasList "[lindex $args 0] *"] | |
1674 if {$xfTmpIndex != -1} { | |
1675 set internalAliasList [lreplace $internalAliasList $xfTmpIndex $xfTmpIndex "[lindex $args 0] [lindex $args 1]"] | |
1676 } { | |
1677 lappend internalAliasList "[lindex $args 0] [lindex $args 1]" | |
1678 } | |
1679 } { | |
1680 error "Alias: wrong number or args: $args" | |
1681 } | |
1682 } | |
1683 } | |
1684 } | |
1685 } | |
1686 | |
1687 | |
1688 # Procedure: GetSelection | |
1689 if {"[info procs GetSelection]" == ""} { | |
1690 proc GetSelection {} { | |
1691 # xf ignore me 7 | |
1692 ########## | |
1693 # Procedure: GetSelection | |
1694 # Description: get current selection | |
1695 # Arguments: none | |
1696 # Returns: none | |
1697 # Sideeffects: none | |
1698 ########## | |
1699 | |
1700 # the save way | |
1701 set xfSelection "" | |
1702 catch "selection get" xfSelection | |
1703 if {"$xfSelection" == "selection doesn't exist or form \"STRING\" not defined"} { | |
1704 return "" | |
1705 } { | |
1706 return $xfSelection | |
1707 } | |
1708 } | |
1709 } | |
1710 | |
1711 | |
1712 # Procedure: MenuPopupAdd | |
1713 if {"[info procs MenuPopupAdd]" == ""} { | |
1714 proc MenuPopupAdd { xfW xfButton xfMenu {xfModifier ""} {xfCanvasTag ""}} { | |
1715 # xf ignore me 7 | |
1716 # the popup menu handling is from (I already gave up with popup handling :-): | |
1717 # | |
1718 # Copyright 1991,1992 by James Noble. | |
1719 # Everyone is granted permission to copy, modify and redistribute. | |
1720 # This notice must be preserved on all copies or derivates. | |
1721 # | |
1722 ########## | |
1723 # Procedure: MenuPopupAdd | |
1724 # Description: attach a popup menu to widget | |
1725 # Arguments: xfW - the widget | |
1726 # xfButton - the button we use | |
1727 # xfMenu - the menu to attach | |
1728 # {xfModifier} - a optional modifier | |
1729 # {xfCanvasTag} - a canvas tagOrId | |
1730 # Returns: none | |
1731 # Sideeffects: none | |
1732 ########## | |
1733 global tk_popupPriv | |
1734 | |
1735 set tk_popupPriv($xfMenu,focus) "" | |
1736 set tk_popupPriv($xfMenu,grab) "" | |
1737 if {"$xfModifier" != ""} { | |
1738 set press "$xfModifier-" | |
1739 set motion "$xfModifier-" | |
1740 set release "Any-" | |
1741 } { | |
1742 set press "" | |
1743 set motion "" | |
1744 set release "" | |
1745 } | |
1746 | |
1747 bind $xfMenu "<${motion}B${xfButton}-Motion>" "MenuPopupMotion $xfMenu %W %X %Y" | |
1748 bind $xfMenu "<${release}ButtonRelease-${xfButton}>" "MenuPopupRelease $xfMenu %W" | |
1749 if {"$xfCanvasTag" == ""} { | |
1750 bind $xfW "<${press}ButtonPress-${xfButton}>" "MenuPopupPost $xfMenu %X %Y" | |
1751 bind $xfW "<${release}ButtonRelease-${xfButton}>" "MenuPopupRelease $xfMenu %W" | |
1752 } { | |
1753 $xfW bind $xfCanvasTag "<${press}ButtonPress-${xfButton}>" "MenuPopupPost $xfMenu %X %Y" | |
1754 $xfW bind $xfCanvasTag "<${release}ButtonRelease-${xfButton}>" "MenuPopupRelease $xfMenu %W" | |
1755 } | |
1756 } | |
1757 } | |
1758 | |
1759 | |
1760 # Procedure: MenuPopupMotion | |
1761 if {"[info procs MenuPopupMotion]" == ""} { | |
1762 proc MenuPopupMotion { xfMenu xfW xfX xfY} { | |
1763 # xf ignore me 7 | |
1764 ########## | |
1765 # Procedure: MenuPopupMotion | |
1766 # Description: handle the popup menu motion | |
1767 # Arguments: xfMenu - the topmost menu | |
1768 # xfW - the menu | |
1769 # xfX - the root x coordinate | |
1770 # xfY - the root x coordinate | |
1771 # Returns: none | |
1772 # Sideeffects: none | |
1773 ########## | |
1774 global tk_popupPriv | |
1775 | |
1776 if {"[info commands $xfW]" != "" && [winfo ismapped $xfW] && | |
1777 "[winfo class $xfW]" == "Menu" && | |
1778 [info exists tk_popupPriv($xfMenu,focus)] && | |
1779 "$tk_popupPriv($xfMenu,focus)" != "" && | |
1780 [info exists tk_popupPriv($xfMenu,grab)] && | |
1781 "$tk_popupPriv($xfMenu,grab)" != ""} { | |
1782 set xfPopMinX [winfo rootx $xfW] | |
1783 set xfPopMaxX [expr $xfPopMinX+[winfo width $xfW]] | |
1784 if {$xfX >= $xfPopMinX && $xfX <= $xfPopMaxX} { | |
1785 $xfW activate @[expr $xfY-[winfo rooty $xfW]] | |
1786 if {![catch "$xfW entryconfig @[expr $xfY-[winfo rooty $xfW]] -menu" result]} { | |
1787 if {"[lindex $result 4]" != ""} { | |
1788 foreach binding [bind $xfMenu] { | |
1789 bind [lindex $result 4] $binding [bind $xfMenu $binding] | |
1790 } | |
1791 } | |
1792 } | |
1793 } { | |
1794 $xfW activate none | |
1795 } | |
1796 } | |
1797 } | |
1798 } | |
1799 | |
1800 | |
1801 # Procedure: MenuPopupPost | |
1802 if {"[info procs MenuPopupPost]" == ""} { | |
1803 proc MenuPopupPost { xfMenu xfX xfY} { | |
1804 # xf ignore me 7 | |
1805 ########## | |
1806 # Procedure: MenuPopupPost | |
1807 # Description: post the popup menu | |
1808 # Arguments: xfMenu - the menu | |
1809 # xfX - the root x coordinate | |
1810 # xfY - the root x coordinate | |
1811 # Returns: none | |
1812 # Sideeffects: none | |
1813 ########## | |
1814 global tk_popupPriv | |
1815 | |
1816 if {"[info commands $xfMenu]" != ""} { | |
1817 if {![info exists tk_popupPriv($xfMenu,focus)]} { | |
1818 set tk_popupPriv($xfMenu,focus) [focus] | |
1819 } { | |
1820 if {"$tk_popupPriv($xfMenu,focus)" == ""} { | |
1821 set tk_popupPriv($xfMenu,focus) [focus] | |
1822 } | |
1823 } | |
1824 set tk_popupPriv($xfMenu,grab) $xfMenu | |
1825 | |
1826 catch "$xfMenu activate none" | |
1827 catch "$xfMenu post $xfX $xfY" | |
1828 catch "focus $xfMenu" | |
1829 catch "grab -global $xfMenu" | |
1830 } | |
1831 } | |
1832 } | |
1833 | |
1834 | |
1835 # Procedure: MenuPopupRelease | |
1836 if {"[info procs MenuPopupRelease]" == ""} { | |
1837 proc MenuPopupRelease { xfMenu xfW} { | |
1838 # xf ignore me 7 | |
1839 ########## | |
1840 # Procedure: MenuPopupRelease | |
1841 # Description: remove the popup menu | |
1842 # Arguments: xfMenu - the topmost menu widget | |
1843 # xfW - the menu widget | |
1844 # Returns: none | |
1845 # Sideeffects: none | |
1846 ########## | |
1847 global tk_popupPriv | |
1848 global tkVersion | |
1849 | |
1850 if {"[info commands $xfW]" != "" && [winfo ismapped $xfW] && | |
1851 "[winfo class $xfW]" == "Menu" && | |
1852 [info exists tk_popupPriv($xfMenu,focus)] && | |
1853 "$tk_popupPriv($xfMenu,focus)" != "" && | |
1854 [info exists tk_popupPriv($xfMenu,grab)] && | |
1855 "$tk_popupPriv($xfMenu,grab)" != ""} { | |
1856 if {$tkVersion >= 3.0} { | |
1857 catch "grab release $tk_popupPriv($xfMenu,grab)" | |
1858 } { | |
1859 catch "grab none" | |
1860 } | |
1861 catch "focus $tk_popupPriv($xfMenu,focus)" | |
1862 set tk_popupPriv($xfMenu,focus) "" | |
1863 set tk_popupPriv($xfMenu,grab) "" | |
1864 if {"[$xfW index active]" != "none"} { | |
1865 $xfW invoke active; catch "$xfMenu unpost" | |
1866 } | |
1867 } | |
1868 catch "$xfMenu unpost" | |
1869 } | |
1870 } | |
1871 | |
1872 | |
1873 # Procedure: NoFunction | |
1874 if {"[info procs NoFunction]" == ""} { | |
1875 proc NoFunction { args} { | |
1876 # xf ignore me 7 | |
1877 ########## | |
1878 # Procedure: NoFunction | |
1879 # Description: do nothing (especially with scales and scrollbars) | |
1880 # Arguments: args - a number of ignored parameters | |
1881 # Returns: none | |
1882 # Sideeffects: none | |
1883 ########## | |
1884 } | |
1885 } | |
1886 | |
1887 | |
1888 # Procedure: SN | |
1889 if {"[info procs SN]" == ""} { | |
1890 proc SN { {xfName ""}} { | |
1891 # xf ignore me 7 | |
1892 ########## | |
1893 # Procedure: SN | |
1894 # Description: map a symbolic name to the widget path | |
1895 # Arguments: xfName | |
1896 # Returns: the symbolic name | |
1897 # Sideeffects: none | |
1898 ########## | |
1899 | |
1900 SymbolicName $xfName | |
1901 } | |
1902 } | |
1903 | |
1904 | |
1905 # Procedure: SymbolicName | |
1906 if {"[info procs SymbolicName]" == ""} { | |
1907 proc SymbolicName { {xfName ""}} { | |
1908 # xf ignore me 7 | |
1909 ########## | |
1910 # Procedure: SymbolicName | |
1911 # Description: map a symbolic name to the widget path | |
1912 # Arguments: xfName | |
1913 # Returns: the symbolic name | |
1914 # Sideeffects: none | |
1915 ########## | |
1916 | |
1917 global symbolicName | |
1918 | |
1919 if {"$xfName" != ""} { | |
1920 set xfArrayName "" | |
1921 append xfArrayName symbolicName ( $xfName ) | |
1922 if {![catch "set \"$xfArrayName\"" xfValue]} { | |
1923 return $xfValue | |
1924 } { | |
1925 if {"[info commands XFProcError]" != ""} { | |
1926 XFProcError "Unknown symbolic name:\n$xfName" | |
1927 } { | |
1928 puts stderr "XF error: unknown symbolic name:\n$xfName" | |
1929 } | |
1930 } | |
1931 } | |
1932 return "" | |
1933 } | |
1934 } | |
1935 | |
1936 | |
1937 # Procedure: Unalias | |
1938 if {"[info procs Unalias]" == ""} { | |
1939 proc Unalias { aliasName} { | |
1940 # xf ignore me 7 | |
1941 ########## | |
1942 # Procedure: Unalias | |
1943 # Description: remove an alias for a procedure | |
1944 # Arguments: aliasName - the alias name to remove | |
1945 # Returns: none | |
1946 # Sideeffects: internalAliasList is updated, and the alias | |
1947 # proc is removed | |
1948 ########## | |
1949 global internalAliasList | |
1950 | |
1951 set xfIndex [lsearch $internalAliasList "$aliasName *"] | |
1952 if {$xfIndex != -1} { | |
1953 rename $aliasName "" | |
1954 set internalAliasList [lreplace $internalAliasList $xfIndex $xfIndex] | |
1955 } | |
1956 } | |
1957 } | |
1958 | |
1959 | |
1960 | |
1961 # application parsing procedure | |
1962 proc XFLocalParseAppDefs {xfAppDefFile} { | |
1963 global xfAppDefaults | |
1964 | |
1965 # basically from: Michael Moore | |
1966 if {[file exists $xfAppDefFile] && | |
1967 [file readable $xfAppDefFile] && | |
1968 "[file type $xfAppDefFile]" == "link"} { | |
1969 catch "file type $xfAppDefFile" xfType | |
1970 while {"$xfType" == "link"} { | |
1971 if {[catch "file readlink $xfAppDefFile" xfAppDefFile]} { | |
1972 return | |
1973 } | |
1974 catch "file type $xfAppDefFile" xfType | |
1975 } | |
1976 } | |
1977 if {!("$xfAppDefFile" != "" && | |
1978 [file exists $xfAppDefFile] && | |
1979 [file readable $xfAppDefFile] && | |
1980 "[file type $xfAppDefFile]" == "file")} { | |
1981 return | |
1982 } | |
1983 if {![catch "open $xfAppDefFile r" xfResult]} { | |
1984 set xfAppFileContents [read $xfResult] | |
1985 close $xfResult | |
1986 foreach line [split $xfAppFileContents "\n"] { | |
1987 # backup indicates how far to backup. It applies to the | |
1988 # situation where a resource name ends in . and when it | |
1989 # ends in *. In the second case you want to keep the * | |
1990 # in the widget name for pattern matching, but you want | |
1991 # to get rid of the . if it is the end of the name. | |
1992 set backup -2 | |
1993 set line [string trim $line] | |
1994 if {[string index $line 0] == "#" || "$line" == ""} { | |
1995 # skip comments and empty lines | |
1996 continue | |
1997 } | |
1998 set list [split $line ":"] | |
1999 set resource [string trim [lindex $list 0]] | |
2000 set i [string last "." $resource] | |
2001 set j [string last "*" $resource] | |
2002 if {$j > $i} { | |
2003 set i $j | |
2004 set backup -1 | |
2005 } | |
2006 incr i | |
2007 set name [string range $resource $i end] | |
2008 incr i $backup | |
2009 set widname [string range $resource 0 $i] | |
2010 set value [string trim [lindex $list 1]] | |
2011 if {"$widname" != "" && "$widname" != "*"} { | |
2012 # insert the widget and resourcename to the application | |
2013 # defaults list. | |
2014 if {![info exists xfAppDefaults]} { | |
2015 set xfAppDefaults "" | |
2016 } | |
2017 lappend xfAppDefaults [list $widname [string tolower $name] $value] | |
2018 } | |
2019 } | |
2020 } | |
2021 } | |
2022 | |
2023 # application loading procedure | |
2024 proc XFLocalLoadAppDefs {{xfClasses ""} {xfPriority "startupFile"} {xfAppDefFile ""}} { | |
2025 global env | |
2026 | |
2027 if {"$xfAppDefFile" == ""} { | |
2028 set xfFileList "" | |
2029 if {[info exists env(XUSERFILESEARCHPATH)]} { | |
2030 append xfFileList [split $env(XUSERFILESEARCHPATH) :] | |
2031 } | |
2032 if {[info exists env(XAPPLRESDIR)]} { | |
2033 append xfFileList [split $env(XAPPLRESDIR) :] | |
2034 } | |
2035 if {[info exists env(XFILESEARCHPATH)]} { | |
2036 append xfFileList [split $env(XFILESEARCHPATH) :] | |
2037 } | |
2038 append xfFileList " /usr/lib/X11/app-defaults" | |
2039 append xfFileList " /usr/X11/lib/X11/app-defaults" | |
2040 | |
2041 foreach xfCounter1 $xfClasses { | |
2042 foreach xfCounter2 $xfFileList { | |
2043 set xfPathName $xfCounter2 | |
2044 if {[regsub -all "%N" "$xfPathName" "$xfCounter1" xfResult]} { | |
2045 set xfPathName $xfResult | |
2046 } | |
2047 if {[regsub -all "%T" "$xfPathName" "app-defaults" xfResult]} { | |
2048 set xfPathName $xfResult | |
2049 } | |
2050 if {[regsub -all "%S" "$xfPathName" "" xfResult]} { | |
2051 set xfPathName $xfResult | |
2052 } | |
2053 if {[regsub -all "%C" "$xfPathName" "" xfResult]} { | |
2054 set xfPathName $xfResult | |
2055 } | |
2056 if {[file exists $xfPathName] && | |
2057 [file readable $xfPathName] && | |
2058 ("[file type $xfPathName]" == "file" || | |
2059 "[file type $xfPathName]" == "link")} { | |
2060 catch "option readfile $xfPathName $xfPriority" | |
2061 if {"[info commands XFParseAppDefs]" != ""} { | |
2062 XFParseAppDefs $xfPathName | |
2063 } { | |
2064 if {"[info commands XFLocalParseAppDefs]" != ""} { | |
2065 XFLocalParseAppDefs $xfPathName | |
2066 } | |
2067 } | |
2068 } { | |
2069 if {[file exists $xfCounter2/$xfCounter1] && | |
2070 [file readable $xfCounter2/$xfCounter1] && | |
2071 ("[file type $xfCounter2/$xfCounter1]" == "file" || | |
2072 "[file type $xfCounter2/$xfCounter1]" == "link")} { | |
2073 catch "option readfile $xfCounter2/$xfCounter1 $xfPriority" | |
2074 if {"[info commands XFParseAppDefs]" != ""} { | |
2075 XFParseAppDefs $xfCounter2/$xfCounter1 | |
2076 } { | |
2077 if {"[info commands XFLocalParseAppDefs]" != ""} { | |
2078 XFLocalParseAppDefs $xfCounter2/$xfCounter1 | |
2079 } | |
2080 } | |
2081 } | |
2082 } | |
2083 } | |
2084 } | |
2085 } { | |
2086 # load a specific application defaults file | |
2087 if {[file exists $xfAppDefFile] && | |
2088 [file readable $xfAppDefFile] && | |
2089 ("[file type $xfAppDefFile]" == "file" || | |
2090 "[file type $xfAppDefFile]" == "link")} { | |
2091 catch "option readfile $xfAppDefFile $xfPriority" | |
2092 if {"[info commands XFParseAppDefs]" != ""} { | |
2093 XFParseAppDefs $xfAppDefFile | |
2094 } { | |
2095 if {"[info commands XFLocalParseAppDefs]" != ""} { | |
2096 XFLocalParseAppDefs $xfAppDefFile | |
2097 } | |
2098 } | |
2099 } | |
2100 } | |
2101 } | |
2102 | |
2103 # application setting procedure | |
2104 proc XFLocalSetAppDefs {{xfWidgetPath "."}} { | |
2105 global xfAppDefaults | |
2106 | |
2107 if {![info exists xfAppDefaults]} { | |
2108 return | |
2109 } | |
2110 foreach xfCounter $xfAppDefaults { | |
2111 if {"$xfCounter" == ""} { | |
2112 break | |
2113 } | |
2114 set widname [lindex $xfCounter 0] | |
2115 if {[string match $widname ${xfWidgetPath}] || | |
2116 [string match "${xfWidgetPath}*" $widname]} { | |
2117 set name [string tolower [lindex $xfCounter 1]] | |
2118 set value [lindex $xfCounter 2] | |
2119 # Now lets see how many tcl commands match the name | |
2120 # pattern specified. | |
2121 set widlist [info command $widname] | |
2122 if {"$widlist" != ""} { | |
2123 foreach widget $widlist { | |
2124 # make sure this command is a widget. | |
2125 if {![catch "winfo id $widget"] && | |
2126 [string match "${xfWidgetPath}*" $widget]} { | |
2127 catch "$widget configure -$name $value" | |
2128 } | |
2129 } | |
2130 } | |
2131 } | |
2132 } | |
2133 } | |
2134 | |
2135 | |
2136 # prepare auto loading | |
2137 global auto_path | |
2138 global tk_library | |
2139 global xfLoadPath | |
2140 foreach xfElement [eval list [split $xfLoadPath :] $auto_path] { | |
2141 if {[file exists $xfElement/tclIndex]} { | |
2142 lappend auto_path $xfElement | |
2143 } | |
2144 } | |
2145 catch "unset auto_index" | |
2146 | |
2147 catch "unset auto_oldpath" | |
2148 | |
2149 catch "unset auto_execs" | |
2150 | |
2151 | |
2152 # initialize global variables | |
2153 proc InitGlobals {} { | |
2154 global {checkbutton5} | |
2155 set {checkbutton5} {0} | |
2156 global {fsBox} | |
2157 set {fsBox(activeBackground)} {} | |
2158 set {fsBox(activeForeground)} {} | |
2159 set {fsBox(all)} {0} | |
2160 set {fsBox(background)} {} | |
2161 set {fsBox(button)} {0} | |
2162 set {fsBox(extensions)} {0} | |
2163 set {fsBox(font)} {} | |
2164 set {fsBox(foreground)} {} | |
2165 set {fsBox(internalPath)} {/user/kono/ITL/demo} | |
2166 set {fsBox(name)} {ahoaho} | |
2167 set {fsBox(path)} {/user/kono/ITL/demo} | |
2168 set {fsBox(pattern)} {*} | |
2169 set {fsBox(scrollActiveForeground)} {} | |
2170 set {fsBox(scrollBackground)} {} | |
2171 set {fsBox(scrollForeground)} {} | |
2172 set {fsBox(scrollSide)} {left} | |
2173 set {fsBox(showPixmap)} {0} | |
2174 global {inputBox} | |
2175 set {inputBox(activeBackground)} {} | |
2176 set {inputBox(activeForeground)} {} | |
2177 set {inputBox(anchor)} {n} | |
2178 set {inputBox(background)} {} | |
2179 set {inputBox(erase)} {1} | |
2180 set {inputBox(font)} {} | |
2181 set {inputBox(foreground)} {} | |
2182 set {inputBox(justify)} {center} | |
2183 set {inputBox(scrollActiveForeground)} {} | |
2184 set {inputBox(scrollBackground)} {} | |
2185 set {inputBox(scrollForeground)} {} | |
2186 set {inputBox(scrollSide)} {left} | |
2187 set {inputBox(toplevelName)} {.inputBox} | |
2188 global {scalex} | |
2189 set {scalex} {326} | |
2190 global {scaley} | |
2191 set {scaley} {194} | |
2192 global {verbose} | |
2193 set {verbose} {0} | |
2194 | |
2195 # please don't modify the following | |
2196 # variables. They are needed by xf. | |
2197 global {autoLoadList} | |
2198 set {autoLoadList(xf-disp)} {0} | |
2199 global {internalAliasList} | |
2200 set {internalAliasList} {} | |
2201 global {moduleList} | |
2202 set {moduleList(xf-disp)} {} | |
2203 global {preloadList} | |
2204 set {preloadList(xfInternal)} {} | |
2205 global {symbolicName} | |
2206 set {symbolicName(canvas)} {.top0.frame0.canvas2} | |
2207 set {symbolicName(diag)} {.top0.frame6.button8} | |
2208 set {symbolicName(entry)} {.frame.frame4.text0} | |
2209 set {symbolicName(execute)} {.top0.frame6.button10} | |
2210 set {symbolicName(generate)} {.top0.frame1.button0} | |
2211 set {symbolicName(map)} {.top0.frame1.button13} | |
2212 set {symbolicName(root)} {.} | |
2213 set {symbolicName(states)} {.top0.frame1.label6} | |
2214 set {symbolicName(verbose)} {.frame3.checkbutton5} | |
2215 set {symbolicName(verify)} {.frame3.button7} | |
2216 global {xfWmSetPosition} | |
2217 set {xfWmSetPosition} {} | |
2218 global {xfWmSetSize} | |
2219 set {xfWmSetSize} {} | |
2220 global {xfAppDefToplevels} | |
2221 set {xfAppDefToplevels} {} | |
2222 } | |
2223 | |
2224 # initialize global variables | |
2225 InitGlobals | |
2226 | |
2227 # display/remove toplevel windows. | |
2228 ShowWindow. | |
2229 | |
2230 global xfShowWindow.top0 | |
2231 set xfShowWindow.top0 1 | |
2232 ShowWindow.top0 | |
2233 | |
2234 # load default bindings. | |
2235 if {[info exists env(XF_BIND_FILE)] && | |
2236 "[info procs XFShowHelp]" == ""} { | |
2237 source $env(XF_BIND_FILE) | |
2238 } | |
2239 | |
2240 # parse and apply application defaults. | |
2241 XFLocalLoadAppDefs Xf-disp | |
2242 XFLocalSetAppDefs | |
2243 | |
2244 # eof | |
2245 # | |
2246 |