arcadia 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. data/README +126 -123
  2. data/arcadia.rb +770 -756
  3. data/base/a-contracts.rb +130 -93
  4. data/base/a-ext.rb +280 -280
  5. data/base/a-libs.rb +5 -11
  6. data/base/a-utils.rb +235 -44
  7. data/conf/arcadia.conf +20 -16
  8. data/conf/arcadia.init.rb +0 -0
  9. data/conf/arcadia.res.rb +74 -0
  10. data/ext/ae-complete-code/ae-complete-code.conf +0 -0
  11. data/ext/ae-complete-code/ae-complete-code.rb +80 -79
  12. data/ext/ae-debug/ae-debug.conf +0 -0
  13. data/ext/ae-debug/ae-debug.rb +2 -6
  14. data/ext/ae-debug/debug1.57.rb +0 -0
  15. data/ext/ae-doc-code/ae-doc-code.conf +15 -0
  16. data/ext/ae-doc-code/ae-doc-code.rb +289 -0
  17. data/ext/ae-editor/ae-editor.conf +17 -8
  18. data/ext/ae-editor/ae-editor.rb +738 -396
  19. data/ext/ae-event-log/ae-event-log.conf +0 -0
  20. data/ext/ae-event-log/ae-event-log.rb +0 -0
  21. data/ext/ae-file-history/ae-file-history.conf +2 -2
  22. data/ext/ae-file-history/ae-file-history.rb +286 -290
  23. data/ext/ae-inspector/ae-inspector.conf +0 -0
  24. data/ext/ae-inspector/ae-inspector.rb +0 -0
  25. data/ext/ae-output-event/ae-output-event.conf +2 -2
  26. data/ext/ae-output/ae-output.conf +2 -2
  27. data/ext/ae-output/ae-output.rb +173 -178
  28. data/ext/ae-palette/ae-palette.conf +0 -0
  29. data/ext/ae-palette/ae-palette.rb +0 -0
  30. data/ext/ae-shell/ae-shell.conf +0 -0
  31. data/ext/ae-shell/ae-shell.rb +54 -54
  32. data/lib/tk/al-tk.rb +3076 -3082
  33. data/lib/tk/al-tk.res.rb +0 -0
  34. data/lib/tk/al-tkarcadia.rb +0 -0
  35. data/lib/tk/al-tkcustom.rb +0 -0
  36. data/lib/tkext/al-bwidget.rb +0 -0
  37. data/lib/tkext/al-iwidgets.rb +0 -0
  38. data/lib/tkext/al-tile.rb +0 -0
  39. data/lib/tkext/al-tktable.rb +0 -0
  40. data/tcl/BWidget-1.8.0/BWman/ArrowButton.html +276 -0
  41. data/tcl/BWidget-1.8.0/BWman/BWidget.html +228 -0
  42. data/tcl/BWidget-1.8.0/BWman/Button.html +273 -0
  43. data/tcl/BWidget-1.8.0/BWman/ButtonBox.html +264 -0
  44. data/tcl/BWidget-1.8.0/BWman/ComboBox.html +402 -0
  45. data/tcl/BWidget-1.8.0/BWman/Dialog.html +314 -0
  46. data/tcl/BWidget-1.8.0/BWman/DragSite.html +139 -0
  47. data/tcl/BWidget-1.8.0/BWman/DropSite.html +254 -0
  48. data/tcl/BWidget-1.8.0/BWman/DynamicHelp.html +248 -0
  49. data/tcl/BWidget-1.8.0/BWman/Entry.html +341 -0
  50. data/tcl/BWidget-1.8.0/BWman/Label.html +331 -0
  51. data/tcl/BWidget-1.8.0/BWman/LabelEntry.html +194 -0
  52. data/tcl/BWidget-1.8.0/BWman/LabelFrame.html +144 -0
  53. data/tcl/BWidget-1.8.0/BWman/ListBox.html +678 -0
  54. data/tcl/BWidget-1.8.0/BWman/MainFrame.html +283 -0
  55. data/tcl/BWidget-1.8.0/BWman/MessageDlg.html +218 -0
  56. data/tcl/BWidget-1.8.0/BWman/NoteBook.html +374 -0
  57. data/tcl/BWidget-1.8.0/BWman/PagesManager.html +180 -0
  58. data/tcl/BWidget-1.8.0/BWman/PanedWindow.html +142 -0
  59. data/tcl/BWidget-1.8.0/BWman/PanelFrame.html +153 -0
  60. data/tcl/BWidget-1.8.0/BWman/PasswdDlg.html +214 -0
  61. data/tcl/BWidget-1.8.0/BWman/ProgressBar.html +152 -0
  62. data/tcl/BWidget-1.8.0/BWman/ProgressDlg.html +145 -0
  63. data/tcl/BWidget-1.8.0/BWman/ScrollView.html +130 -0
  64. data/tcl/BWidget-1.8.0/BWman/ScrollableFrame.html +191 -0
  65. data/tcl/BWidget-1.8.0/BWman/ScrolledWindow.html +116 -0
  66. data/tcl/BWidget-1.8.0/BWman/SelectColor.html +164 -0
  67. data/tcl/BWidget-1.8.0/BWman/SelectFont.html +152 -0
  68. data/tcl/BWidget-1.8.0/BWman/Separator.html +77 -0
  69. data/tcl/BWidget-1.8.0/BWman/SpinBox.html +250 -0
  70. data/tcl/BWidget-1.8.0/BWman/StatusBar.html +147 -0
  71. data/tcl/BWidget-1.8.0/BWman/TitleFrame.html +107 -0
  72. data/tcl/BWidget-1.8.0/BWman/Tree.html +947 -0
  73. data/tcl/BWidget-1.8.0/BWman/Widget.html +502 -0
  74. data/tcl/BWidget-1.8.0/BWman/contents.html +84 -0
  75. data/tcl/BWidget-1.8.0/BWman/index.html +7 -0
  76. data/tcl/BWidget-1.8.0/BWman/navtree.html +41 -0
  77. data/tcl/BWidget-1.8.0/BWman/options.htm +458 -0
  78. data/tcl/BWidget-1.8.0/CHANGES.txt +266 -0
  79. data/tcl/BWidget-1.8.0/ChangeLog +1641 -0
  80. data/tcl/BWidget-1.8.0/LICENSE.txt +41 -0
  81. data/tcl/BWidget-1.8.0/README.txt +127 -0
  82. data/tcl/BWidget-1.8.0/arrow.tcl +551 -0
  83. data/tcl/BWidget-1.8.0/bitmap.tcl +94 -0
  84. data/tcl/BWidget-1.8.0/button.tcl +324 -0
  85. data/tcl/BWidget-1.8.0/buttonbox.tcl +403 -0
  86. data/tcl/BWidget-1.8.0/color.tcl +493 -0
  87. data/tcl/BWidget-1.8.0/combobox.tcl +809 -0
  88. data/tcl/BWidget-1.8.0/demo/basic.tcl +199 -0
  89. data/tcl/BWidget-1.8.0/demo/bwidget.xbm +46 -0
  90. data/tcl/BWidget-1.8.0/demo/demo.tcl +212 -0
  91. data/tcl/BWidget-1.8.0/demo/dnd.tcl +42 -0
  92. data/tcl/BWidget-1.8.0/demo/manager.tcl +141 -0
  93. data/tcl/BWidget-1.8.0/demo/select.tcl +59 -0
  94. data/tcl/BWidget-1.8.0/demo/tmpldlg.tcl +214 -0
  95. data/tcl/BWidget-1.8.0/demo/tree.tcl +260 -0
  96. data/tcl/BWidget-1.8.0/demo/x1.xbm +2258 -0
  97. data/tcl/BWidget-1.8.0/dialog.tcl +345 -0
  98. data/tcl/BWidget-1.8.0/dragsite.tcl +197 -0
  99. data/tcl/BWidget-1.8.0/dropsite.tcl +455 -0
  100. data/tcl/BWidget-1.8.0/dynhelp.tcl +625 -0
  101. data/tcl/BWidget-1.8.0/entry.tcl +469 -0
  102. data/tcl/BWidget-1.8.0/font.tcl +566 -0
  103. data/tcl/BWidget-1.8.0/images/bold.gif +0 -0
  104. data/tcl/BWidget-1.8.0/images/copy.gif +0 -0
  105. data/tcl/BWidget-1.8.0/images/cut.gif +0 -0
  106. data/tcl/BWidget-1.8.0/images/dragfile.gif +0 -0
  107. data/tcl/BWidget-1.8.0/images/dragicon.gif +0 -0
  108. data/tcl/BWidget-1.8.0/images/error.gif +0 -0
  109. data/tcl/BWidget-1.8.0/images/file.gif +0 -0
  110. data/tcl/BWidget-1.8.0/images/folder.gif +0 -0
  111. data/tcl/BWidget-1.8.0/images/hourglass.gif +0 -0
  112. data/tcl/BWidget-1.8.0/images/info.gif +0 -0
  113. data/tcl/BWidget-1.8.0/images/italic.gif +0 -0
  114. data/tcl/BWidget-1.8.0/images/minus.xbm +5 -0
  115. data/tcl/BWidget-1.8.0/images/new.gif +0 -0
  116. data/tcl/BWidget-1.8.0/images/opcopy.xbm +5 -0
  117. data/tcl/BWidget-1.8.0/images/open.gif +0 -0
  118. data/tcl/BWidget-1.8.0/images/openfold.gif +0 -0
  119. data/tcl/BWidget-1.8.0/images/oplink.xbm +5 -0
  120. data/tcl/BWidget-1.8.0/images/opmove.xbm +5 -0
  121. data/tcl/BWidget-1.8.0/images/overstrike.gif +0 -0
  122. data/tcl/BWidget-1.8.0/images/palette.gif +0 -0
  123. data/tcl/BWidget-1.8.0/images/passwd.gif +0 -0
  124. data/tcl/BWidget-1.8.0/images/paste.gif +0 -0
  125. data/tcl/BWidget-1.8.0/images/plus.xbm +5 -0
  126. data/tcl/BWidget-1.8.0/images/print.gif +0 -0
  127. data/tcl/BWidget-1.8.0/images/question.gif +0 -0
  128. data/tcl/BWidget-1.8.0/images/redo.gif +0 -0
  129. data/tcl/BWidget-1.8.0/images/save.gif +0 -0
  130. data/tcl/BWidget-1.8.0/images/target.xbm +9 -0
  131. data/tcl/BWidget-1.8.0/images/underline.gif +0 -0
  132. data/tcl/BWidget-1.8.0/images/undo.gif +0 -0
  133. data/tcl/BWidget-1.8.0/images/warning.gif +0 -0
  134. data/tcl/BWidget-1.8.0/init.tcl +40 -0
  135. data/tcl/BWidget-1.8.0/label.tcl +271 -0
  136. data/tcl/BWidget-1.8.0/labelentry.tcl +100 -0
  137. data/tcl/BWidget-1.8.0/labelframe.tcl +160 -0
  138. data/tcl/BWidget-1.8.0/lang/da.rc +52 -0
  139. data/tcl/BWidget-1.8.0/lang/de.rc +52 -0
  140. data/tcl/BWidget-1.8.0/lang/en.rc +52 -0
  141. data/tcl/BWidget-1.8.0/lang/es.rc +53 -0
  142. data/tcl/BWidget-1.8.0/lang/fr.rc +52 -0
  143. data/tcl/BWidget-1.8.0/listbox.tcl +1638 -0
  144. data/tcl/BWidget-1.8.0/mainframe.tcl +711 -0
  145. data/tcl/BWidget-1.8.0/messagedlg.tcl +128 -0
  146. data/tcl/BWidget-1.8.0/notebook.tcl +1164 -0
  147. data/tcl/BWidget-1.8.0/pagesmgr.tcl +294 -0
  148. data/tcl/BWidget-1.8.0/panedw.tcl +381 -0
  149. data/tcl/BWidget-1.8.0/panelframe.tcl +246 -0
  150. data/tcl/BWidget-1.8.0/passwddlg.tcl +178 -0
  151. data/tcl/BWidget-1.8.0/pkgIndex.tcl +47 -0
  152. data/tcl/BWidget-1.8.0/progressbar.tcl +208 -0
  153. data/tcl/BWidget-1.8.0/progressdlg.tcl +87 -0
  154. data/tcl/BWidget-1.8.0/scrollframe.tcl +226 -0
  155. data/tcl/BWidget-1.8.0/scrollview.tcl +254 -0
  156. data/tcl/BWidget-1.8.0/scrollw.tcl +280 -0
  157. data/tcl/BWidget-1.8.0/separator.tcl +75 -0
  158. data/tcl/BWidget-1.8.0/spinbox.tcl +331 -0
  159. data/tcl/BWidget-1.8.0/statusbar.tcl +422 -0
  160. data/tcl/BWidget-1.8.0/tests/entry.test +173 -0
  161. data/tcl/BWidget-1.8.0/titleframe.tcl +170 -0
  162. data/tcl/BWidget-1.8.0/tree.tcl +2228 -0
  163. data/tcl/BWidget-1.8.0/utils.tcl +645 -0
  164. data/tcl/BWidget-1.8.0/widget.tcl +1576 -0
  165. data/tcl/BWidget-1.8.0/wizard.tcl +1028 -0
  166. data/tcl/BWidget-1.8.0/xpm2image.tcl +115 -0
  167. metadata +141 -5
