arcadia 0.7.0 → 0.8.0

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 (168) hide show
  1. data/README +39 -38
  2. data/bin/arc +3 -0
  3. data/bin/arcadia +0 -1
  4. data/conf/arcadia.conf +54 -35
  5. data/conf/arcadia.init.rb +26 -3
  6. data/conf/arcadia.res.rb +56 -4
  7. data/ext/ae-breakpoints/ae-breakpoints.rb +1 -1
  8. data/ext/ae-dir-projects/ae-dir-projects.rb +113 -45
  9. data/ext/ae-editor/ae-editor.conf +6 -2
  10. data/ext/ae-editor/ae-editor.rb +1009 -616
  11. data/ext/ae-editor/langs/coderay.tokens +40 -0
  12. data/ext/ae-editor/langs/conf.lang +12 -10
  13. data/ext/ae-editor/langs/erb.lang.bind +1 -0
  14. data/ext/ae-editor/langs/java.lang +4 -0
  15. data/ext/ae-editor/langs/rb.lang +25 -55
  16. data/ext/ae-editor/langs/rhtml.lang +4 -0
  17. data/ext/ae-editor/langs/tokens.lang.bind +1 -0
  18. data/ext/ae-editor/langs/xml.lang +4 -0
  19. data/ext/ae-file-history/ae-file-history.rb +140 -32
  20. data/ext/ae-output/ae-output.rb +267 -262
  21. data/ext/ae-rad/ae-rad-inspector.rb +1 -1
  22. data/ext/ae-rad/ae-rad-libs.rb +15 -7
  23. data/ext/ae-rad/ae-rad.conf +4 -4
  24. data/ext/ae-rad/lib/tk/al-tk.rb +4 -3
  25. data/ext/ae-ruby-debug/ae-ruby-debug.conf +4 -2
  26. data/ext/ae-ruby-debug/ae-ruby-debug.rb +40 -15
  27. data/ext/ae-search-in-files/ae-search-in-files.rb +70 -14
  28. data/ext/ae-search-in-files/ext/ack-in-files/ack-in-files.conf +15 -0
  29. data/ext/ae-search-in-files/ext/ack-in-files/ack-in-files.rb +80 -0
  30. data/ext/ae-shell/ae-shell.conf +4 -1
  31. data/ext/ae-shell/ae-shell.rb +78 -43
  32. data/ext/test-shutdown-after-startup/test-shutdown-after-startup.conf +4 -0
  33. data/ext/test-shutdown-after-startup/test-shutdown-after-startup.rb +20 -0
  34. data/lib/a-commons.rb +118 -22
  35. data/lib/a-contracts.rb +46 -2
  36. data/lib/a-core.rb +970 -284
  37. data/lib/a-tkcommons.rb +16 -8
  38. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ArrowButton.html +0 -0
  39. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/BWidget.html +0 -0
  40. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Button.html +0 -0
  41. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ButtonBox.html +0 -0
  42. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ComboBox.html +0 -0
  43. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Dialog.html +20 -0
  44. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/DragSite.html +6 -4
  45. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/DropSite.html +15 -3
  46. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/DynamicHelp.html +8 -5
  47. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Entry.html +0 -0
  48. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Label.html +0 -0
  49. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/LabelEntry.html +0 -0
  50. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/LabelFrame.html +0 -0
  51. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ListBox.html +1 -1
  52. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/MainFrame.html +8 -0
  53. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/MessageDlg.html +0 -0
  54. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/NoteBook.html +0 -0
  55. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/PagesManager.html +0 -0
  56. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/PanedWindow.html +21 -5
  57. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/PanelFrame.html +0 -0
  58. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/PasswdDlg.html +0 -0
  59. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ProgressBar.html +0 -0
  60. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ProgressDlg.html +0 -0
  61. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ScrollView.html +0 -0
  62. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ScrollableFrame.html +5 -2
  63. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ScrolledWindow.html +36 -4
  64. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/SelectColor.html +0 -0
  65. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/SelectFont.html +0 -0
  66. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Separator.html +0 -0
  67. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/SpinBox.html +0 -0
  68. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/StatusBar.html +0 -0
  69. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/TitleFrame.html +0 -0
  70. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Tree.html +21 -31
  71. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Widget.html +0 -0
  72. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/contents.html +0 -0
  73. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/index.html +0 -0
  74. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/navtree.html +0 -0
  75. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/options.htm +0 -0
  76. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/CHANGES.txt +0 -0
  77. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/ChangeLog +289 -0
  78. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/LICENSE.txt +0 -0
  79. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/README.txt +2 -2
  80. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/arrow.tcl +1 -1
  81. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/bitmap.tcl +0 -0
  82. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/button.tcl +0 -0
  83. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/buttonbox.tcl +23 -12
  84. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/color.tcl +0 -0
  85. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/combobox.tcl +101 -25
  86. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/basic.tcl +0 -0
  87. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/bwidget.xbm +0 -0
  88. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/demo.tcl +1 -1
  89. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/dnd.tcl +0 -0
  90. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/manager.tcl +0 -0
  91. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/select.tcl +0 -0
  92. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/tmpldlg.tcl +0 -0
  93. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/tree.tcl +0 -0
  94. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/x1.xbm +0 -0
  95. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/dialog.tcl +0 -0
  96. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/dragsite.tcl +0 -0
  97. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/dropsite.tcl +2 -1
  98. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/dynhelp.tcl +194 -33
  99. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/entry.tcl +8 -5
  100. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/font.tcl +0 -0
  101. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/bold.gif +0 -0
  102. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/copy.gif +0 -0
  103. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/cut.gif +0 -0
  104. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/dragfile.gif +0 -0
  105. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/dragicon.gif +0 -0
  106. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/error.gif +0 -0
  107. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/file.gif +0 -0
  108. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/folder.gif +0 -0
  109. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/hourglass.gif +0 -0
  110. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/info.gif +0 -0
  111. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/italic.gif +0 -0
  112. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/minus.xbm +0 -0
  113. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/new.gif +0 -0
  114. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/opcopy.xbm +0 -0
  115. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/open.gif +0 -0
  116. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/openfold.gif +0 -0
  117. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/oplink.xbm +0 -0
  118. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/opmove.xbm +0 -0
  119. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/overstrike.gif +0 -0
  120. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/palette.gif +0 -0
  121. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/passwd.gif +0 -0
  122. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/paste.gif +0 -0
  123. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/plus.xbm +0 -0
  124. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/print.gif +0 -0
  125. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/question.gif +0 -0
  126. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/redo.gif +0 -0
  127. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/save.gif +0 -0
  128. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/target.xbm +0 -0
  129. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/underline.gif +0 -0
  130. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/undo.gif +0 -0
  131. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/warning.gif +0 -0
  132. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/init.tcl +0 -0
  133. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/label.tcl +0 -0
  134. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/labelentry.tcl +0 -0
  135. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/labelframe.tcl +0 -0
  136. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/lang/da.rc +0 -0
  137. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/lang/de.rc +0 -0
  138. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/lang/en.rc +0 -0
  139. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/lang/es.rc +0 -0
  140. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/lang/fr.rc +0 -0
  141. data/tcl/BWidget-1.9.0/lang/hu.rc +52 -0
  142. data/tcl/BWidget-1.9.0/lang/nl.rc +52 -0
  143. data/tcl/BWidget-1.9.0/lang/no.rc +52 -0
  144. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/listbox.tcl +89 -34
  145. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/mainframe.tcl +14 -13
  146. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/messagedlg.tcl +0 -0
  147. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/notebook.tcl +3 -1
  148. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/pagesmgr.tcl +0 -0
  149. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/panedw.tcl +22 -18
  150. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/panelframe.tcl +0 -0
  151. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/passwddlg.tcl +7 -3
  152. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/pkgIndex.tcl +2 -2
  153. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/progressbar.tcl +0 -0
  154. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/progressdlg.tcl +0 -0
  155. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/scrollframe.tcl +60 -24
  156. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/scrollview.tcl +0 -0
  157. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/scrollw.tcl +13 -11
  158. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/separator.tcl +0 -0
  159. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/spinbox.tcl +0 -0
  160. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/statusbar.tcl +0 -0
  161. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/tests/entry.test +0 -0
  162. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/titleframe.tcl +0 -0
  163. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/tree.tcl +51 -41
  164. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/utils.tcl +26 -11
  165. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/widget.tcl +53 -19
  166. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/wizard.tcl +0 -0
  167. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/xpm2image.tcl +0 -0
  168. metadata +170 -145
