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,455 @@
1
+ # ------------------------------------------------------------------------------
2
+ # dropsite.tcl
3
+ # This file is part of Unifix BWidget Toolkit
4
+ # $Id: dropsite.tcl,v 1.7 2003/10/20 21:23:52 damonc Exp $
5
+ # ------------------------------------------------------------------------------
6
+ # Index of commands:
7
+ # - DropSite::include
8
+ # - DropSite::setdrop
9
+ # - DropSite::register
10
+ # - DropSite::setcursor
11
+ # - DropSite::setoperation
12
+ # - DropSite::_update_operation
13
+ # - DropSite::_compute_operation
14
+ # - DropSite::_draw_operation
15
+ # - DropSite::_init_drag
16
+ # - DropSite::_motion
17
+ # - DropSite::_release
18
+ # ----------------------------------------------------------------------------
19
+
20
+
21
+ namespace eval DropSite {
22
+ Widget::define DropSite dropsite -classonly
23
+
24
+ Widget::declare DropSite [list \
25
+ [list -dropovercmd String "" 0] \
26
+ [list -dropcmd String "" 0] \
27
+ [list -droptypes String "" 0] \
28
+ ]
29
+
30
+ proc use {} {}
31
+
32
+ variable _top ".drag"
33
+ variable _opw ".drag.\#op"
34
+ variable _target ""
35
+ variable _status 0
36
+ variable _tabops
37
+ variable _defops
38
+ variable _source
39
+ variable _type
40
+ variable _data
41
+ variable _evt
42
+ # key win unix
43
+ # shift 1 | 1 -> 1
44
+ # control 4 | 4 -> 4
45
+ # alt 8 | 16 -> 24
46
+ # meta | 64 -> 88
47
+
48
+ array set _tabops {
49
+ mod,none 0
50
+ mod,shift 1
51
+ mod,control 4
52
+ mod,alt 24
53
+ ops,copy 1
54
+ ops,move 1
55
+ ops,link 1
56
+ }
57
+
58
+ if { $tcl_platform(platform) == "unix" } {
59
+ set _tabops(mod,alt) 8
60
+ } else {
61
+ set _tabops(mod,alt) 16
62
+ }
63
+ array set _defops \
64
+ [list \
65
+ copy,mod shift \
66
+ move,mod control \
67
+ link,mod alt \
68
+ copy,img @[file join $::BWIDGET::LIBRARY "images" "opcopy.xbm"] \
69
+ move,img @[file join $::BWIDGET::LIBRARY "images" "opmove.xbm"] \
70
+ link,img @[file join $::BWIDGET::LIBRARY "images" "oplink.xbm"]]
71
+
72
+ bind DragTop <KeyPress-Shift_L> {DropSite::_update_operation [expr %s | 1]}
73
+ bind DragTop <KeyPress-Shift_R> {DropSite::_update_operation [expr %s | 1]}
74
+ bind DragTop <KeyPress-Control_L> {DropSite::_update_operation [expr %s | 4]}
75
+ bind DragTop <KeyPress-Control_R> {DropSite::_update_operation [expr %s | 4]}
76
+ if { $tcl_platform(platform) == "unix" } {
77
+ bind DragTop <KeyPress-Alt_L> {DropSite::_update_operation [expr %s | 8]}
78
+ bind DragTop <KeyPress-Alt_R> {DropSite::_update_operation [expr %s | 8]}
79
+ } else {
80
+ bind DragTop <KeyPress-Alt_L> {DropSite::_update_operation [expr %s | 16]}
81
+ bind DragTop <KeyPress-Alt_R> {DropSite::_update_operation [expr %s | 16]}
82
+ }
83
+
84
+ bind DragTop <KeyRelease-Shift_L> {DropSite::_update_operation [expr %s & ~1]}
85
+ bind DragTop <KeyRelease-Shift_R> {DropSite::_update_operation [expr %s & ~1]}
86
+ bind DragTop <KeyRelease-Control_L> {DropSite::_update_operation [expr %s & ~4]}
87
+ bind DragTop <KeyRelease-Control_R> {DropSite::_update_operation [expr %s & ~4]}
88
+ if { $tcl_platform(platform) == "unix" } {
89
+ bind DragTop <KeyRelease-Alt_L> {DropSite::_update_operation [expr %s & ~8]}
90
+ bind DragTop <KeyRelease-Alt_R> {DropSite::_update_operation [expr %s & ~8]}
91
+ } else {
92
+ bind DragTop <KeyRelease-Alt_L> {DropSite::_update_operation [expr %s & ~16]}
93
+ bind DragTop <KeyRelease-Alt_R> {DropSite::_update_operation [expr %s & ~16]}
94
+ }
95
+ }
96
+
97
+
98
+ # ----------------------------------------------------------------------------
99
+ # Command DropSite::include
100
+ # ----------------------------------------------------------------------------
101
+ proc DropSite::include { class types } {
102
+ set dropoptions [list \
103
+ [list -dropenabled Boolean 0 0] \
104
+ [list -dropovercmd String "" 0] \
105
+ [list -dropcmd String "" 0] \
106
+ [list -droptypes String $types 0] \
107
+ ]
108
+ Widget::declare $class $dropoptions
109
+ }
110
+
111
+
112
+ # ----------------------------------------------------------------------------
113
+ # Command DropSite::setdrop
114
+ # Widget interface to register
115
+ # ----------------------------------------------------------------------------
116
+ proc DropSite::setdrop { path subpath dropover drop {force 0}} {
117
+ set cen [Widget::hasChanged $path -dropenabled en]
118
+ set ctypes [Widget::hasChanged $path -droptypes types]
119
+ if { $en } {
120
+ if { $force || $cen || $ctypes } {
121
+ register $subpath \
122
+ -droptypes $types \
123
+ -dropcmd $drop \
124
+ -dropovercmd $dropover
125
+ }
126
+ } else {
127
+ register $subpath
128
+ }
129
+ }
130
+
131
+
132
+ # ----------------------------------------------------------------------------
133
+ # Command DropSite::register
134
+ # ----------------------------------------------------------------------------
135
+ proc DropSite::register { path args } {
136
+ variable _tabops
137
+ variable _defops
138
+ upvar \#0 DropSite::$path drop
139
+
140
+ Widget::init DropSite .drop$path $args
141
+ if { [info exists drop] } {
142
+ unset drop
143
+ }
144
+ set dropcmd [Widget::getMegawidgetOption .drop$path -dropcmd]
145
+ set types [Widget::getMegawidgetOption .drop$path -droptypes]
146
+ set overcmd [Widget::getMegawidgetOption .drop$path -dropovercmd]
147
+ Widget::destroy .drop$path
148
+ if { $dropcmd != "" && $types != "" } {
149
+ set drop(dropcmd) $dropcmd
150
+ set drop(overcmd) $overcmd
151
+ foreach {type ops} $types {
152
+ set drop($type,ops) {}
153
+ foreach {descop lmod} $ops {
154
+ if { ![llength $descop] || [llength $descop] > 3 } {
155
+ return -code error "invalid operation description \"$descop\""
156
+ }
157
+ foreach {subop baseop imgop} $descop {
158
+ set subop [string trim $subop]
159
+ if { ![string length $subop] } {
160
+ return -code error "sub operation is empty"
161
+ }
162
+ if { ![string length $baseop] } {
163
+ set baseop $subop
164
+ }
165
+ if { [info exists drop($type,ops,$subop)] } {
166
+ return -code error "operation \"$subop\" already defined"
167
+ }
168
+ if { ![info exists _tabops(ops,$baseop)] } {
169
+ return -code error "invalid base operation \"$baseop\""
170
+ }
171
+ if { ![string equal $subop $baseop] &&
172
+ [info exists _tabops(ops,$subop)] } {
173
+ return -code error "sub operation \"$subop\" is a base operation"
174
+ }
175
+ if { ![string length $imgop] } {
176
+ set imgop $_defops($baseop,img)
177
+ }
178
+ }
179
+ if { [string equal $lmod "program"] } {
180
+ set drop($type,ops,$subop) $baseop
181
+ set drop($type,img,$subop) $imgop
182
+ } else {
183
+ if { ![string length $lmod] } {
184
+ set lmod $_defops($baseop,mod)
185
+ }
186
+ set mask 0
187
+ foreach mod $lmod {
188
+ if { ![info exists _tabops(mod,$mod)] } {
189
+ return -code error "invalid modifier \"$mod\""
190
+ }
191
+ set mask [expr {$mask | $_tabops(mod,$mod)}]
192
+ }
193
+ if { ($mask == 0) != ([string equal $subop "default"]) } {
194
+ return -code error "sub operation default can only be used with modifier \"none\""
195
+ }
196
+ set drop($type,mod,$mask) $subop
197
+ set drop($type,ops,$subop) $baseop
198
+ set drop($type,img,$subop) $imgop
199
+ lappend masklist $mask
200
+ }
201
+ }
202
+ if { ![info exists drop($type,mod,0)] } {
203
+ set drop($type,mod,0) default
204
+ set drop($type,ops,default) copy
205
+ set drop($type,img,default) $_defops(copy,img)
206
+ lappend masklist 0
207
+ }
208
+ set drop($type,ops,force) copy
209
+ set drop($type,img,force) $_defops(copy,img)
210
+ foreach mask [lsort -integer -decreasing $masklist] {
211
+ lappend drop($type,ops) $mask $drop($type,mod,$mask)
212
+ }
213
+ }
214
+ }
215
+ }
216
+
217
+
218
+ # ----------------------------------------------------------------------------
219
+ # Command DropSite::setcursor
220
+ # ----------------------------------------------------------------------------
221
+ proc DropSite::setcursor { cursor } {
222
+ catch {.drag configure -cursor $cursor}
223
+ }
224
+
225
+
226
+ # ----------------------------------------------------------------------------
227
+ # Command DropSite::setoperation
228
+ # ----------------------------------------------------------------------------
229
+ proc DropSite::setoperation { op } {
230
+ variable _curop
231
+ variable _dragops
232
+ variable _target
233
+ variable _type
234
+ upvar \#0 DropSite::$_target drop
235
+
236
+ if { [info exist drop($_type,ops,$op)] &&
237
+ $_dragops($drop($_type,ops,$op)) } {
238
+ set _curop $op
239
+ } else {
240
+ # force to a copy operation
241
+ set _curop force
242
+ }
243
+ }
244
+
245
+
246
+ # ----------------------------------------------------------------------------
247
+ # Command DropSite::_init_drag
248
+ # ----------------------------------------------------------------------------
249
+ proc DropSite::_init_drag { top evt source state X Y type ops data } {
250
+ variable _top
251
+ variable _source
252
+ variable _type
253
+ variable _data
254
+ variable _target
255
+ variable _status
256
+ variable _state
257
+ variable _dragops
258
+ variable _opw
259
+ variable _evt
260
+
261
+ if {[info exists _dragops]} {
262
+ unset _dragops
263
+ }
264
+ array set _dragops {copy 1 move 0 link 0}
265
+ foreach op $ops {
266
+ set _dragops($op) 1
267
+ }
268
+ set _target ""
269
+ set _status 0
270
+ set _top $top
271
+ set _source $source
272
+ set _type $type
273
+ set _data $data
274
+
275
+ label $_opw -relief flat -bd 0 -highlightthickness 0 \
276
+ -foreground black -background white
277
+
278
+ bind $top <ButtonRelease-$evt> {DropSite::_release %X %Y}
279
+ bind $top <B$evt-Motion> {DropSite::_motion %X %Y}
280
+ bind $top <Motion> {DropSite::_release %X %Y}
281
+ set _state $state
282
+ set _evt $evt
283
+ _motion $X $Y
284
+ }
285
+
286
+
287
+ # ----------------------------------------------------------------------------
288
+ # Command DropSite::_update_operation
289
+ # ----------------------------------------------------------------------------
290
+ proc DropSite::_update_operation { state } {
291
+ variable _top
292
+ variable _status
293
+ variable _state
294
+
295
+ if { $_status & 3 } {
296
+ set _state $state
297
+ _motion [winfo pointerx $_top] [winfo pointery $_top]
298
+ }
299
+ }
300
+
301
+
302
+ # ----------------------------------------------------------------------------
303
+ # Command DropSite::_compute_operation
304
+ # ----------------------------------------------------------------------------
305
+ proc DropSite::_compute_operation { target state type } {
306
+ variable _curop
307
+ variable _dragops
308
+ upvar \#0 DropSite::$target drop
309
+
310
+ foreach {mask op} $drop($type,ops) {
311
+ if { ($state & $mask) == $mask } {
312
+ if { $_dragops($drop($type,ops,$op)) } {
313
+ set _curop $op
314
+ return
315
+ }
316
+ }
317
+ }
318
+ set _curop force
319
+ }
320
+
321
+
322
+ # ----------------------------------------------------------------------------
323
+ # Command DropSite::_draw_operation
324
+ # ----------------------------------------------------------------------------
325
+ proc DropSite::_draw_operation { target type } {
326
+ variable _opw
327
+ variable _curop
328
+ variable _dragops
329
+ variable _tabops
330
+ variable _status
331
+
332
+ upvar \#0 DropSite::$target drop
333
+
334
+ if { !($_status & 1) } {
335
+ catch {place forget $_opw}
336
+ return
337
+ }
338
+
339
+ if { 0 } {
340
+ if { ![info exist drop($type,ops,$_curop)] ||
341
+ !$_dragops($drop($type,ops,$_curop)) } {
342
+ # force to a copy operation
343
+ set _curop copy
344
+ catch {
345
+ $_opw configure -bitmap $_tabops(img,copy)
346
+ place $_opw -relx 1 -rely 1 -anchor se
347
+ }
348
+ }
349
+ } elseif { [string equal $_curop "default"] } {
350
+ catch {place forget $_opw}
351
+ } else {
352
+ catch {
353
+ $_opw configure -bitmap $drop($type,img,$_curop)
354
+ place $_opw -relx 1 -rely 1 -anchor se
355
+ }
356
+ }
357
+ }
358
+
359
+
360
+ # ----------------------------------------------------------------------------
361
+ # Command DropSite::_motion
362
+ # ----------------------------------------------------------------------------
363
+ proc DropSite::_motion { X Y } {
364
+ variable _top
365
+ variable _target
366
+ variable _status
367
+ variable _state
368
+ variable _curop
369
+ variable _type
370
+ variable _data
371
+ variable _source
372
+ variable _evt
373
+
374
+ set script [bind $_top <B$_evt-Motion>]
375
+ bind $_top <B$_evt-Motion> {}
376
+ bind $_top <Motion> {}
377
+ wm geometry $_top "+[expr {$X+1}]+[expr {$Y+1}]"
378
+ update
379
+ if { ![winfo exists $_top] } {
380
+ return
381
+ }
382
+ set path [winfo containing $X $Y]
383
+ if { ![string equal $path $_target] } {
384
+ # path != current target
385
+ if { $_status & 2 } {
386
+ # current target is valid and has recall status
387
+ # generate leave event
388
+ upvar \#0 DropSite::$_target drop
389
+ uplevel \#0 $drop(overcmd) [list $_target $_source leave $X $Y $_curop $_type $_data]
390
+ }
391
+ set _target $path
392
+ upvar \#0 DropSite::$_target drop
393
+ if { [info exists drop($_type,ops)] } {
394
+ # path is a valid target
395
+ _compute_operation $_target $_state $_type
396
+ if { $drop(overcmd) != "" } {
397
+ set arg [list $_target $_source enter $X $Y $_curop $_type $_data]
398
+ set _status [uplevel \#0 $drop(overcmd) $arg]
399
+ } else {
400
+ set _status 1
401
+ catch {$_top configure -cursor based_arrow_down}
402
+ }
403
+ _draw_operation $_target $_type
404
+ update
405
+ catch {
406
+ bind $_top <B$_evt-Motion> {DropSite::_motion %X %Y}
407
+ bind $_top <Motion> {DropSite::_release %X %Y}
408
+ }
409
+ return
410
+ } else {
411
+ set _status 0
412
+ catch {$_top configure -cursor dot}
413
+ _draw_operation "" ""
414
+ }
415
+ } elseif { $_status & 2 } {
416
+ upvar \#0 DropSite::$_target drop
417
+ _compute_operation $_target $_state $_type
418
+ set arg [list $_target $_source motion $X $Y $_curop $_type $_data]
419
+ set _status [uplevel \#0 $drop(overcmd) $arg]
420
+ _draw_operation $_target $_type
421
+ }
422
+ update
423
+ catch {
424
+ bind $_top <B$_evt-Motion> {DropSite::_motion %X %Y}
425
+ bind $_top <Motion> {DropSite::_release %X %Y}
426
+ }
427
+ }
428
+
429
+
430
+
431
+ # ----------------------------------------------------------------------------
432
+ # Command DropSite::_release
433
+ # ----------------------------------------------------------------------------
434
+ proc DropSite::_release { X Y } {
435
+ variable _target
436
+ variable _status
437
+ variable _curop
438
+ variable _source
439
+ variable _type
440
+ variable _data
441
+
442
+ if { $_status & 1 } {
443
+ upvar \#0 DropSite::$_target drop
444
+
445
+ set res [uplevel \#0 $drop(dropcmd) [list $_target $_source $X $Y $_curop $_type $_data]]
446
+ DragSite::_end_drag $_source $_target $drop($_type,ops,$_curop) $_type $_data $res
447
+ } else {
448
+ if { $_status & 2 } {
449
+ # notify leave event
450
+ upvar \#0 DropSite::$_target drop
451
+ uplevel \#0 $drop(overcmd) [list $_target $_source leave $X $Y $_curop $_type $_data]
452
+ }
453
+ DragSite::_end_drag $_source "" "" $_type $_data 0
454
+ }
455
+ }