@@ -0,0 +1,711 @@
1
+ # ----------------------------------------------------------------------------
2
+ # mainframe.tcl
3
+ # This file is part of Unifix BWidget Toolkit
4
+ # $Id: mainframe.tcl,v 1.23 2006/03/24 22:19:57 dev_null42a Exp $
5
+ # ------------------------------------------------------------------------------
6
+ # Index of commands:
7
+ # - MainFrame::create
8
+ # - MainFrame::configure
9
+ # - MainFrame::cget
10
+ # - MainFrame::getframe
11
+ # - MainFrame::addtoolbar
12
+ # - MainFrame::gettoolbar
13
+ # - MainFrame::addindicator
14
+ # - MainFrame::getindicator
15
+ # - MainFrame::getmenu
16
+ # - MainFrame::menuonly
17
+ # - MainFrame::showtoolbar
18
+ # - MainFrame::showstatusbar
19
+ # - MainFrame::_create_menubar
20
+ # - MainFrame::_create_entries
21
+ # - MainFrame::_parse_name
22
+ # - MainFrame::_parse_accelerator
23
+ # ----------------------------------------------------------------------------
24
+
25
+ namespace eval MainFrame {
26
+ Widget::define MainFrame mainframe ProgressBar
27
+
28
+ Widget::bwinclude MainFrame ProgressBar .status.prg \
29
+ remove {
30
+ -fg -bg -bd -troughcolor -background -borderwidth
31
+ -relief -orient -width -height
32
+ } \
33
+ rename {
34
+ -maximum -progressmax
35
+ -variable -progressvar
36
+ -type -progresstype
37
+ -foreground -progressfg
38
+ }
39
+
40
+ Widget::declare MainFrame {
41
+ {-width TkResource 0 0 frame}
42
+ {-height TkResource 0 0 frame}
43
+ {-background TkResource "" 0 frame}
44
+ {-textvariable String "" 0}
45
+ {-menu String {} 1}
46
+ {-separator Enum both 1 {none top bottom both}}
47
+ {-bg Synonym -background}
48
+
49
+ {-menubarfont String "" 0}
50
+ {-menuentryfont String "" 0}
51
+ {-statusbarfont String "" 0}
52
+ }
53
+
54
+ Widget::addmap MainFrame "" .frame {-width {} -height {} -background {}}
55
+ Widget::addmap MainFrame "" .topf {-background {}}
56
+ Widget::addmap MainFrame "" .botf {-background {}}
57
+ Widget::addmap MainFrame "" .status {-background {}}
58
+ Widget::addmap MainFrame "" .status.label {-background {}}
59
+ Widget::addmap MainFrame "" .status.indf {-background {}}
60
+ Widget::addmap MainFrame "" .status.prgf {-background {}}
61
+ Widget::addmap MainFrame ProgressBar .status.prg {-background {} -background -troughcolor}
62
+
63
+ variable _widget
64
+ }
65
+
66
+
67
+ # ----------------------------------------------------------------------------
68
+ # Command MainFrame::create
69
+ # ----------------------------------------------------------------------------
70
+ proc MainFrame::create { path args } {
71
+ global tcl_platform
72
+ variable _widget
73
+
74
+ if {[Widget::theme]} {
75
+ set path [ttk::frame $path]
76
+ } else {
77
+ set path [frame $path -takefocus 0 -highlightthickness 0]
78
+ }
79
+ set top [winfo parent $path]
80
+ if { ![string equal [winfo toplevel $path] $top] } {
81
+ destroy $path
82
+ return -code error "parent must be a toplevel"
83
+ }
84
+ Widget::init MainFrame $path $args
85
+
86
+ if { $tcl_platform(platform) == "unix" } {
87
+ set relief raised
88
+ set bd 1
89
+ } else {
90
+ set relief flat
91
+ set bd 0
92
+ }
93
+ if {[Widget::theme]} {
94
+ set userframe [eval [list ttk::frame $path.frame] \
95
+ [Widget::subcget $path .frame]]
96
+ set topframe [ttk::frame $path.topf]
97
+ set botframe [ttk::frame $path.botf]
98
+ } else {
99
+ set userframe [eval [list frame $path.frame] \
100
+ [Widget::subcget $path .frame] \
101
+ -relief $relief -borderwidth $bd]
102
+ set topframe [eval [list frame $path.topf] \
103
+ [Widget::subcget $path .topf]]
104
+ set botframe [eval [list frame $path.botf] \
105
+ -relief $relief -borderwidth $bd \
106
+ [Widget::subcget $path .botf]]
107
+ }
108
+
109
+ pack $topframe -fill x
110
+ grid columnconfigure $topframe 0 -weight 1
111
+
112
+ if {![Widget::theme]} {
113
+ set bg [Widget::cget $path -background]
114
+ $path configure -background $bg
115
+ }
116
+ if { $tcl_platform(platform) != "unix" } {
117
+ set sepopt [Widget::getoption $path -separator]
118
+ if { $sepopt == "both" || $sepopt == "top" } {
119
+ if {[Widget::theme]} {
120
+ set sep [ttk::separator $path.sep -orient horizontal]
121
+ } else {
122
+ set sep [Separator::create $path.sep -orient horizontal -background $bg]
123
+ }
124
+ pack $sep -fill x
125
+ }
126
+ if { $sepopt == "both" || $sepopt == "bottom" } {
127
+ if {[Widget::theme]} {
128
+ set sep [ttk::separator $botframe.sep -orient horizontal]
129
+ } else {
130
+ set sep [Separator::create $botframe.sep -orient horizontal -background $bg]
131
+ }
132
+ pack $sep -fill x
133
+ }
134
+ }
135
+
136
+ # --- status bar ---------------------------------------------------------
137
+ if {[string length [Widget::getoption $path -statusbarfont]]} {
138
+ set sbfnt [list -font [Widget::getoption $path -statusbarfont]]
139
+ } else {
140
+ set sbfnt ""
141
+ }
142
+
143
+ if {[Widget::theme]} {
144
+ set status [ttk::frame $path.status]
145
+ set label [eval [list ttk::label $status.label \
146
+ -textvariable [Widget::getoption $path -textvariable]] $sbfnt]
147
+ set indframe [ttk::frame $status.indf]
148
+ set prgframe [ttk::frame $status.prgf]
149
+ } else {
150
+ set status [frame $path.status -background $bg]
151
+ set label [eval [list label $status.label \
152
+ -textvariable [Widget::getoption $path -textvariable] \
153
+ -background $bg] $sbfnt]
154
+ set indframe [frame $status.indf -background $bg]
155
+ set prgframe [frame $status.prgf -background $bg]
156
+ }
157
+
158
+ place $label -anchor w -x 0 -rely 0.5
159
+ place $indframe -anchor ne -relx 1 -y 0 -relheight 1
160
+ pack $prgframe -in $indframe -side left -padx 2
161
+ $status configure -height [winfo reqheight $label]
162
+
163
+ set progress [eval [list ProgressBar::create $status.prg] \
164
+ [Widget::subcget $path .status.prg] \
165
+ -width 50 \
166
+ -height [expr {[winfo reqheight $label]-2}] \
167
+ -borderwidth 1 \
168
+ -relief sunken]
169
+ pack $status -in $botframe -fill x -pady 2
170
+ pack $botframe -side bottom -fill x
171
+ pack $userframe -fill both -expand yes
172
+
173
+ set _widget($path,top) $top
174
+ set _widget($path,ntoolbar) 0
175
+ set _widget($path,nindic) 0
176
+
177
+ set menu [Widget::getoption $path -menu]
178
+ if { [llength $menu] } {
179
+ _create_menubar $path $menu
180
+ }
181
+
182
+ bind $path <Destroy> [list MainFrame::_destroy %W]
183
+
184
+ return [Widget::create MainFrame $path]
185
+ }
186
+
187
+
188
+ # ----------------------------------------------------------------------------
189
+ # Command MainFrame::configure
190
+ # ----------------------------------------------------------------------------
191
+ proc MainFrame::configure { path args } {
192
+ variable _widget
193
+
194
+ set res [Widget::configure $path $args]
195
+
196
+ if { [Widget::hasChanged $path -textvariable newv] } {
197
+ uplevel \#0 $path.status.label configure -textvariable [list $newv]
198
+ }
199
+
200
+ # The ttk frame has no -background
201
+ if {![Widget::theme] && [Widget::hasChanged $path -background bg] } {
202
+ if {$::tcl_platform(platform) == "unix"} {
203
+ set listmenu [$_widget($path,top) cget -menu]
204
+ while { [llength $listmenu] } {
205
+ set newlist {}
206
+ foreach menu $listmenu {
207
+ $menu configure -background $bg
208
+ set newlist [concat $newlist [winfo children $menu]]
209
+ }
210
+ set listmenu $newlist
211
+ }
212
+ }
213
+ foreach sep {.sep .botf.sep} {
214
+ if {[winfo exists $path.$sep]} {
215
+ Separator::configure $path.$sep -background $bg
216
+ }
217
+ }
218
+ foreach w [winfo children $path.topf] {
219
+ $w configure -background $bg
220
+ }
221
+ }
222
+
223
+ if { [Widget::hasChanged $path -menubarfont newmbfnt] } {
224
+ if {[string length $newmbfnt]} {
225
+ set mbfnt [list -font $newmbfnt]
226
+ } else {
227
+ set mbfnt ""
228
+ }
229
+ set top $_widget($path,top)
230
+ if {[string equal $top .]} {
231
+ eval [list .menubar configure] $mbfnt
232
+ } else {
233
+ eval [list $top.menubar configure] $mbfnt
234
+ }
235
+ }
236
+ if { [Widget::hasChanged $path -menuentryfont newmefnt] } {
237
+ if {[string length $newmefnt]} {
238
+ set mefnt [list -font $newmefnt]
239
+ } else {
240
+ set mefnt ""
241
+ }
242
+ set top $_widget($path,top)
243
+ if {[string equal $top .]} {
244
+ set mb .menubar
245
+ } else {
246
+ set mb $top.menubar
247
+ }
248
+ set l [winfo children $mb]
249
+ while {[llength $l]} {
250
+ set e [lindex $l 0]
251
+ set l [lrange $l 1 end]
252
+ if {[string length $e] == 0} {continue}
253
+ lappend l [winfo children $e]
254
+ eval [list $e configure] $mefnt
255
+ }
256
+ }
257
+
258
+
259
+ if { [Widget::hasChanged $path -statusbarfont newsbfnt] } {
260
+ if {[string length $newsbfnt]} {
261
+ set sbfnt [list -font $newsbfnt]
262
+ } else {
263
+ set sbfnt ""
264
+ }
265
+ for {set index 0} {$index<$_widget($path,nindic)} {incr index} {
266
+ set indic $path.status.indf.f$index
267
+ eval [list $indic configure] $sbfnt
268
+ }
269
+ eval [list $path.status.label configure] $sbfnt
270
+ $path.status configure -height [winfo reqheight $path.status.label]
271
+
272
+ $path.status.prg configure \
273
+ -height [expr {[winfo reqheight $path.status.label]-2}]
274
+ }
275
+
276
+ return $res
277
+ }
278
+
279
+
280
+ # ----------------------------------------------------------------------------
281
+ # Command MainFrame::cget
282
+ # ----------------------------------------------------------------------------
283
+ proc MainFrame::cget { path option } {
284
+ return [Widget::cget $path $option]
285
+ }
286
+
287
+
288
+ # ----------------------------------------------------------------------------
289
+ # Command MainFrame::getframe
290
+ # ----------------------------------------------------------------------------
291
+ proc MainFrame::getframe { path } {
292
+ return $path.frame
293
+ }
294
+
295
+
296
+ # ----------------------------------------------------------------------------
297
+ # Command MainFrame::addtoolbar
298
+ # ----------------------------------------------------------------------------
299
+ proc MainFrame::addtoolbar { path } {
300
+ global tcl_platform
301
+ variable _widget
302
+
303
+ set index $_widget($path,ntoolbar)
304
+ set toolframe $path.topf.f$index
305
+ set toolbar $path.topf.tb$index
306
+ set bg [Widget::getoption $path -background]
307
+ if { $tcl_platform(platform) == "unix" } {
308
+ if {[Widget::theme]} {
309
+ ttk::frame $toolframe -padding 1
310
+ } else {
311
+ frame $toolframe -relief raised -borderwidth 1 \
312
+ -takefocus 0 -highlightthickness 0 -background $bg
313
+ }
314
+ } else {
315
+ if {[Widget::theme]} {
316
+ ttk::frame $toolframe
317
+ set sep [ttk::separator $toolframe.sep -orient horizontal]
318
+ } else {
319
+ frame $toolframe -relief flat -borderwidth 0 -takefocus 0 \
320
+ -highlightthickness 0 -background $bg
321
+ set sep [Separator::create $toolframe.sep -orient horizontal -background $bg]
322
+ }
323
+ pack $sep -fill x
324
+ }
325
+ if {[Widget::theme]} {
326
+ set toolbar [ttk::frame $toolbar -padding 2]
327
+ } else {
328
+ set toolbar [frame $toolbar -relief flat -borderwidth 2 \
329
+ -takefocus 0 -highlightthickness 0 -background $bg]
330
+ }
331
+ pack $toolbar -in $toolframe -anchor w -expand yes -fill x
332
+ incr _widget($path,ntoolbar)
333
+ grid $toolframe -column 0 -row $index -sticky ew
334
+ return $toolbar
335
+ }
336
+
337
+
338
+ # ----------------------------------------------------------------------------
339
+ # Command MainFrame::gettoolbar
340
+ # ----------------------------------------------------------------------------
341
+ proc MainFrame::gettoolbar { path index } {
342
+ return $path.topf.tb$index
343
+ }
344
+
345
+
346
+ # ----------------------------------------------------------------------------
347
+ # Command MainFrame::addindicator
348
+ # ----------------------------------------------------------------------------
349
+ proc MainFrame::addindicator { path args } {
350
+ variable _widget
351
+
352
+ if {[string length [Widget::getoption $path -statusbarfont]]} {
353
+ set sbfnt [list -font [Widget::getoption $path -statusbarfont]]
354
+ } else {
355
+ set sbfnt ""
356
+ }
357
+
358
+ set index $_widget($path,nindic)
359
+ set indic $path.status.indf.f$index
360
+ eval [list label $indic] $args -relief sunken -borderwidth 1 \
361
+ -takefocus 0 -highlightthickness 0 $sbfnt
362
+
363
+ pack $indic -side left -anchor w -padx 2 -fill y -expand 1
364
+
365
+ incr _widget($path,nindic)
366
+
367
+ return $indic
368
+ }
369
+
370
+
371
+ # ----------------------------------------------------------------------------
372
+ # Command MainFrame::getindicator
373
+ # ----------------------------------------------------------------------------
374
+ proc MainFrame::getindicator { path index } {
375
+ return $path.status.indf.f$index
376
+ }
377
+
378
+
379
+ # ----------------------------------------------------------------------------
380
+ # Command MainFrame::getmenu
381
+ # ----------------------------------------------------------------------------
382
+ proc MainFrame::getmenu { path menuid } {
383
+ variable _widget
384
+
385
+ if { [info exists _widget($path,menuid,$menuid)] } {
386
+ return $_widget($path,menuid,$menuid)
387
+ }
388
+ return ""
389
+ }
390
+
391
+
392
+ # -----------------------------------------------------------------------------
393
+ # Command MainFrame::setmenustate
394
+ # -----------------------------------------------------------------------------
395
+ proc MainFrame::setmenustate { path tag state } {
396
+ variable _widget
397
+
398
+ # if { [info exists _widget($path,tags,$tag)] } {
399
+ # foreach {menu entry} $_widget($path,tags,$tag) {
400
+ # $menu entryconfigure $entry -state $state
401
+ # }
402
+ # }
403
+
404
+ # We need a more sophisticated state system.
405
+ # The original model was this: each menu item has a list of tags;
406
+ # whenever any one of those tags changed state, the menu item did too.
407
+ # This makes it hard to have items that are enabled only when both tagA and
408
+ # tagB are. The new model therefore only sets the menustate to enabled
409
+ # when ALL of its tags are enabled.
410
+
411
+ # First see if this is a real tag
412
+ if { [info exists _widget($path,tagstate,$tag)] } {
413
+ if { ![string equal $state "disabled"] } {
414
+ set _widget($path,tagstate,$tag) 1
415
+ } else {
416
+ set _widget($path,tagstate,$tag) 0
417
+ }
418
+ foreach {menu entry} $_widget($path,tags,$tag) {
419
+ set expression "1"
420
+ foreach menutag $_widget($path,menutags,[list $menu $entry]) {
421
+ append expression " && $_widget($path,tagstate,$menutag)"
422
+ }
423
+ if { [expr $expression] } {
424
+ set state normal
425
+ } else {
426
+ set state disabled
427
+ }
428
+ $menu entryconfigure $entry -state $state
429
+ }
430
+ }
431
+ return
432
+ }
433
+
434
+
435
+ # -----------------------------------------------------------------------------
436
+ # Command MainFrame::menuonly
437
+ # ----------------------d------------------------------------------------------
438
+ proc MainFrame::menuonly { path } {
439
+ variable _widget
440
+
441
+ catch {pack forget $path.sep}
442
+ catch {pack forget $path.botf.sep}
443
+ catch {pack forget $path.frame}
444
+ }
445
+
446
+ # ----------------------------------------------------------------------------
447
+ # Command MainFrame::showtoolbar
448
+ # ----------------------------------------------------------------------------
449
+ proc MainFrame::showtoolbar { path index bool } {
450
+ variable _widget
451
+
452
+ set toolframe $path.topf.f$index
453
+ if { [winfo exists $toolframe] } {
454
+ if { !$bool && [llength [grid info $toolframe]] } {
455
+ grid forget $toolframe
456
+ $path.topf configure -height 1
457
+ } elseif { $bool && ![llength [grid info $toolframe]] } {
458
+ grid $toolframe -column 0 -row $index -sticky ew
459
+ }
460
+ }
461
+ }
462
+
463
+
464
+ # ----------------------------------------------------------------------------
465
+ # Command MainFrame::showstatusbar
466
+ # ----------------------------------------------------------------------------
467
+ proc MainFrame::showstatusbar { path name } {
468
+ set status $path.status
469
+ set botframe $path.botf
470
+ if { [string equal $name "none"] } {
471
+ pack forget $status
472
+ } else {
473
+ pack $status -fill x -in $botframe -fill x -pady 2
474
+ switch -- $name {
475
+ status {
476
+ catch {pack forget $status.prg}
477
+ }
478
+ progression {
479
+ pack $status.prg -in $status.prgf
480
+ }
481
+ }
482
+ }
483
+ }
484
+
485
+
486
+ # ----------------------------------------------------------------------------
487
+ # Command MainFrame::_destroy
488
+ # ----------------------------------------------------------------------------
489
+ proc MainFrame::_destroy { path } {
490
+ variable _widget
491
+
492
+ Widget::destroy $path
493
+ catch {destroy [$_widget($path,top) cget -menu]}
494
+ $_widget($path,top) configure -menu {}
495
+
496
+ # Unset all of the state vars associated with this main frame.
497
+ foreach index [array names _widget $path,*] {
498
+ unset _widget($index)
499
+ }
500
+ }
501
+
502
+
503
+ # ----------------------------------------------------------------------------
504
+ # Command MainFrame::_create_menubar
505
+ # ----------------------------------------------------------------------------
506
+ proc MainFrame::_create_menubar { path descmenu } {
507
+ variable _widget
508
+ global tcl_platform
509
+
510
+ set top $_widget($path,top)
511
+
512
+ foreach {v x} {mbfnt -menubarfont mefnt -menuentryfont} {
513
+ if {[string length [Widget::getoption $path $x]]} {
514
+ set $v [list -font [Widget::getoption $path $x]]
515
+ } else {
516
+ set $v ""
517
+ }
518
+ }
519
+
520
+ if {![Widget::theme] && $tcl_platform(platform) == "unix"} {
521
+ set menuopts [list -background [Widget::getoption $path -background] \
522
+ -borderwidth 1]
523
+ } else {
524
+ set menuopts [list]
525
+ }
526
+ set menubar [eval [list menu $top.menubar -tearoff 0] $menuopts $mbfnt]
527
+ $top configure -menu $menubar
528
+
529
+ set count 0
530
+ foreach {name tags menuid tearoff entries} $descmenu {
531
+ set opt [_parse_name $name]
532
+ if {[string length $menuid]
533
+ && ![info exists _widget($path,menuid,$menuid)] } {
534
+ # menu has identifier
535
+ # we use it for its pathname, to enable special menu entries
536
+ # (help, system, ...)
537
+ set menu $menubar.$menuid
538
+ } else {
539
+ set menu $menubar.menu$count
540
+ }
541
+ eval [list $menubar add cascade] $opt [list -menu $menu]
542
+ eval [list menu $menu -tearoff $tearoff] $menuopts $mefnt
543
+ foreach tag $tags {
544
+ lappend _widget($path,tags,$tag) $menubar $count
545
+ # ericm@scriptics: Add a tagstate tracker
546
+ if { ![info exists _widget($path,tagstate,$tag)] } {
547
+ set _widget($path,tagstate,$tag) 1
548
+ }
549
+ }
550
+ # ericm@scriptics: Add mapping from menu items to tags
551
+ set _widget($path,menutags,[list $menubar $count]) $tags
552
+
553
+ if { [string length $menuid] } {
554
+ # menu has identifier
555
+ set _widget($path,menuid,$menuid) $menu
556
+ }
557
+ _create_entries $path $menu $menuopts $entries
558
+ incr count
559
+ }
560
+ }
561
+
562
+
563
+ # ----------------------------------------------------------------------------
564
+ # Command MainFrame::_create_entries
565
+ # ----------------------------------------------------------------------------
566
+ proc MainFrame::_create_entries { path menu menuopts entries } {
567
+ variable _widget
568
+
569
+ set count [$menu cget -tearoff]
570
+ set registered 0
571
+ foreach entry $entries {
572
+ set len [llength $entry]
573
+ set type [lindex $entry 0]
574
+
575
+ if { [string equal $type "separator"] } {
576
+ $menu add separator
577
+ incr count
578
+ continue
579
+ }
580
+
581
+ # entry name and tags
582
+ set opt [_parse_name [lindex $entry 1]]
583
+ set tags [lindex $entry 2]
584
+ foreach tag $tags {
585
+ lappend _widget($path,tags,$tag) $menu $count
586
+ # ericm@scriptics: Add a tagstate tracker
587
+ if { ![info exists _widget($path,tagstate,$tag)] } {
588
+ set _widget($path,tagstate,$tag) 1
589
+ }
590
+ }
591
+ # ericm@scriptics: Add mapping from menu items to tags
592
+ set _widget($path,menutags,[list $menu $count]) $tags
593
+
594
+ if {[string equal $type "cascade"] || [string equal $type "cascad"]} {
595
+ set menuid [lindex $entry 3]
596
+ set tearoff [lindex $entry 4]
597
+ set submenu $menu.menu$count
598
+ eval [list $menu add cascade] $opt [list -menu $submenu]
599
+ eval [list menu $submenu -tearoff $tearoff] $menuopts
600
+ if { [string length $menuid] } {
601
+ # menu has identifier
602
+ set _widget($path,menuid,$menuid) $submenu
603
+ }
604
+ _create_entries $path $submenu $menuopts [lindex $entry 5]
605
+ incr count
606
+ continue
607
+ }
608
+
609
+ # entry help description
610
+ set desc [lindex $entry 3]
611
+ if { [string length $desc] } {
612
+ if { !$registered } {
613
+ DynamicHelp::register $menu menu [Widget::getoption $path -textvariable]
614
+ set registered 1
615
+ }
616
+ DynamicHelp::register $menu menuentry $count $desc
617
+ }
618
+
619
+ # entry accelerator
620
+ set accel [_parse_accelerator [lindex $entry 4]]
621
+ if { [llength $accel] } {
622
+ lappend opt -accelerator [lindex $accel 0]
623
+ bind $_widget($path,top) [lindex $accel 1] [list $menu invoke $count]
624
+ }
625
+
626
+ # user options
627
+ set useropt [lrange $entry 5 end]
628
+ if { [string equal $type "command"] ||
629
+ [string equal $type "radiobutton"] ||
630
+ [string equal $type "checkbutton"] } {
631
+ eval [list $menu add $type] $opt $useropt
632
+ } else {
633
+ return -code error "invalid menu type \"$type\""
634
+ }
635
+ incr count
636
+ }
637
+ }
638
+
639
+
640
+ # ----------------------------------------------------------------------------
641
+ # Command MainFrame::_parse_name
642
+ # ----------------------------------------------------------------------------
643
+ proc MainFrame::_parse_name { menuname } {
644
+ set idx [string first "&" $menuname]
645
+ if { $idx == -1 } {
646
+ return [list -label $menuname]
647
+ } else {
648
+ set beg [string range $menuname 0 [expr {$idx-1}]]
649
+ set end [string range $menuname [expr {$idx+1}] end]
650
+ append beg $end
651
+ return [list -label $beg -underline $idx]
652
+ }
653
+ }
654
+
655
+
656
+ # MainFrame::_parse_accelerator --
657
+ #
658
+ # Given a key combo description, construct an appropriate human readable
659
+ # string (for display on as a menu accelerator) and the corresponding
660
+ # bind event.
661
+ #
662
+ # Arguments:
663
+ # desc a list with the following format:
664
+ # ?sequence? key
665
+ # sequence may be None, Ctrl, Alt, or CtrlAlt
666
+ # key may be any key
667
+ #
668
+ # Results:
669
+ # {accel event} a list containing the accelerator string and the event
670
+
671
+ proc MainFrame::_parse_accelerator { desc } {
672
+ if { [llength $desc] == 1 } {
673
+ set seq None
674
+ set key [string tolower [lindex $desc 0]]
675
+ # If the key is an F key (ie, F1, F2, etc), it has to be capitalized
676
+ if {[regexp {^f([1-9]|([12][0-9]|3[0-5]))$} $key]} {
677
+ set key [string toupper $key]
678
+ }
679
+ } elseif { [llength $desc] == 2 } {
680
+ set seq [lindex $desc 0]
681
+ set key [string tolower [lindex $desc 1]]
682
+ # If the key is an F key (ie, F1, F2, etc), it has to be capitalized
683
+ if {[regexp {^f([1-9]|([12][0-9]|3[0-5]))$} $key]} {
684
+ set key [string toupper $key]
685
+ }
686
+ } else {
687
+ return {}
688
+ }
689
+ switch -- $seq {
690
+ None {
691
+ set accel "[string toupper $key]"
692
+ set event "<Key-$key>"
693
+ }
694
+ Ctrl {
695
+ set accel "Ctrl+[string toupper $key]"
696
+ set event "<Control-Key-$key>"
697
+ }
698
+ Alt {
699
+ set accel "Alt+[string toupper $key]"
700
+ set event "<Alt-Key-$key>"
701
+ }
702
+ CtrlAlt {
703
+ set accel "Ctrl+Alt+[string toupper $key]"
704
+ set event "<Control-Alt-Key-$key>"
705
+ }
706
+ default {
707
+ return -code error "invalid accelerator code $seq"
708
+ }
709
+ }
710
+ return [list $accel $event]
711
+ }