@@ -194,7 +194,7 @@ proc Demo::main {} {
194
194
  variable DEMODIR
195
195
 
196
196
  lappend ::auto_path [file dirname $DEMODIR]
197
- namespace inscope :: package require BWidget
197
+ package require BWidget
198
198
 
199
199
  option add *TitleFrame.l.font {helvetica 11 bold italic}
200
200
 
@@ -1,7 +1,7 @@
1
1
  # ------------------------------------------------------------------------------
2
2
  # dropsite.tcl
3
3
  # This file is part of Unifix BWidget Toolkit
4
- # $Id: dropsite.tcl,v 1.7 2003/10/20 21:23:52 damonc Exp $
4
+ # $Id: dropsite.tcl,v 1.8 2009/06/30 16:17:37 oehhar Exp $
5
5
  # ------------------------------------------------------------------------------
6
6
  # Index of commands:
7
7
  # - DropSite::include
@@ -150,6 +150,7 @@ proc DropSite::register { path args } {
150
150
  set drop(overcmd) $overcmd
151
151
  foreach {type ops} $types {
152
152
  set drop($type,ops) {}
153
+ set masklist {}
153
154
  foreach {descop lmod} $ops {
154
155
  if { ![llength $descop] || [llength $descop] > 3 } {
155
156
  return -code error "invalid operation description \"$descop\""
@@ -1,7 +1,7 @@
1
1
  # ----------------------------------------------------------------------------
2
2
  # dynhelp.tcl
3
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 $
4
+ # $Id: dynhelp.tcl,v 1.20 2009/07/15 16:50:16 oehhar Exp $
5
5
  # ----------------------------------------------------------------------------
6
6
  # Index of commands:
7
7
  # - DynamicHelp::configure
@@ -16,8 +16,6 @@
16
16
  # - DynamicHelp::_init
17
17
  # ----------------------------------------------------------------------------
18
18
 
19
- # JDC: allow variable and ballon help at the same timees
20
-
21
19
  namespace eval DynamicHelp {
22
20
  Widget::define DynamicHelp dynhelp -classonly
23
21
 
@@ -42,6 +40,7 @@ namespace eval DynamicHelp {
42
40
 
43
41
  variable _registered
44
42
  variable _canvases
43
+ variable _texts
45
44
 
46
45
  variable _top ".help_shell"
47
46
  variable _id ""
@@ -59,7 +58,6 @@ namespace eval DynamicHelp {
59
58
  bind BwHelpBalloon <Destroy> {DynamicHelp::_unset_help %W}
60
59
 
61
60
  bind BwHelpVariable <Enter> {DynamicHelp::_motion_info %W}
62
- bind BwHelpVariable <Motion> {DynamicHelp::_motion_info %W}
63
61
  bind BwHelpVariable <Leave> {DynamicHelp::_leave_info %W}
64
62
  bind BwHelpVariable <Destroy> {DynamicHelp::_unset_help %W}
65
63
 
@@ -92,6 +90,7 @@ proc DynamicHelp::include { class type } {
92
90
  set helpoptions [list \
93
91
  [list -helptext String "" 0] \
94
92
  [list -helpvar String "" 0] \
93
+ [list -helpcmd String "" 0] \
95
94
  [list -helptype Enum $type 0 [list balloon variable]] \
96
95
  ]
97
96
  Widget::declare $class $helpoptions
@@ -133,8 +132,20 @@ proc DynamicHelp::register { path type args } {
133
132
  variable _registered
134
133
 
135
134
  set len [llength $args]
136
- if {$type == "balloon" && $len > 1} { set type canvasBalloon }
137
- if {$type == "variable" && $len > 2} { set type canvasVariable }
135
+ if {$type == "balloon" && $len > 1} {
136
+ switch -exact -- [winfo class $path] {
137
+ "Canvas" { set type canvasBalloon }
138
+ "Text" -
139
+ "Ctext" { set type textBalloon }
140
+ }
141
+ }
142
+ if {$type == "variable" && $len > 2} {
143
+ switch -exact -- [winfo class $path] {
144
+ "Canvas" { set type canvasVariable }
145
+ "Text" -
146
+ "Ctext" { set type textVariable }
147
+ }
148
+ }
138
149
 
139
150
  if { ![winfo exists $path] } {
140
151
  _unset_help $path
@@ -167,6 +178,19 @@ proc DynamicHelp::register { path type args } {
167
178
  _add_canvas_balloon $path $text $tagOrItem
168
179
  }
169
180
 
181
+ textBalloon {
182
+ set tagOrItem [lindex $args 0]
183
+ set text [lindex $args 1]
184
+ if {$text == ""} {
185
+ if {[info exists _registered($path,$tagOrItem,balloon)]} {
186
+ unset _registered($path,$tagOrItem,balloon)
187
+ }
188
+ return 0
189
+ }
190
+
191
+ _add_text_balloon $path $text $tagOrItem
192
+ }
193
+
170
194
  variable {
171
195
  set var [lindex $args 0]
172
196
  set text [lindex $args 1]
@@ -194,6 +218,20 @@ proc DynamicHelp::register { path type args } {
194
218
  _add_canvas_variable $path $text $var $tagOrItem
195
219
  }
196
220
 
221
+ textVariable {
222
+ set tagOrItem [lindex $args 0]
223
+ set var [lindex $args 1]
224
+ set text [lindex $args 2]
225
+ if {$text == "" || $var == ""} {
226
+ if {[info exists _registered($path,$tagOrItem,variable)]} {
227
+ unset _registered($path,$tagOrItem,variable)
228
+ }
229
+ return 0
230
+ }
231
+
232
+ _add_text_variable $path $text $var $tagOrItem
233
+ }
234
+
197
235
  menu {
198
236
  set var [lindex $args 0]
199
237
  if {$var == ""} {
@@ -216,7 +254,7 @@ proc DynamicHelp::register { path type args } {
216
254
  set text [lindex $args 1]
217
255
  set index [lindex $args 0]
218
256
  if {$text == "" || $index == ""} {
219
- set idx [lsearch $_registed($path) [list $index *]]
257
+ set idx [lsearch $_registered($path) [list $index *]]
220
258
  set _registered($path) [lreplace $_registered($path) $idx $idx]
221
259
  return 0
222
260
  }
@@ -255,8 +293,20 @@ proc DynamicHelp::add { path args } {
255
293
  switch -- $data(-type) {
256
294
  "balloon" {
257
295
  if {$data(-item) != ""} {
258
- _add_canvas_balloon $path $data(-text) $data(-item)
259
- set item $path,$data(-item)
296
+ switch -exact -- [winfo class $path] {
297
+ "Canvas" {
298
+ _add_canvas_balloon $path $data(-text) $data(-item)
299
+ set item $path,$data(-item)
300
+ }
301
+ "Text" -
302
+ "Ctext" {
303
+ _add_text_balloon $path $data(-text) $data(-item)
304
+ set item $path,$data(-item)
305
+ }
306
+ default {
307
+ _add_balloon $path $data(-text)
308
+ }
309
+ }
260
310
  } else {
261
311
  _add_balloon $path $data(-text)
262
312
  }
@@ -269,8 +319,20 @@ proc DynamicHelp::add { path args } {
269
319
  "variable" {
270
320
  set var $data(-variable)
271
321
  if {$data(-item) != ""} {
272
- _add_canvas_variable $path $data(-text) $var $data(-item)
273
- set item $path,$data(-item)
322
+ switch -exact -- [winfo class $path] {
323
+ "Canvas" {
324
+ _add_canvas_variable $path $data(-text) $var $data(-item)
325
+ set item $path,$data(-item)
326
+ }
327
+ "Text" -
328
+ "Ctext" {
329
+ _add_text_variable $path $data(-text) $var $data(-item)
330
+ set item $path,$data(-item)
331
+ }
332
+ default {
333
+ _add_variable $path $data(-text) $var
334
+ }
335
+ }
274
336
  } else {
275
337
  _add_variable $path $data(-text) $var
276
338
  }
@@ -346,6 +408,28 @@ proc DynamicHelp::_add_canvas_balloon { path text tagOrItem } {
346
408
  $path addtag BwHelpBalloon withtag $tagOrItem
347
409
  }
348
410
 
411
+
412
+ proc DynamicHelp::_add_text_balloon { path text tagOrItem } {
413
+ variable _texts
414
+ variable _registered
415
+
416
+ set _registered($path,$tagOrItem,balloon) $text
417
+
418
+ if { ![info exists _texts($path,$tagOrItem,balloon)] } {
419
+ $path tag bind $tagOrItem <Enter> \
420
+ [list DynamicHelp::_motion_balloon enter $path %X %Y 0 1]
421
+ $path tag bind $tagOrItem <Motion> \
422
+ [list DynamicHelp::_motion_balloon motion $path %X %Y 0 1]
423
+ $path tag bind $tagOrItem <Leave> \
424
+ [list DynamicHelp::_motion_balloon leave $path %X %Y 0 1]
425
+ $path tag bind $tagOrItem <Button> \
426
+ [list DynamicHelp::_motion_balloon button $path %X %Y 0 1]
427
+
428
+ set _texts($path,$tagOrItem,balloon) 1
429
+ }
430
+ }
431
+
432
+
349
433
  proc DynamicHelp::_add_variable { path text varName } {
350
434
  variable _registered
351
435
  set _registered($path,variable) [list $varName $text]
@@ -378,6 +462,26 @@ proc DynamicHelp::_add_canvas_variable { path text varName tagOrItem } {
378
462
  }
379
463
 
380
464
 
465
+ proc DynamicHelp::_add_text_variable { path text varName tagOrItem } {
466
+ variable _texts
467
+ variable _registered
468
+
469
+ set _registered($path,$tagOrItem,variable) [list $varName $text]
470
+
471
+ if {![info exists _texts($path,$tagOrItem,variable)]} {
472
+
473
+ $path tag bind $tagOrItem <Enter> \
474
+ [list DynamicHelp::_motion_info $path 0 1]
475
+ $path tag bind $tagOrItem <Motion> \
476
+ [list DynamicHelp::_motion_info $path 0 1]
477
+ $path tag bind $tagOrItem <Leave> \
478
+ [list DynamicHelp::_leave_info $path 0 1]
479
+
480
+ set _texts($path,$tagOrItem,variable) 1
481
+ }
482
+ }
483
+
484
+
381
485
  proc DynamicHelp::_add_menu { path varName } {
382
486
  variable _registered
383
487
 
@@ -406,14 +510,18 @@ proc DynamicHelp::_add_menuentry { path text index } {
406
510
  # ----------------------------------------------------------------------------
407
511
  # Command DynamicHelp::_motion_balloon
408
512
  # ----------------------------------------------------------------------------
409
- proc DynamicHelp::_motion_balloon { type path x y {isCanvasItem 0} } {
513
+ proc DynamicHelp::_motion_balloon { type path x y {isCanvasItem 0} {isTextItem 0} } {
410
514
  variable _top
411
515
  variable _id
412
516
  variable _delay
413
517
  variable _current_balloon
414
518
 
415
519
  set w $path
416
- if {$isCanvasItem} { set path [_get_canvas_path $path balloon] }
520
+ if {$isCanvasItem} {
521
+ set path [_get_canvas_path $path balloon]
522
+ } elseif {$isTextItem} {
523
+ set path [_get_text_path $path balloon]
524
+ }
417
525
 
418
526
  if { $_current_balloon != $path && $type == "enter" } {
419
527
  set _current_balloon $path
@@ -430,6 +538,8 @@ proc DynamicHelp::_motion_balloon { type path x y {isCanvasItem 0} } {
430
538
  set cmd [list DynamicHelp::_show_help $path $w $x $y]
431
539
  set _id [after $_delay $cmd]
432
540
  }
541
+ # Bug 923942 proposes to destroy on motion to remove dynhelp on motion.
542
+ # this might be an optional behaviour in future versions
433
543
  } else {
434
544
  destroy $_top
435
545
  set _current_balloon ""
@@ -441,12 +551,16 @@ proc DynamicHelp::_motion_balloon { type path x y {isCanvasItem 0} } {
441
551
  # ----------------------------------------------------------------------------
442
552
  # Command DynamicHelp::_motion_info
443
553
  # ----------------------------------------------------------------------------
444
- proc DynamicHelp::_motion_info { path {isCanvasItem 0} } {
554
+ proc DynamicHelp::_motion_info { path {isCanvasItem 0} {isTextItem 0} } {
445
555
  variable _saved
446
556
  variable _registered
447
557
  variable _current_variable
448
558
 
449
- if {$isCanvasItem} { set path [_get_canvas_path $path variable] }
559
+ if {$isCanvasItem} {
560
+ set path [_get_canvas_path $path variable]
561
+ } elseif {$isTextItem} {
562
+ set path [_get_text_path $path variable]
563
+ }
450
564
 
451
565
  if { $_current_variable != $path
452
566
  && [info exists _registered($path,variable)] } {
@@ -455,7 +569,7 @@ proc DynamicHelp::_motion_info { path {isCanvasItem 0} } {
455
569
  if {![info exists _saved]} { set _saved [GlobalVar::getvar $varName] }
456
570
  set string [lindex $_registered($path,variable) 1]
457
571
  if {[info exists _registered($path,command)]} {
458
- set string [eval $_registered($path,command)]
572
+ set string [uplevel #0 $_registered($path,command)]
459
573
  }
460
574
  GlobalVar::setvar $varName $string
461
575
  set _current_variable $path
@@ -465,39 +579,47 @@ proc DynamicHelp::_motion_info { path {isCanvasItem 0} } {
465
579
 
466
580
  # ----------------------------------------------------------------------------
467
581
  # Command DynamicHelp::_leave_info
582
+ # Leave event may be called twice (in case of pointer grab)
468
583
  # ----------------------------------------------------------------------------
469
- proc DynamicHelp::_leave_info { path {isCanvasItem 0} } {
584
+ proc DynamicHelp::_leave_info { path {isCanvasItem 0} {isTextItem 0} } {
470
585
  variable _saved
471
586
  variable _registered
472
587
  variable _current_variable
473
588
 
474
- if {$isCanvasItem} { set path [_get_canvas_path $path variable] }
589
+ if {$isCanvasItem} {
590
+ set path [_get_canvas_path $path variable]
591
+ } elseif {$isTextItem} {
592
+ set path [_get_text_path $path variable]
593
+ }
475
594
 
476
- if { [info exists _registered($path,variable)] } {
595
+ if { [string equal $_current_variable $path] \
596
+ && [info exists _registered($path,variable)] } {
477
597
  set varName [lindex $_registered($path,variable) 0]
478
598
  GlobalVar::setvar $varName $_saved
599
+ unset _saved
600
+ set _current_variable ""
479
601
  }
480
- unset _saved
481
- set _current_variable ""
482
602
  }
483
603
 
484
604
 
485
605
  # ----------------------------------------------------------------------------
486
606
  # Command DynamicHelp::_menu_info
487
- # Version of R1v1 restored, due to lack of [winfo ismapped] and <Unmap>
488
- # under windows for menu.
489
607
  # ----------------------------------------------------------------------------
608
+ # We have to check for unmap event on Unix. On Windows, unmap
609
+ # is not delivered, but <<MenuSelect>> is triggered appropriately when menu
610
+ # is unmapped.
490
611
  proc DynamicHelp::_menu_info { event path } {
491
612
  variable _registered
492
613
 
493
614
  if { [info exists _registered($path)] } {
494
615
  set index [$path index active]
495
616
  set varName [lindex $_registered($path) 0]
496
- if { ![string equal $index "none"] &&
617
+ if { ![string equal $event "unmap"] &&
618
+ ![string equal $index "none"] &&
497
619
  [set idx [lsearch $_registered($path) [list $index *]]] != -1 } {
498
620
  set string [lindex [lindex $_registered($path) $idx] 1]
499
621
  if {[info exists _registered($path,$index,command)]} {
500
- set string [eval $_registered($path,$index,command)]
622
+ set string [uplevel #0 $_registered($path,$index,command)]
501
623
  }
502
624
  GlobalVar::setvar $varName $string
503
625
  } else {
@@ -529,7 +651,7 @@ proc DynamicHelp::_show_help { path w x y } {
529
651
  }
530
652
 
531
653
  if {[info exists _registered($path,command)]} {
532
- set string [eval $_registered($path,command)]
654
+ set string [uplevel #0 $_registered($path,command)]
533
655
  }
534
656
 
535
657
  if {$string == ""} { return }
@@ -568,14 +690,27 @@ proc DynamicHelp::_show_help { path w x y } {
568
690
  set scrheight [winfo vrootheight .]
569
691
  set width [winfo reqwidth $_top]
570
692
  set height [winfo reqheight $_top]
571
- incr y 12
572
- incr x 8
573
693
 
574
- if { $x+$width > $scrwidth } {
575
- set x [expr {$scrwidth - $width}]
694
+ # On windows multi screen configurations, coordinates may get outside
695
+ # the main screen. We suppose that all screens have the same size
696
+ # because it is not possible to query the size of the other screens.
697
+
698
+ set screenx [expr {$x % $scrwidth} ]
699
+ set screeny [expr {$y % $scrheight} ]
700
+
701
+ # Increment the required size by the deplacement from the passed point
702
+ incr width 8
703
+ incr height 12
704
+
705
+ if { $screenx+$width > $scrwidth } {
706
+ set x [expr {$x + ($scrwidth - $screenx) - ($width - 8)}]
707
+ } else {
708
+ incr x 8
576
709
  }
577
- if { $y+$height > $scrheight } {
578
- set y [expr {$y - 12 - $height}]
710
+ if { $screeny+$height > $scrheight } {
711
+ set y [expr {$y - $height}]
712
+ } else {
713
+ incr y 12
579
714
  }
580
715
 
581
716
  wm geometry $_top "+$x+$y"
@@ -592,8 +727,10 @@ proc DynamicHelp::_show_help { path w x y } {
592
727
  # ----------------------------------------------------------------------------
593
728
  proc DynamicHelp::_unset_help { path } {
594
729
  variable _canvases
730
+ variable _texts
595
731
  variable _registered
596
732
  variable _top
733
+ variable _current_balloon
597
734
 
598
735
  if {[info exists _registered($path)]} { unset _registered($path) }
599
736
  if {[winfo exists $path]} {
@@ -601,8 +738,9 @@ proc DynamicHelp::_unset_help { path } {
601
738
  if {[info exists _registered($cpath)]} { unset _registered($cpath) }
602
739
  }
603
740
  array unset _canvases $path,*
741
+ array unset _texts $path,*
604
742
  array unset _registered $path,*
605
- destroy $_top
743
+ if {[string equal $path $_current_balloon]} {destroy $_top}
606
744
  }
607
745
 
608
746
  # ----------------------------------------------------------------------------
@@ -622,4 +760,27 @@ proc DynamicHelp::_get_canvas_path { path type {item ""} } {
622
760
  if {![info exists _registered($check,$type)]} { continue }
623
761
  return $check
624
762
  }
763
+
764
+ return $path
765
+ }
766
+
767
+ # ----------------------------------------------------------------------------
768
+ # Command DynamicHelp::_get_text_path
769
+ # ----------------------------------------------------------------------------
770
+ proc DynamicHelp::_get_text_path { path type {item ""} } {
771
+ variable _registered
772
+
773
+ if {$item == ""} { set item [$path tag names current] }
774
+
775
+ ## Check the tags related to this item for the one that
776
+ ## represents our text. If we have text specific to this
777
+ ## item or for 'all' items, they override any other tags.
778
+ eval [list lappend tags $item all] $item
779
+ foreach tag $tags {
780
+ set check $path,$tag
781
+ if {![info exists _registered($check,$type)]} { continue }
782
+ return $check
783
+ }
784
+
785
+ return $path
625
786
  }