arcadia 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }