arcadia 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. data/README +126 -123
  2. data/arcadia.rb +770 -756
  3. data/base/a-contracts.rb +130 -93
  4. data/base/a-ext.rb +280 -280
  5. data/base/a-libs.rb +5 -11
  6. data/base/a-utils.rb +235 -44
  7. data/conf/arcadia.conf +20 -16
  8. data/conf/arcadia.init.rb +0 -0
  9. data/conf/arcadia.res.rb +74 -0
  10. data/ext/ae-complete-code/ae-complete-code.conf +0 -0
  11. data/ext/ae-complete-code/ae-complete-code.rb +80 -79
  12. data/ext/ae-debug/ae-debug.conf +0 -0
  13. data/ext/ae-debug/ae-debug.rb +2 -6
  14. data/ext/ae-debug/debug1.57.rb +0 -0
  15. data/ext/ae-doc-code/ae-doc-code.conf +15 -0
  16. data/ext/ae-doc-code/ae-doc-code.rb +289 -0
  17. data/ext/ae-editor/ae-editor.conf +17 -8
  18. data/ext/ae-editor/ae-editor.rb +738 -396
  19. data/ext/ae-event-log/ae-event-log.conf +0 -0
  20. data/ext/ae-event-log/ae-event-log.rb +0 -0
  21. data/ext/ae-file-history/ae-file-history.conf +2 -2
  22. data/ext/ae-file-history/ae-file-history.rb +286 -290
  23. data/ext/ae-inspector/ae-inspector.conf +0 -0
  24. data/ext/ae-inspector/ae-inspector.rb +0 -0
  25. data/ext/ae-output-event/ae-output-event.conf +2 -2
  26. data/ext/ae-output/ae-output.conf +2 -2
  27. data/ext/ae-output/ae-output.rb +173 -178
  28. data/ext/ae-palette/ae-palette.conf +0 -0
  29. data/ext/ae-palette/ae-palette.rb +0 -0
  30. data/ext/ae-shell/ae-shell.conf +0 -0
  31. data/ext/ae-shell/ae-shell.rb +54 -54
  32. data/lib/tk/al-tk.rb +3076 -3082
  33. data/lib/tk/al-tk.res.rb +0 -0
  34. data/lib/tk/al-tkarcadia.rb +0 -0
  35. data/lib/tk/al-tkcustom.rb +0 -0
  36. data/lib/tkext/al-bwidget.rb +0 -0
  37. data/lib/tkext/al-iwidgets.rb +0 -0
  38. data/lib/tkext/al-tile.rb +0 -0
  39. data/lib/tkext/al-tktable.rb +0 -0
  40. data/tcl/BWidget-1.8.0/BWman/ArrowButton.html +276 -0
  41. data/tcl/BWidget-1.8.0/BWman/BWidget.html +228 -0
  42. data/tcl/BWidget-1.8.0/BWman/Button.html +273 -0
  43. data/tcl/BWidget-1.8.0/BWman/ButtonBox.html +264 -0
  44. data/tcl/BWidget-1.8.0/BWman/ComboBox.html +402 -0
  45. data/tcl/BWidget-1.8.0/BWman/Dialog.html +314 -0
  46. data/tcl/BWidget-1.8.0/BWman/DragSite.html +139 -0
  47. data/tcl/BWidget-1.8.0/BWman/DropSite.html +254 -0
  48. data/tcl/BWidget-1.8.0/BWman/DynamicHelp.html +248 -0
  49. data/tcl/BWidget-1.8.0/BWman/Entry.html +341 -0
  50. data/tcl/BWidget-1.8.0/BWman/Label.html +331 -0
  51. data/tcl/BWidget-1.8.0/BWman/LabelEntry.html +194 -0
  52. data/tcl/BWidget-1.8.0/BWman/LabelFrame.html +144 -0
  53. data/tcl/BWidget-1.8.0/BWman/ListBox.html +678 -0
  54. data/tcl/BWidget-1.8.0/BWman/MainFrame.html +283 -0
  55. data/tcl/BWidget-1.8.0/BWman/MessageDlg.html +218 -0
  56. data/tcl/BWidget-1.8.0/BWman/NoteBook.html +374 -0
  57. data/tcl/BWidget-1.8.0/BWman/PagesManager.html +180 -0
  58. data/tcl/BWidget-1.8.0/BWman/PanedWindow.html +142 -0
  59. data/tcl/BWidget-1.8.0/BWman/PanelFrame.html +153 -0
  60. data/tcl/BWidget-1.8.0/BWman/PasswdDlg.html +214 -0
  61. data/tcl/BWidget-1.8.0/BWman/ProgressBar.html +152 -0
  62. data/tcl/BWidget-1.8.0/BWman/ProgressDlg.html +145 -0
  63. data/tcl/BWidget-1.8.0/BWman/ScrollView.html +130 -0
  64. data/tcl/BWidget-1.8.0/BWman/ScrollableFrame.html +191 -0
  65. data/tcl/BWidget-1.8.0/BWman/ScrolledWindow.html +116 -0
  66. data/tcl/BWidget-1.8.0/BWman/SelectColor.html +164 -0
  67. data/tcl/BWidget-1.8.0/BWman/SelectFont.html +152 -0
  68. data/tcl/BWidget-1.8.0/BWman/Separator.html +77 -0
  69. data/tcl/BWidget-1.8.0/BWman/SpinBox.html +250 -0
  70. data/tcl/BWidget-1.8.0/BWman/StatusBar.html +147 -0
  71. data/tcl/BWidget-1.8.0/BWman/TitleFrame.html +107 -0
  72. data/tcl/BWidget-1.8.0/BWman/Tree.html +947 -0
  73. data/tcl/BWidget-1.8.0/BWman/Widget.html +502 -0
  74. data/tcl/BWidget-1.8.0/BWman/contents.html +84 -0
  75. data/tcl/BWidget-1.8.0/BWman/index.html +7 -0
  76. data/tcl/BWidget-1.8.0/BWman/navtree.html +41 -0
  77. data/tcl/BWidget-1.8.0/BWman/options.htm +458 -0
  78. data/tcl/BWidget-1.8.0/CHANGES.txt +266 -0
  79. data/tcl/BWidget-1.8.0/ChangeLog +1641 -0
  80. data/tcl/BWidget-1.8.0/LICENSE.txt +41 -0
  81. data/tcl/BWidget-1.8.0/README.txt +127 -0
  82. data/tcl/BWidget-1.8.0/arrow.tcl +551 -0
  83. data/tcl/BWidget-1.8.0/bitmap.tcl +94 -0
  84. data/tcl/BWidget-1.8.0/button.tcl +324 -0
  85. data/tcl/BWidget-1.8.0/buttonbox.tcl +403 -0
  86. data/tcl/BWidget-1.8.0/color.tcl +493 -0
  87. data/tcl/BWidget-1.8.0/combobox.tcl +809 -0
  88. data/tcl/BWidget-1.8.0/demo/basic.tcl +199 -0
  89. data/tcl/BWidget-1.8.0/demo/bwidget.xbm +46 -0
  90. data/tcl/BWidget-1.8.0/demo/demo.tcl +212 -0
  91. data/tcl/BWidget-1.8.0/demo/dnd.tcl +42 -0
  92. data/tcl/BWidget-1.8.0/demo/manager.tcl +141 -0
  93. data/tcl/BWidget-1.8.0/demo/select.tcl +59 -0
  94. data/tcl/BWidget-1.8.0/demo/tmpldlg.tcl +214 -0
  95. data/tcl/BWidget-1.8.0/demo/tree.tcl +260 -0
  96. data/tcl/BWidget-1.8.0/demo/x1.xbm +2258 -0
  97. data/tcl/BWidget-1.8.0/dialog.tcl +345 -0
  98. data/tcl/BWidget-1.8.0/dragsite.tcl +197 -0
  99. data/tcl/BWidget-1.8.0/dropsite.tcl +455 -0
  100. data/tcl/BWidget-1.8.0/dynhelp.tcl +625 -0
  101. data/tcl/BWidget-1.8.0/entry.tcl +469 -0
  102. data/tcl/BWidget-1.8.0/font.tcl +566 -0
  103. data/tcl/BWidget-1.8.0/images/bold.gif +0 -0
  104. data/tcl/BWidget-1.8.0/images/copy.gif +0 -0
  105. data/tcl/BWidget-1.8.0/images/cut.gif +0 -0
  106. data/tcl/BWidget-1.8.0/images/dragfile.gif +0 -0
  107. data/tcl/BWidget-1.8.0/images/dragicon.gif +0 -0
  108. data/tcl/BWidget-1.8.0/images/error.gif +0 -0
  109. data/tcl/BWidget-1.8.0/images/file.gif +0 -0
  110. data/tcl/BWidget-1.8.0/images/folder.gif +0 -0
  111. data/tcl/BWidget-1.8.0/images/hourglass.gif +0 -0
  112. data/tcl/BWidget-1.8.0/images/info.gif +0 -0
  113. data/tcl/BWidget-1.8.0/images/italic.gif +0 -0
  114. data/tcl/BWidget-1.8.0/images/minus.xbm +5 -0
  115. data/tcl/BWidget-1.8.0/images/new.gif +0 -0
  116. data/tcl/BWidget-1.8.0/images/opcopy.xbm +5 -0
  117. data/tcl/BWidget-1.8.0/images/open.gif +0 -0
  118. data/tcl/BWidget-1.8.0/images/openfold.gif +0 -0
  119. data/tcl/BWidget-1.8.0/images/oplink.xbm +5 -0
  120. data/tcl/BWidget-1.8.0/images/opmove.xbm +5 -0
  121. data/tcl/BWidget-1.8.0/images/overstrike.gif +0 -0
  122. data/tcl/BWidget-1.8.0/images/palette.gif +0 -0
  123. data/tcl/BWidget-1.8.0/images/passwd.gif +0 -0
  124. data/tcl/BWidget-1.8.0/images/paste.gif +0 -0
  125. data/tcl/BWidget-1.8.0/images/plus.xbm +5 -0
  126. data/tcl/BWidget-1.8.0/images/print.gif +0 -0
  127. data/tcl/BWidget-1.8.0/images/question.gif +0 -0
  128. data/tcl/BWidget-1.8.0/images/redo.gif +0 -0
  129. data/tcl/BWidget-1.8.0/images/save.gif +0 -0
  130. data/tcl/BWidget-1.8.0/images/target.xbm +9 -0
  131. data/tcl/BWidget-1.8.0/images/underline.gif +0 -0
  132. data/tcl/BWidget-1.8.0/images/undo.gif +0 -0
  133. data/tcl/BWidget-1.8.0/images/warning.gif +0 -0
  134. data/tcl/BWidget-1.8.0/init.tcl +40 -0
  135. data/tcl/BWidget-1.8.0/label.tcl +271 -0
  136. data/tcl/BWidget-1.8.0/labelentry.tcl +100 -0
  137. data/tcl/BWidget-1.8.0/labelframe.tcl +160 -0
  138. data/tcl/BWidget-1.8.0/lang/da.rc +52 -0
  139. data/tcl/BWidget-1.8.0/lang/de.rc +52 -0
  140. data/tcl/BWidget-1.8.0/lang/en.rc +52 -0
  141. data/tcl/BWidget-1.8.0/lang/es.rc +53 -0
  142. data/tcl/BWidget-1.8.0/lang/fr.rc +52 -0
  143. data/tcl/BWidget-1.8.0/listbox.tcl +1638 -0
  144. data/tcl/BWidget-1.8.0/mainframe.tcl +711 -0
  145. data/tcl/BWidget-1.8.0/messagedlg.tcl +128 -0
  146. data/tcl/BWidget-1.8.0/notebook.tcl +1164 -0
  147. data/tcl/BWidget-1.8.0/pagesmgr.tcl +294 -0
  148. data/tcl/BWidget-1.8.0/panedw.tcl +381 -0
  149. data/tcl/BWidget-1.8.0/panelframe.tcl +246 -0
  150. data/tcl/BWidget-1.8.0/passwddlg.tcl +178 -0
  151. data/tcl/BWidget-1.8.0/pkgIndex.tcl +47 -0
  152. data/tcl/BWidget-1.8.0/progressbar.tcl +208 -0
  153. data/tcl/BWidget-1.8.0/progressdlg.tcl +87 -0
  154. data/tcl/BWidget-1.8.0/scrollframe.tcl +226 -0
  155. data/tcl/BWidget-1.8.0/scrollview.tcl +254 -0
  156. data/tcl/BWidget-1.8.0/scrollw.tcl +280 -0
  157. data/tcl/BWidget-1.8.0/separator.tcl +75 -0
  158. data/tcl/BWidget-1.8.0/spinbox.tcl +331 -0
  159. data/tcl/BWidget-1.8.0/statusbar.tcl +422 -0
  160. data/tcl/BWidget-1.8.0/tests/entry.test +173 -0
  161. data/tcl/BWidget-1.8.0/titleframe.tcl +170 -0
  162. data/tcl/BWidget-1.8.0/tree.tcl +2228 -0
  163. data/tcl/BWidget-1.8.0/utils.tcl +645 -0
  164. data/tcl/BWidget-1.8.0/widget.tcl +1576 -0
  165. data/tcl/BWidget-1.8.0/wizard.tcl +1028 -0
  166. data/tcl/BWidget-1.8.0/xpm2image.tcl +115 -0
  167. metadata +141 -5
@@ -0,0 +1,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
+ }