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,625 @@
1
+ # ----------------------------------------------------------------------------
2
+ # dynhelp.tcl
3
+ # This file is part of Unifix BWidget Toolkit
4
+ # $Id: dynhelp.tcl,v 1.15 2006/03/23 23:32:12 dev_null42a Exp $
5
+ # ----------------------------------------------------------------------------
6
+ # Index of commands:
7
+ # - DynamicHelp::configure
8
+ # - DynamicHelp::include
9
+ # - DynamicHelp::sethelp
10
+ # - DynamicHelp::register
11
+ # - DynamicHelp::_motion_balloon
12
+ # - DynamicHelp::_motion_info
13
+ # - DynamicHelp::_leave_info
14
+ # - DynamicHelp::_menu_info
15
+ # - DynamicHelp::_show_help
16
+ # - DynamicHelp::_init
17
+ # ----------------------------------------------------------------------------
18
+
19
+ # JDC: allow variable and ballon help at the same timees
20
+
21
+ namespace eval DynamicHelp {
22
+ Widget::define DynamicHelp dynhelp -classonly
23
+
24
+ Widget::declare DynamicHelp {
25
+ {-foreground TkResource black 0 label}
26
+ {-topbackground TkResource black 0 {label -foreground}}
27
+ {-background TkResource "#FFFFC0" 0 label}
28
+ {-borderwidth TkResource 1 0 label}
29
+ {-justify TkResource left 0 label}
30
+ {-font TkResource "helvetica 8" 0 label}
31
+ {-delay Int 600 0 "%d >= 100 & %d <= 2000"}
32
+ {-state Enum "normal" 0 {normal disabled}}
33
+ {-padx TkResource 1 0 label}
34
+ {-pady TkResource 1 0 label}
35
+ {-bd Synonym -borderwidth}
36
+ {-bg Synonym -background}
37
+ {-fg Synonym -foreground}
38
+ {-topbg Synonym -topbackground}
39
+ }
40
+
41
+ proc use {} {}
42
+
43
+ variable _registered
44
+ variable _canvases
45
+
46
+ variable _top ".help_shell"
47
+ variable _id ""
48
+ variable _delay 600
49
+ variable _current_balloon ""
50
+ variable _current_variable ""
51
+ variable _saved
52
+
53
+ Widget::init DynamicHelp $_top {}
54
+
55
+ bind BwHelpBalloon <Enter> {DynamicHelp::_motion_balloon enter %W %X %Y}
56
+ bind BwHelpBalloon <Motion> {DynamicHelp::_motion_balloon motion %W %X %Y}
57
+ bind BwHelpBalloon <Leave> {DynamicHelp::_motion_balloon leave %W %X %Y}
58
+ bind BwHelpBalloon <Button> {DynamicHelp::_motion_balloon button %W %X %Y}
59
+ bind BwHelpBalloon <Destroy> {DynamicHelp::_unset_help %W}
60
+
61
+ bind BwHelpVariable <Enter> {DynamicHelp::_motion_info %W}
62
+ bind BwHelpVariable <Motion> {DynamicHelp::_motion_info %W}
63
+ bind BwHelpVariable <Leave> {DynamicHelp::_leave_info %W}
64
+ bind BwHelpVariable <Destroy> {DynamicHelp::_unset_help %W}
65
+
66
+ bind BwHelpMenu <<MenuSelect>> {DynamicHelp::_menu_info select %W}
67
+ bind BwHelpMenu <Unmap> {DynamicHelp::_menu_info unmap %W}
68
+ bind BwHelpMenu <Destroy> {DynamicHelp::_unset_help %W}
69
+ }
70
+
71
+
72
+ # ----------------------------------------------------------------------------
73
+ # Command DynamicHelp::configure
74
+ # ----------------------------------------------------------------------------
75
+ proc DynamicHelp::configure { args } {
76
+ variable _top
77
+ variable _delay
78
+
79
+ set res [Widget::configure $_top $args]
80
+ if { [Widget::hasChanged $_top -delay val] } {
81
+ set _delay $val
82
+ }
83
+
84
+ return $res
85
+ }
86
+
87
+
88
+ # ----------------------------------------------------------------------------
89
+ # Command DynamicHelp::include
90
+ # ----------------------------------------------------------------------------
91
+ proc DynamicHelp::include { class type } {
92
+ set helpoptions [list \
93
+ [list -helptext String "" 0] \
94
+ [list -helpvar String "" 0] \
95
+ [list -helptype Enum $type 0 [list balloon variable]] \
96
+ ]
97
+ Widget::declare $class $helpoptions
98
+ }
99
+
100
+
101
+ # ----------------------------------------------------------------------------
102
+ # Command DynamicHelp::sethelp
103
+ # ----------------------------------------------------------------------------
104
+ proc DynamicHelp::sethelp { path subpath {force 0}} {
105
+ foreach {ctype ctext cvar} [Widget::hasChangedX $path \
106
+ -helptype -helptext -helpvar] break
107
+ if { $force || $ctype || $ctext || $cvar } {
108
+ set htype [Widget::cget $path -helptype]
109
+ switch $htype {
110
+ balloon {
111
+ return [register $subpath balloon \
112
+ [Widget::cget $path -helptext]]
113
+ }
114
+ variable {
115
+ return [register $subpath variable \
116
+ [Widget::cget $path -helpvar] \
117
+ [Widget::cget $path -helptext]]
118
+ }
119
+ }
120
+ return [register $subpath $htype]
121
+ }
122
+ }
123
+
124
+ # ----------------------------------------------------------------------------
125
+ # Command DynamicHelp::register
126
+ #
127
+ # DynamicHelp::register path balloon ?itemOrTag? text
128
+ # DynamicHelp::register path variable ?itemOrTag? text varName
129
+ # DynamicHelp::register path menu varName
130
+ # DynamicHelp::register path menuentry index text
131
+ # ----------------------------------------------------------------------------
132
+ proc DynamicHelp::register { path type args } {
133
+ variable _registered
134
+
135
+ set len [llength $args]
136
+ if {$type == "balloon" && $len > 1} { set type canvasBalloon }
137
+ if {$type == "variable" && $len > 2} { set type canvasVariable }
138
+
139
+ if { ![winfo exists $path] } {
140
+ _unset_help $path
141
+ return 0
142
+ }
143
+
144
+ switch $type {
145
+ balloon {
146
+ set text [lindex $args 0]
147
+ if {$text == ""} {
148
+ if {[info exists _registered($path,balloon)]} {
149
+ unset _registered($path,balloon)
150
+ }
151
+ return 0
152
+ }
153
+
154
+ _add_balloon $path $text
155
+ }
156
+
157
+ canvasBalloon {
158
+ set tagOrItem [lindex $args 0]
159
+ set text [lindex $args 1]
160
+ if {$text == ""} {
161
+ if {[info exists _registered($path,$tagOrItem,balloon)]} {
162
+ unset _registered($path,$tagOrItem,balloon)
163
+ }
164
+ return 0
165
+ }
166
+
167
+ _add_canvas_balloon $path $text $tagOrItem
168
+ }
169
+
170
+ variable {
171
+ set var [lindex $args 0]
172
+ set text [lindex $args 1]
173
+ if {$text == "" || $var == ""} {
174
+ if {[info exists _registered($path,variable)]} {
175
+ unset _registered($path,variable)
176
+ }
177
+ return 0
178
+ }
179
+
180
+ _add_variable $path $text $var
181
+ }
182
+
183
+ canvasVariable {
184
+ set tagOrItem [lindex $args 0]
185
+ set var [lindex $args 1]
186
+ set text [lindex $args 2]
187
+ if {$text == "" || $var == ""} {
188
+ if {[info exists _registered($path,$tagOrItem,variable)]} {
189
+ unset _registered($path,$tagOrItem,variable)
190
+ }
191
+ return 0
192
+ }
193
+
194
+ _add_canvas_variable $path $text $var $tagOrItem
195
+ }
196
+
197
+ menu {
198
+ set var [lindex $args 0]
199
+ if {$var == ""} {
200
+ set cpath [BWidget::clonename $path]
201
+ if {[winfo exists $cpath]} { set path $cpath }
202
+ if {[info exists _registered($path)]} {
203
+ unset _registered($path)
204
+ }
205
+ return 0
206
+ }
207
+
208
+ _add_menu $path $var
209
+ }
210
+
211
+ menuentry {
212
+ set cpath [BWidget::clonename $path]
213
+ if { [winfo exists $cpath] } { set path $cpath }
214
+ if {![info exists _registered($path)]} { return 0 }
215
+
216
+ set text [lindex $args 1]
217
+ set index [lindex $args 0]
218
+ if {$text == "" || $index == ""} {
219
+ set idx [lsearch $_registed($path) [list $index *]]
220
+ set _registered($path) [lreplace $_registered($path) $idx $idx]
221
+ return 0
222
+ }
223
+
224
+ _add_menuentry $path $text $index
225
+ }
226
+
227
+ default {
228
+ _unset_help $path
229
+ return 0
230
+ }
231
+ }
232
+
233
+ return 1
234
+ }
235
+
236
+
237
+ proc DynamicHelp::add { path args } {
238
+ variable _registered
239
+
240
+ array set data {
241
+ -type balloon
242
+ -text ""
243
+ -item ""
244
+ -index -1
245
+ -command ""
246
+ -variable ""
247
+ }
248
+ if {[winfo exists $path] && [winfo class $path] == "Menu"} {
249
+ set data(-type) menu
250
+ }
251
+ array set data $args
252
+
253
+ set item $path
254
+
255
+ switch -- $data(-type) {
256
+ "balloon" {
257
+ if {$data(-item) != ""} {
258
+ _add_canvas_balloon $path $data(-text) $data(-item)
259
+ set item $path,$data(-item)
260
+ } else {
261
+ _add_balloon $path $data(-text)
262
+ }
263
+
264
+ if {$data(-variable) != ""} {
265
+ set _registered($item,balloonVar) $data(-variable)
266
+ }
267
+ }
268
+
269
+ "variable" {
270
+ set var $data(-variable)
271
+ if {$data(-item) != ""} {
272
+ _add_canvas_variable $path $data(-text) $var $data(-item)
273
+ set item $path,$data(-item)
274
+ } else {
275
+ _add_variable $path $data(-text) $var
276
+ }
277
+ }
278
+
279
+ "menu" {
280
+ if {$data(-index) != -1} {
281
+ set cpath [BWidget::clonename $path]
282
+ if { [winfo exists $cpath] } { set path $cpath }
283
+ if {![info exists _registered($path)]} { return 0 }
284
+ _add_menuentry $path $data(-text) $data(-index)
285
+ set item $path,$data(-index)
286
+ } else {
287
+ _add_menu $path $data(-variable)
288
+ }
289
+ }
290
+
291
+ default {
292
+ return 0
293
+ }
294
+ }
295
+
296
+ if {$data(-command) != ""} {set _registered($item,command) $data(-command)}
297
+
298
+ return 1
299
+ }
300
+
301
+
302
+ proc DynamicHelp::delete { path } {
303
+ _unset_help $path
304
+ }
305
+
306
+
307
+ proc DynamicHelp::_add_bind_tag { path tag } {
308
+ set evt [bindtags $path]
309
+ set idx [lsearch $evt $tag]
310
+ set evt [lreplace $evt $idx $idx]
311
+ lappend evt $tag
312
+ bindtags $path $evt
313
+ }
314
+
315
+
316
+ proc DynamicHelp::_add_balloon { path text } {
317
+ variable _registered
318
+ set _registered($path,balloon) $text
319
+ _add_bind_tag $path BwHelpBalloon
320
+ }
321
+
322
+
323
+ proc DynamicHelp::_add_canvas_balloon { path text tagOrItem } {
324
+ variable _canvases
325
+ variable _registered
326
+
327
+ set _registered($path,$tagOrItem,balloon) $text
328
+
329
+ if {![info exists _canvases($path,balloon)]} {
330
+ ## This canvas doesn't have the bindings yet.
331
+
332
+ _add_bind_tag $path BwHelpBalloon
333
+
334
+ $path bind BwHelpBalloon <Enter> \
335
+ {DynamicHelp::_motion_balloon enter %W %X %Y 1}
336
+ $path bind BwHelpBalloon <Motion> \
337
+ {DynamicHelp::_motion_balloon motion %W %X %Y 1}
338
+ $path bind BwHelpBalloon <Leave> \
339
+ {DynamicHelp::_motion_balloon leave %W %X %Y 1}
340
+ $path bind BwHelpBalloon <Button> \
341
+ {DynamicHelp::_motion_balloon button %W %X %Y 1}
342
+
343
+ set _canvases($path,balloon) 1
344
+ }
345
+
346
+ $path addtag BwHelpBalloon withtag $tagOrItem
347
+ }
348
+
349
+ proc DynamicHelp::_add_variable { path text varName } {
350
+ variable _registered
351
+ set _registered($path,variable) [list $varName $text]
352
+ _add_bind_tag $path BwHelpVariable
353
+ }
354
+
355
+
356
+ proc DynamicHelp::_add_canvas_variable { path text varName tagOrItem } {
357
+ variable _canvases
358
+ variable _registered
359
+
360
+ set _registered($path,$tagOrItem,variable) [list $varName $text]
361
+
362
+ if {![info exists _canvases($path,variable)]} {
363
+ ## This canvas doesn't have the bindings yet.
364
+
365
+ _add_bind_tag $path BwHelpVariable
366
+
367
+ $path bind BwHelpVariable <Enter> \
368
+ {DynamicHelp::_motion_info %W 1}
369
+ $path bind BwHelpVariable <Motion> \
370
+ {DynamicHelp::_motion_info %W 1}
371
+ $path bind BwHelpVariable <Leave> \
372
+ {DynamicHelp::_leave_info %W 1}
373
+
374
+ set _canvases($path,variable) 1
375
+ }
376
+
377
+ $path addtag BwHelpVariable withtag $tagOrItem
378
+ }
379
+
380
+
381
+ proc DynamicHelp::_add_menu { path varName } {
382
+ variable _registered
383
+
384
+ set cpath [BWidget::clonename $path]
385
+ if { [winfo exists $cpath] } { set path $cpath }
386
+
387
+ set _registered($path) [list $varName]
388
+ _add_bind_tag $path BwHelpMenu
389
+ }
390
+
391
+
392
+ proc DynamicHelp::_add_menuentry { path text index } {
393
+ variable _registered
394
+
395
+ set idx [lsearch $_registered($path) [list $index *]]
396
+ set list [list $index $text]
397
+ if { $idx == -1 } {
398
+ lappend _registered($path) $list
399
+ } else {
400
+ set _registered($path) \
401
+ [lreplace $_registered($path) $idx $idx $list]
402
+ }
403
+ }
404
+
405
+
406
+ # ----------------------------------------------------------------------------
407
+ # Command DynamicHelp::_motion_balloon
408
+ # ----------------------------------------------------------------------------
409
+ proc DynamicHelp::_motion_balloon { type path x y {isCanvasItem 0} } {
410
+ variable _top
411
+ variable _id
412
+ variable _delay
413
+ variable _current_balloon
414
+
415
+ set w $path
416
+ if {$isCanvasItem} { set path [_get_canvas_path $path balloon] }
417
+
418
+ if { $_current_balloon != $path && $type == "enter" } {
419
+ set _current_balloon $path
420
+ set type "motion"
421
+ destroy $_top
422
+ }
423
+ if { $_current_balloon == $path } {
424
+ if { $_id != "" } {
425
+ after cancel $_id
426
+ set _id ""
427
+ }
428
+ if { $type == "motion" } {
429
+ if { ![winfo exists $_top] } {
430
+ set cmd [list DynamicHelp::_show_help $path $w $x $y]
431
+ set _id [after $_delay $cmd]
432
+ }
433
+ } else {
434
+ destroy $_top
435
+ set _current_balloon ""
436
+ }
437
+ }
438
+ }
439
+
440
+
441
+ # ----------------------------------------------------------------------------
442
+ # Command DynamicHelp::_motion_info
443
+ # ----------------------------------------------------------------------------
444
+ proc DynamicHelp::_motion_info { path {isCanvasItem 0} } {
445
+ variable _saved
446
+ variable _registered
447
+ variable _current_variable
448
+
449
+ if {$isCanvasItem} { set path [_get_canvas_path $path variable] }
450
+
451
+ if { $_current_variable != $path
452
+ && [info exists _registered($path,variable)] } {
453
+
454
+ set varName [lindex $_registered($path,variable) 0]
455
+ if {![info exists _saved]} { set _saved [GlobalVar::getvar $varName] }
456
+ set string [lindex $_registered($path,variable) 1]
457
+ if {[info exists _registered($path,command)]} {
458
+ set string [eval $_registered($path,command)]
459
+ }
460
+ GlobalVar::setvar $varName $string
461
+ set _current_variable $path
462
+ }
463
+ }
464
+
465
+
466
+ # ----------------------------------------------------------------------------
467
+ # Command DynamicHelp::_leave_info
468
+ # ----------------------------------------------------------------------------
469
+ proc DynamicHelp::_leave_info { path {isCanvasItem 0} } {
470
+ variable _saved
471
+ variable _registered
472
+ variable _current_variable
473
+
474
+ if {$isCanvasItem} { set path [_get_canvas_path $path variable] }
475
+
476
+ if { [info exists _registered($path,variable)] } {
477
+ set varName [lindex $_registered($path,variable) 0]
478
+ GlobalVar::setvar $varName $_saved
479
+ }
480
+ unset _saved
481
+ set _current_variable ""
482
+ }
483
+
484
+
485
+ # ----------------------------------------------------------------------------
486
+ # Command DynamicHelp::_menu_info
487
+ # Version of R1v1 restored, due to lack of [winfo ismapped] and <Unmap>
488
+ # under windows for menu.
489
+ # ----------------------------------------------------------------------------
490
+ proc DynamicHelp::_menu_info { event path } {
491
+ variable _registered
492
+
493
+ if { [info exists _registered($path)] } {
494
+ set index [$path index active]
495
+ set varName [lindex $_registered($path) 0]
496
+ if { ![string equal $index "none"] &&
497
+ [set idx [lsearch $_registered($path) [list $index *]]] != -1 } {
498
+ set string [lindex [lindex $_registered($path) $idx] 1]
499
+ if {[info exists _registered($path,$index,command)]} {
500
+ set string [eval $_registered($path,$index,command)]
501
+ }
502
+ GlobalVar::setvar $varName $string
503
+ } else {
504
+ GlobalVar::setvar $varName ""
505
+ }
506
+ }
507
+ }
508
+
509
+
510
+ # ----------------------------------------------------------------------------
511
+ # Command DynamicHelp::_show_help
512
+ # ----------------------------------------------------------------------------
513
+ proc DynamicHelp::_show_help { path w x y } {
514
+ variable _top
515
+ variable _registered
516
+ variable _id
517
+ variable _delay
518
+
519
+ if { [Widget::getoption $_top -state] == "disabled" } { return }
520
+
521
+ if { [info exists _registered($path,balloon)] } {
522
+ destroy $_top
523
+
524
+ set string $_registered($path,balloon)
525
+
526
+ if {[info exists _registered($path,balloonVar)]} {
527
+ upvar #0 $_registered($path,balloonVar) var
528
+ if {[info exists var]} { set string $var }
529
+ }
530
+
531
+ if {[info exists _registered($path,command)]} {
532
+ set string [eval $_registered($path,command)]
533
+ }
534
+
535
+ if {$string == ""} { return }
536
+
537
+ toplevel $_top -relief flat \
538
+ -bg [Widget::getoption $_top -topbackground] \
539
+ -bd [Widget::getoption $_top -borderwidth] \
540
+ -screen [winfo screen $w]
541
+
542
+ wm withdraw $_top
543
+ if {$::tk_version >= 8.4
544
+ && [string equal [tk windowingsystem] "aqua"]} {
545
+ ::tk::unsupported::MacWindowStyle style $_top help none
546
+ } else {
547
+ wm overrideredirect $_top 1
548
+ }
549
+
550
+ catch { wm attributes $_top -topmost 1 }
551
+
552
+ label $_top.label -text $string \
553
+ -relief flat -bd 0 -highlightthickness 0 \
554
+ -padx [Widget::getoption $_top -padx] \
555
+ -pady [Widget::getoption $_top -pady] \
556
+ -foreground [Widget::getoption $_top -foreground] \
557
+ -background [Widget::getoption $_top -background] \
558
+ -font [Widget::getoption $_top -font] \
559
+ -justify [Widget::getoption $_top -justify]
560
+
561
+
562
+ pack $_top.label -side left
563
+ update idletasks
564
+
565
+ if {![winfo exists $_top]} {return}
566
+
567
+ set scrwidth [winfo vrootwidth .]
568
+ set scrheight [winfo vrootheight .]
569
+ set width [winfo reqwidth $_top]
570
+ set height [winfo reqheight $_top]
571
+ incr y 12
572
+ incr x 8
573
+
574
+ if { $x+$width > $scrwidth } {
575
+ set x [expr {$scrwidth - $width}]
576
+ }
577
+ if { $y+$height > $scrheight } {
578
+ set y [expr {$y - 12 - $height}]
579
+ }
580
+
581
+ wm geometry $_top "+$x+$y"
582
+ update idletasks
583
+
584
+ if {![winfo exists $_top]} { return }
585
+ wm deiconify $_top
586
+ raise $_top
587
+ }
588
+ }
589
+
590
+ # ----------------------------------------------------------------------------
591
+ # Command DynamicHelp::_unset_help
592
+ # ----------------------------------------------------------------------------
593
+ proc DynamicHelp::_unset_help { path } {
594
+ variable _canvases
595
+ variable _registered
596
+ variable _top
597
+
598
+ if {[info exists _registered($path)]} { unset _registered($path) }
599
+ if {[winfo exists $path]} {
600
+ set cpath [BWidget::clonename $path]
601
+ if {[info exists _registered($cpath)]} { unset _registered($cpath) }
602
+ }
603
+ array unset _canvases $path,*
604
+ array unset _registered $path,*
605
+ destroy $_top
606
+ }
607
+
608
+ # ----------------------------------------------------------------------------
609
+ # Command DynamicHelp::_get_canvas_path
610
+ # ----------------------------------------------------------------------------
611
+ proc DynamicHelp::_get_canvas_path { path type {item ""} } {
612
+ variable _registered
613
+
614
+ if {$item == ""} { set item [$path find withtag current] }
615
+
616
+ ## Check the tags related to this item for the one that
617
+ ## represents our text. If we have text specific to this
618
+ ## item or for 'all' items, they override any other tags.
619
+ eval [list lappend tags $item all] [$path itemcget $item -tags]
620
+ foreach tag $tags {
621
+ set check $path,$tag
622
+ if {![info exists _registered($check,$type)]} { continue }
623
+ return $check
624
+ }
625
+ }