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,294 @@
1
+ # ------------------------------------------------------------------------------
2
+ # pagesmgr.tcl
3
+ # This file is part of Unifix BWidget Toolkit
4
+ # $Id: pagesmgr.tcl,v 1.6 2003/10/20 21:23:52 damonc Exp $
5
+ # ------------------------------------------------------------------------------
6
+ # Index of commands:
7
+ # - PagesManager::create
8
+ # - PagesManager::configure
9
+ # - PagesManager::cget
10
+ # - PagesManager::compute_size
11
+ # - PagesManager::add
12
+ # - PagesManager::delete
13
+ # - PagesManager::raise
14
+ # - PagesManager::page
15
+ # - PagesManager::pages
16
+ # - PagesManager::getframe
17
+ # - PagesManager::_test_page
18
+ # - PagesManager::_select
19
+ # - PagesManager::_redraw
20
+ # - PagesManager::_draw_area
21
+ # - PagesManager::_realize
22
+ # ------------------------------------------------------------------------------
23
+ package require Tcl 8.1.1
24
+
25
+ namespace eval PagesManager {
26
+ Widget::define PagesManager pagesmgr
27
+
28
+ Widget::declare PagesManager {
29
+ {-background TkResource "" 0 frame}
30
+ {-cursor TkResource "" 0 frame}
31
+ {-width Int 0 0 "%d >= 0"}
32
+ {-height Int 0 0 "%d >= 0"}
33
+ }
34
+
35
+ Widget::addmap PagesManager "" :cmd { -width {} -height {} -cursor {} }
36
+ }
37
+
38
+
39
+ # ------------------------------------------------------------------------------
40
+ # Command PagesManager::create
41
+ # ------------------------------------------------------------------------------
42
+ proc PagesManager::create { path args } {
43
+ variable $path
44
+ upvar 0 $path data
45
+
46
+ Widget::init PagesManager $path $args
47
+
48
+ set data(select) ""
49
+ set data(pages) {}
50
+ set data(cpt) 0
51
+ set data(realized) 0
52
+
53
+ # --- creation du canvas -----------------------------------------------------------------
54
+ eval canvas $path -relief flat -bd 0 -highlightthickness 0 \
55
+ [Widget::subcget $path :cmd]
56
+
57
+ bind $path <Configure> [list PagesManager::_realize $path]
58
+ bind $path <Destroy> [list PagesManager::_destroy $path]
59
+
60
+ return [Widget::create PagesManager $path]
61
+ }
62
+
63
+
64
+ # ------------------------------------------------------------------------------
65
+ # Command PagesManager::configure
66
+ # ------------------------------------------------------------------------------
67
+ proc PagesManager::configure { path args } {
68
+ return [Widget::configure $path $args]
69
+ }
70
+
71
+
72
+ # ------------------------------------------------------------------------------
73
+ # Command PagesManager::cget
74
+ # ------------------------------------------------------------------------------
75
+ proc PagesManager::cget { path option } {
76
+ return [Widget::cget $path $option]
77
+ }
78
+
79
+
80
+ # ------------------------------------------------------------------------------
81
+ # Command PagesManager::compute_size
82
+ # ------------------------------------------------------------------------------
83
+ proc PagesManager::compute_size { path } {
84
+ variable $path
85
+ upvar 0 $path data
86
+
87
+ set wmax 0
88
+ set hmax 0
89
+ update idletasks
90
+ foreach page $data(pages) {
91
+ set w [winfo reqwidth $path.f$page]
92
+ set h [winfo reqheight $path.f$page]
93
+ set wmax [expr {$w>$wmax ? $w : $wmax}]
94
+ set hmax [expr {$h>$hmax ? $h : $hmax}]
95
+ }
96
+ configure $path -width $wmax -height $hmax
97
+ }
98
+
99
+
100
+ # ------------------------------------------------------------------------------
101
+ # Command PagesManager::add
102
+ # ------------------------------------------------------------------------------
103
+ proc PagesManager::add { path page } {
104
+ variable $path
105
+ upvar 0 $path data
106
+
107
+ if { [lsearch -exact $data(pages) $page] != -1 } {
108
+ return -code error "page \"$page\" already exists"
109
+ }
110
+
111
+ lappend data(pages) $page
112
+
113
+ frame $path.f$page -relief flat \
114
+ -background [Widget::cget $path -background] -borderwidth 0
115
+
116
+ return $path.f$page
117
+ }
118
+
119
+
120
+ # ------------------------------------------------------------------------------
121
+ # Command PagesManager::delete
122
+ # ------------------------------------------------------------------------------
123
+ proc PagesManager::delete { path page } {
124
+ variable $path
125
+ upvar 0 $path data
126
+
127
+ set pos [_test_page $path $page]
128
+ set data(pages) [lreplace $data(pages) $pos $pos]
129
+ if { $data(select) == $page } {
130
+ set data(select) ""
131
+ }
132
+ destroy $path.f$page
133
+ _redraw $path
134
+ }
135
+
136
+
137
+ # ------------------------------------------------------------------------------
138
+ # Command PagesManager::raise
139
+ # ------------------------------------------------------------------------------
140
+ proc PagesManager::raise { path {page ""} } {
141
+ variable $path
142
+ upvar 0 $path data
143
+
144
+ if { $page != "" } {
145
+ _test_page $path $page
146
+ _select $path $page
147
+ }
148
+ return $data(select)
149
+ }
150
+
151
+
152
+ # ------------------------------------------------------------------------------
153
+ # Command PagesManager::page - deprecated, use pages
154
+ # ------------------------------------------------------------------------------
155
+ proc PagesManager::page { path first {last ""} } {
156
+ variable $path
157
+ upvar 0 $path data
158
+
159
+ if { $last == "" } {
160
+ return [lindex $data(pages) $first]
161
+ } else {
162
+ return [lrange $data(pages) $first $last]
163
+ }
164
+ }
165
+
166
+
167
+ # ------------------------------------------------------------------------------
168
+ # Command PagesManager::pages
169
+ # ------------------------------------------------------------------------------
170
+ proc PagesManager::pages { path {first ""} {last ""} } {
171
+ variable $path
172
+ upvar 0 $path data
173
+
174
+ if { ![string length $first] } {
175
+ return $data(pages)
176
+ }
177
+
178
+ if { ![string length $last] } {
179
+ return [lindex $data(pages) $first]
180
+ } else {
181
+ return [lrange $data(pages) $first $last]
182
+ }
183
+ }
184
+
185
+
186
+ # ------------------------------------------------------------------------------
187
+ # Command PagesManager::getframe
188
+ # ------------------------------------------------------------------------------
189
+ proc PagesManager::getframe { path page } {
190
+ return $path.f$page
191
+ }
192
+
193
+
194
+ # ------------------------------------------------------------------------------
195
+ # Command PagesManager::_test_page
196
+ # ------------------------------------------------------------------------------
197
+ proc PagesManager::_test_page { path page } {
198
+ variable $path
199
+ upvar 0 $path data
200
+
201
+ if { [set pos [lsearch $data(pages) $page]] == -1 } {
202
+ return -code error "page \"$page\" does not exists"
203
+ }
204
+ return $pos
205
+ }
206
+
207
+
208
+ # ------------------------------------------------------------------------------
209
+ # Command PagesManager::_select
210
+ # ------------------------------------------------------------------------------
211
+ proc PagesManager::_select { path page } {
212
+ variable $path
213
+ upvar 0 $path data
214
+
215
+ set oldsel $data(select)
216
+ if { $page != $oldsel } {
217
+ set data(select) $page
218
+ _draw_area $path
219
+ }
220
+ }
221
+
222
+
223
+ # ------------------------------------------------------------------------------
224
+ # Command PagesManager::_redraw
225
+ # ------------------------------------------------------------------------------
226
+ proc PagesManager::_redraw { path } {
227
+ variable $path
228
+ upvar 0 $path data
229
+
230
+ if { !$data(realized) } {
231
+ return
232
+ }
233
+ _draw_area $path
234
+ }
235
+
236
+
237
+ # ------------------------------------------------------------------------------
238
+ # Command PagesManager::_draw_area
239
+ # ------------------------------------------------------------------------------
240
+ proc PagesManager::_draw_area { path } {
241
+ variable $path
242
+ upvar 0 $path data
243
+
244
+ set w [winfo width $path]
245
+ set h [winfo height $path]
246
+ set sel $data(select)
247
+ if { $sel != "" } {
248
+ if { [llength [$path:cmd find withtag "window"]] } {
249
+ $path:cmd coords "window" 0 0
250
+ $path:cmd itemconfigure "window" \
251
+ -width $w \
252
+ -height $h \
253
+ -window $path.f$sel
254
+ } else {
255
+ $path:cmd create window 0 0 \
256
+ -width $w \
257
+ -height $h \
258
+ -anchor nw \
259
+ -tags "window" \
260
+ -window $path.f$sel
261
+ }
262
+ } else {
263
+ $path:cmd delete "window"
264
+ }
265
+ }
266
+
267
+
268
+ # ------------------------------------------------------------------------------
269
+ # Command PagesManager::_realize
270
+ # ------------------------------------------------------------------------------
271
+ proc PagesManager::_realize { path } {
272
+ variable $path
273
+ upvar 0 $path data
274
+
275
+ if { [set width [Widget::cget $path -width]] == 0 ||
276
+ [set height [Widget::cget $path -height]] == 0 } {
277
+ compute_size $path
278
+ }
279
+
280
+ set data(realized) 1
281
+ _draw_area $path
282
+ bind $path <Configure> [list PagesManager::_draw_area $path]
283
+ }
284
+
285
+
286
+ # ------------------------------------------------------------------------------
287
+ # Command PagesManager::_destroy
288
+ # ------------------------------------------------------------------------------
289
+ proc PagesManager::_destroy { path } {
290
+ variable $path
291
+ upvar 0 $path data
292
+ Widget::destroy $path
293
+ unset data
294
+ }
@@ -0,0 +1,381 @@
1
+ # ----------------------------------------------------------------------------
2
+ # panedw.tcl
3
+ # This file is part of Unifix BWidget Toolkit
4
+ # ----------------------------------------------------------------------------
5
+ # Index of commands:
6
+ # - PanedWindow::create
7
+ # - PanedWindow::configure
8
+ # - PanedWindow::cget
9
+ # - PanedWindow::add
10
+ # - PanedWindow::getframe
11
+ # - PanedWindow::_apply_weights
12
+ # - PanedWindow::_destroy
13
+ # - PanedWindow::_beg_move_sash
14
+ # - PanedWindow::_move_sash
15
+ # - PanedWindow::_end_move_sash
16
+ # - PanedWindow::_realize
17
+ # ----------------------------------------------------------------------------
18
+
19
+ # JDC: added option to choose behavior of weights
20
+ # -weights extra : only apply weights to extra space (as current (>= 1.3.1) with grid command)
21
+ # -weights available : apply weights to total available space (as before (<1.3.1) with place command)
22
+
23
+ namespace eval PanedWindow {
24
+ Widget::define PanedWindow panedw
25
+
26
+ namespace eval Pane {
27
+ Widget::declare PanedWindow::Pane {
28
+ {-minsize Int 0 0 "%d >= 0"}
29
+ {-weight Int 1 0 "%d >= 0"}
30
+ }
31
+ }
32
+
33
+ Widget::declare PanedWindow {
34
+ {-side Enum top 1 {top left bottom right}}
35
+ {-width Int 10 1 "%d >=3"}
36
+ {-pad Int 4 1 "%d >= 0"}
37
+ {-background TkResource "" 0 frame}
38
+ {-bg Synonym -background}
39
+ {-activator Enum "" 1 {line button}}
40
+ {-weights Enum extra 1 {extra available}}
41
+ }
42
+
43
+ variable _panedw
44
+ }
45
+
46
+
47
+
48
+ # ----------------------------------------------------------------------------
49
+ # Command PanedWindow::create
50
+ # ----------------------------------------------------------------------------
51
+ proc PanedWindow::create { path args } {
52
+ variable _panedw
53
+
54
+ Widget::init PanedWindow $path $args
55
+
56
+ frame $path -background [Widget::cget $path -background] -class PanedWindow
57
+ set _panedw($path,nbpanes) 0
58
+ set _panedw($path,weights) ""
59
+ set _panedw($path,configuredone) 0
60
+
61
+ bind $path <Configure> [list PanedWindow::_realize $path %w %h]
62
+ bind $path <Destroy> [list PanedWindow::_destroy $path]
63
+
64
+ return [Widget::create PanedWindow $path]
65
+ }
66
+
67
+
68
+ # ----------------------------------------------------------------------------
69
+ # Command PanedWindow::configure
70
+ # ----------------------------------------------------------------------------
71
+ proc PanedWindow::configure { path args } {
72
+ variable _panedw
73
+
74
+ set res [Widget::configure $path $args]
75
+
76
+ if { [Widget::hasChanged $path -background bg] && $_panedw($path,nbpanes) > 0 } {
77
+ $path:cmd configure -background $bg
78
+ $path.f0 configure -background $bg
79
+ for {set i 1} {$i < $_panedw($path,nbpanes)} {incr i} {
80
+ set frame $path.sash$i
81
+ $frame configure -background $bg
82
+ $frame.sep configure -background $bg
83
+ $frame.but configure -background $bg
84
+ $path.f$i configure -background $bg
85
+ $path.f$i.frame configure -background $bg
86
+ }
87
+ }
88
+ return $res
89
+ }
90
+
91
+
92
+ # ----------------------------------------------------------------------------
93
+ # Command PanedWindow::cget
94
+ # ----------------------------------------------------------------------------
95
+ proc PanedWindow::cget { path option } {
96
+ return [Widget::cget $path $option]
97
+ }
98
+
99
+
100
+ # ----------------------------------------------------------------------------
101
+ # Command PanedWindow::add
102
+ # ----------------------------------------------------------------------------
103
+ proc PanedWindow::add { path args } {
104
+ variable _panedw
105
+
106
+ set num $_panedw($path,nbpanes)
107
+ Widget::init PanedWindow::Pane $path.f$num $args
108
+ set bg [Widget::getoption $path -background]
109
+
110
+ set wbut [Widget::getoption $path -width]
111
+ set pad [Widget::getoption $path -pad]
112
+ set width [expr {$wbut+2*$pad}]
113
+ set side [Widget::getoption $path -side]
114
+ set weight [Widget::getoption $path.f$num -weight]
115
+ lappend _panedw($path,weights) $weight
116
+
117
+ if { $num > 0 } {
118
+ set frame [frame $path.sash$num -relief flat -bd 0 \
119
+ -highlightthickness 0 -width $width -height $width -bg $bg]
120
+ set sep [frame $frame.sep -bd 5 -relief raised \
121
+ -highlightthickness 0 -bg $bg]
122
+ set but [frame $frame.but -bd 1 -relief raised \
123
+ -highlightthickness 0 -bg $bg -width $wbut -height $wbut]
124
+ set placeButton 1
125
+ set sepsize 2
126
+
127
+ set activator [Widget::getoption $path -activator]
128
+ if {$activator == ""} {
129
+ if { $::tcl_platform(platform) != "windows" } {
130
+ set activator button
131
+ } else {
132
+ set activator line
133
+ }
134
+ }
135
+ if {$activator == "button"} {
136
+ set activator $but
137
+ } else {
138
+ set activator $sep
139
+ set sepsize 4
140
+ $sep configure -bd 3
141
+ set placeButton 0
142
+ }
143
+ if {[string equal $side "top"] || [string equal $side "bottom"]} {
144
+ place $sep -relx 0.5 -y 0 -width $sepsize -relheight 1.0 -anchor n
145
+ if { $placeButton } {
146
+ if {[string equal $side "top"]} {
147
+ place $but -relx 0.5 -y [expr {6+$wbut/2}] -anchor c
148
+ } else {
149
+ place $but -relx 0.5 -rely 1.0 -y [expr {-6-$wbut/2}] \
150
+ -anchor c
151
+ }
152
+ }
153
+ $activator configure -cursor sb_h_double_arrow
154
+ grid $frame -column [expr {2*$num-1}] -row 0 -sticky ns
155
+ grid columnconfigure $path [expr {2*$num-1}] -weight 0
156
+ } else {
157
+ place $sep -x 0 -rely 0.5 -height $sepsize -relwidth 1.0 -anchor w
158
+ if { $placeButton } {
159
+ if {[string equal $side "left"]} {
160
+ place $but -rely 0.5 -x [expr {6+$wbut/2}] -anchor c
161
+ } else {
162
+ place $but -rely 0.5 -relx 1.0 -x [expr {-6-$wbut/2}] \
163
+ -anchor c
164
+ }
165
+ }
166
+ $activator configure -cursor sb_v_double_arrow
167
+ grid $frame -row [expr {2*$num-1}] -column 0 -sticky ew
168
+ grid rowconfigure $path [expr {2*$num-1}] -weight 0
169
+ }
170
+ bind $activator <ButtonPress-1> \
171
+ [list PanedWindow::_beg_move_sash $path $num %X %Y]
172
+ } else {
173
+ if { [string equal $side "top"] || \
174
+ [string equal $side "bottom"] } {
175
+ grid rowconfigure $path 0 -weight 1
176
+ } else {
177
+ grid columnconfigure $path 0 -weight 1
178
+ }
179
+ }
180
+
181
+ set pane [frame $path.f$num -bd 0 -relief flat \
182
+ -highlightthickness 0 -bg $bg]
183
+ set user [frame $path.f$num.frame -bd 0 -relief flat \
184
+ -highlightthickness 0 -bg $bg]
185
+ if { [string equal $side "top"] || [string equal $side "bottom"] } {
186
+ grid $pane -column [expr {2*$num}] -row 0 -sticky nsew
187
+ grid columnconfigure $path [expr {2*$num}] -weight $weight
188
+ } else {
189
+ grid $pane -row [expr {2*$num}] -column 0 -sticky nsew
190
+ grid rowconfigure $path [expr {2*$num}] -weight $weight
191
+ }
192
+ pack $user -fill both -expand yes
193
+ incr _panedw($path,nbpanes)
194
+ if {$_panedw($path,configuredone)} {
195
+ _realize $path [winfo width $path] [winfo height $path]
196
+ }
197
+
198
+ return $user
199
+ }
200
+
201
+
202
+ # ----------------------------------------------------------------------------
203
+ # Command PanedWindow::getframe
204
+ # ----------------------------------------------------------------------------
205
+ proc PanedWindow::getframe { path index } {
206
+ if { [winfo exists $path.f$index.frame] } {
207
+ return $path.f$index.frame
208
+ }
209
+ }
210
+
211
+
212
+ # ----------------------------------------------------------------------------
213
+ # Command PanedWindow::_beg_move_sash
214
+ # ----------------------------------------------------------------------------
215
+ proc PanedWindow::_beg_move_sash { path num x y } {
216
+ variable _panedw
217
+
218
+ set fprev $path.f[expr {$num-1}]
219
+ set fnext $path.f$num
220
+ set wsash [expr {[Widget::getoption $path -width] + 2*[Widget::getoption $path -pad]}]
221
+
222
+ $path.sash$num.but configure -relief sunken
223
+ set top [toplevel $path.sash -borderwidth 1 -relief raised]
224
+
225
+ set minszg [Widget::getoption $fprev -minsize]
226
+ set minszd [Widget::getoption $fnext -minsize]
227
+ set side [Widget::getoption $path -side]
228
+
229
+ if { [string equal $side "top"] || [string equal $side "bottom"] } {
230
+ $top configure -cursor sb_h_double_arrow
231
+ set h [winfo height $path]
232
+ set yr [winfo rooty $path.sash$num]
233
+ set xmin [expr {$wsash/2+[winfo rootx $fprev]+$minszg}]
234
+ set xmax [expr {-$wsash/2-1+[winfo rootx $fnext]+[winfo width $fnext]-$minszd}]
235
+ wm overrideredirect $top 1
236
+ wm geom $top "2x${h}+$x+$yr"
237
+
238
+ update idletasks
239
+ grab set $top
240
+ bind $top <ButtonRelease-1> [list PanedWindow::_end_move_sash $path $top $num $xmin $xmax %X rootx width]
241
+ bind $top <Motion> [list PanedWindow::_move_sash $top $xmin $xmax %X +%%d+$yr]
242
+ _move_sash $top $xmin $xmax $x "+%d+$yr"
243
+ } else {
244
+ $top configure -cursor sb_v_double_arrow
245
+ set w [winfo width $path]
246
+ set xr [winfo rootx $path.sash$num]
247
+ set ymin [expr {$wsash/2+[winfo rooty $fprev]+$minszg}]
248
+ set ymax [expr {-$wsash/2-1+[winfo rooty $fnext]+[winfo height $fnext]-$minszd}]
249
+ wm overrideredirect $top 1
250
+ wm geom $top "${w}x2+$xr+$y"
251
+
252
+ update idletasks
253
+ grab set $top
254
+ bind $top <ButtonRelease-1> [list PanedWindow::_end_move_sash \
255
+ $path $top $num $ymin $ymax %Y rooty height]
256
+ bind $top <Motion> [list PanedWindow::_move_sash \
257
+ $top $ymin $ymax %Y +$xr+%%d]
258
+ _move_sash $top $ymin $ymax $y "+$xr+%d"
259
+ }
260
+ }
261
+
262
+
263
+ # ----------------------------------------------------------------------------
264
+ # Command PanedWindow::_move_sash
265
+ # ----------------------------------------------------------------------------
266
+ proc PanedWindow::_move_sash { top min max v form } {
267
+
268
+ if { $v < $min } {
269
+ set v $min
270
+ } elseif { $v > $max } {
271
+ set v $max
272
+ }
273
+ wm geom $top [format $form $v]
274
+ }
275
+
276
+
277
+ # ----------------------------------------------------------------------------
278
+ # Command PanedWindow::_end_move_sash
279
+ # ----------------------------------------------------------------------------
280
+ proc PanedWindow::_end_move_sash { path top num min max v rootv size } {
281
+ variable _panedw
282
+
283
+ destroy $top
284
+ if { $v < $min } {
285
+ set v $min
286
+ } elseif { $v > $max } {
287
+ set v $max
288
+ }
289
+ set fprev $path.f[expr {$num-1}]
290
+ set fnext $path.f$num
291
+
292
+ $path.sash$num.but configure -relief raised
293
+
294
+ set wsash [expr {[Widget::getoption $path -width] + 2*[Widget::getoption $path -pad]}]
295
+ set dv [expr {$v-[winfo $rootv $path.sash$num]-$wsash/2}]
296
+ set w1 [winfo $size $fprev]
297
+ set w2 [winfo $size $fnext]
298
+
299
+ for {set i 0} {$i < $_panedw($path,nbpanes)} {incr i} {
300
+ if { $i == $num-1} {
301
+ $fprev configure -$size [expr {[winfo $size $fprev]+$dv}]
302
+ } elseif { $i == $num } {
303
+ $fnext configure -$size [expr {[winfo $size $fnext]-$dv}]
304
+ } else {
305
+ $path.f$i configure -$size [winfo $size $path.f$i]
306
+ }
307
+ }
308
+ }
309
+
310
+
311
+ # ----------------------------------------------------------------------------
312
+ # Command PanedWindow::_realize
313
+ # ----------------------------------------------------------------------------
314
+ proc PanedWindow::_realize { path width height } {
315
+ variable _panedw
316
+
317
+ set x 0
318
+ set y 0
319
+ set hc [winfo reqheight $path]
320
+ set hmax 0
321
+ for {set i 0} {$i < $_panedw($path,nbpanes)} {incr i} {
322
+ $path.f$i configure \
323
+ -width [winfo reqwidth $path.f$i.frame] \
324
+ -height [winfo reqheight $path.f$i.frame]
325
+ place $path.f$i.frame -x 0 -y 0 -relwidth 1 -relheight 1
326
+ }
327
+
328
+ bind $path <Configure> {}
329
+
330
+ _apply_weights $path
331
+ set _panedw($path,configuredone) 1
332
+ return
333
+ }
334
+
335
+ # ----------------------------------------------------------------------------
336
+ # Command PanedWindow::_apply_weights
337
+ # ----------------------------------------------------------------------------
338
+ proc PanedWindow::_apply_weights { path } {
339
+ variable _panedw
340
+
341
+ set weights [Widget::getoption $path -weights]
342
+ if {[string equal $weights "extra"]} {
343
+ return
344
+ }
345
+
346
+ set side [Widget::getoption $path -side]
347
+ if {[string equal $side "top"] || [string equal $side "bottom"] } {
348
+ set size width
349
+ } else {
350
+ set size height
351
+ }
352
+ set wsash [expr {[Widget::getoption $path -width] + 2*[Widget::getoption $path -pad]}]
353
+ set rs [winfo $size $path]
354
+ set s [expr {$rs - ($_panedw($path,nbpanes) - 1) * $wsash}]
355
+
356
+ set tw 0.0
357
+ foreach w $_panedw($path,weights) {
358
+ set tw [expr {$tw + $w}]
359
+ }
360
+
361
+ for {set i 0} {$i < $_panedw($path,nbpanes)} {incr i} {
362
+ set rw [lindex $_panedw($path,weights) $i]
363
+ set ps [expr {int($rw / $tw * $s)}]
364
+ $path.f$i configure -$size $ps
365
+ }
366
+ return
367
+ }
368
+
369
+
370
+ # ----------------------------------------------------------------------------
371
+ # Command PanedWindow::_destroy
372
+ # ----------------------------------------------------------------------------
373
+ proc PanedWindow::_destroy { path } {
374
+ variable _panedw
375
+
376
+ for {set i 0} {$i < $_panedw($path,nbpanes)} {incr i} {
377
+ Widget::destroy $path.f$i
378
+ }
379
+ unset _panedw($path,nbpanes)
380
+ Widget::destroy $path
381
+ }