arcadia 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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
  }