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,254 @@
1
+ # ------------------------------------------------------------------------------
2
+ # scrollview.tcl
3
+ # This file is part of Unifix BWidget Toolkit
4
+ # $Id: scrollview.tcl,v 1.7 2003/11/05 18:04:29 hobbs Exp $
5
+ # ------------------------------------------------------------------------------
6
+ # Index of commands:
7
+ # - ScrolledWindow::create
8
+ # - ScrolledWindow::configure
9
+ # - ScrolledWindow::cget
10
+ # - ScrolledWindow::_set_hscroll
11
+ # - ScrolledWindow::_set_vscroll
12
+ # - ScrolledWindow::_update_scroll
13
+ # - ScrolledWindow::_set_view
14
+ # - ScrolledWindow::_resize
15
+ # ------------------------------------------------------------------------------
16
+
17
+ namespace eval ScrollView {
18
+ Widget::define ScrollView scrollview
19
+
20
+ Widget::tkinclude ScrollView canvas :cmd \
21
+ include {-relief -borderwidth -background -width -height -cursor} \
22
+ initialize {-relief flat -borderwidth 0 -width 30 -height 30 \
23
+ -cursor crosshair}
24
+
25
+ Widget::declare ScrollView {
26
+ {-width TkResource 30 0 canvas}
27
+ {-height TkResource 30 0 canvas}
28
+ {-background TkResource "" 0 canvas}
29
+ {-foreground String black 0}
30
+ {-fill String "" 0}
31
+ {-relief TkResource flat 0 canvas}
32
+ {-borderwidth TkResource 0 0 canvas}
33
+ {-cursor TkResource crosshair 0 canvas}
34
+ {-window String "" 0}
35
+ {-fg Synonym -foreground}
36
+ {-bg Synonym -background}
37
+ {-bd Synonym -borderwidth}
38
+ }
39
+
40
+ bind BwScrollView <B1-Motion> [list ScrollView::_set_view %W motion %x %y]
41
+ bind BwScrollView <ButtonPress-1> [list ScrollView::_set_view %W set %x %y]
42
+ bind BwScrollView <Configure> [list ScrollView::_resize %W]
43
+ bind BwScrollView <Destroy> [list ScrollView::_destroy %W]
44
+ }
45
+
46
+
47
+ # ------------------------------------------------------------------------------
48
+ # Command ScrollView::create
49
+ # ------------------------------------------------------------------------------
50
+ proc ScrollView::create { path args } {
51
+ Widget::init ScrollView $path $args
52
+ eval [list canvas $path] [Widget::subcget $path :cmd] -highlightthickness 0
53
+
54
+ Widget::create ScrollView $path
55
+
56
+ Widget::getVariable $path _widget
57
+
58
+ set w [Widget::cget $path -window]
59
+ set _widget(bd) [Widget::cget $path -borderwidth]
60
+ set _widget(width) [Widget::cget $path -width]
61
+ set _widget(height) [Widget::cget $path -height]
62
+
63
+ if {[winfo exists $w]} {
64
+ set _widget(oldxscroll) [$w cget -xscrollcommand]
65
+ set _widget(oldyscroll) [$w cget -yscrollcommand]
66
+ $w configure \
67
+ -xscrollcommand [list ScrollView::_set_hscroll $path] \
68
+ -yscrollcommand [list ScrollView::_set_vscroll $path]
69
+ }
70
+ $path:cmd create rectangle -2 -2 -2 -2 \
71
+ -fill [Widget::cget $path -fill] \
72
+ -outline [Widget::cget $path -foreground] \
73
+ -tags view
74
+
75
+ bindtags $path [list $path BwScrollView [winfo toplevel $path] all]
76
+
77
+ return $path
78
+ }
79
+
80
+
81
+ # ------------------------------------------------------------------------------
82
+ # Command ScrollView::configure
83
+ # ------------------------------------------------------------------------------
84
+ proc ScrollView::configure { path args } {
85
+ Widget::getVariable $path _widget
86
+
87
+ set oldw [Widget::getoption $path -window]
88
+ set res [Widget::configure $path $args]
89
+
90
+ if { [Widget::hasChanged $path -window w] } {
91
+ if { [winfo exists $oldw] } {
92
+ $oldw configure \
93
+ -xscrollcommand $_widget(oldxscroll) \
94
+ -yscrollcommand $_widget(oldyscroll)
95
+ }
96
+ if { [winfo exists $w] } {
97
+ set _widget(oldxscroll) [$w cget -xscrollcommand]
98
+ set _widget(oldyscroll) [$w cget -yscrollcommand]
99
+ $w configure \
100
+ -xscrollcommand [list ScrollView::_set_hscroll $path] \
101
+ -yscrollcommand [list ScrollView::_set_vscroll $path]
102
+ } else {
103
+ $path:cmd coords view -2 -2 -2 -2
104
+ set _widget(oldxscroll) {}
105
+ set _widget(oldyscroll) {}
106
+ }
107
+ }
108
+
109
+ if { [Widget::hasChanged $path -fill fill] |
110
+ [Widget::hasChanged $path -foreground fg] } {
111
+ $path:cmd itemconfigure view \
112
+ -fill $fill \
113
+ -outline $fg
114
+ }
115
+
116
+ return $res
117
+ }
118
+
119
+
120
+ # ------------------------------------------------------------------------------
121
+ # Command ScrollView::cget
122
+ # ------------------------------------------------------------------------------
123
+ proc ScrollView::cget { path option } {
124
+ return [Widget::cget $path $option]
125
+ }
126
+
127
+
128
+ # ------------------------------------------------------------------------------
129
+ # Command ScrollView::_set_hscroll
130
+ # ------------------------------------------------------------------------------
131
+ proc ScrollView::_set_hscroll { path vmin vmax } {
132
+ Widget::getVariable $path _widget
133
+
134
+ set c [$path:cmd coords view]
135
+ set x0 [expr {$vmin*$_widget(width)+$_widget(bd)}]
136
+ set x1 [expr {$vmax*$_widget(width)+$_widget(bd)-1}]
137
+ $path:cmd coords view $x0 [lindex $c 1] $x1 [lindex $c 3]
138
+ if { $_widget(oldxscroll) != "" } {
139
+ uplevel \#0 $_widget(oldxscroll) $vmin $vmax
140
+ }
141
+ }
142
+
143
+
144
+ # ------------------------------------------------------------------------------
145
+ # Command ScrollView::_set_vscroll
146
+ # ------------------------------------------------------------------------------
147
+ proc ScrollView::_set_vscroll { path vmin vmax } {
148
+ Widget::getVariable $path _widget
149
+
150
+ set c [$path:cmd coords view]
151
+ set y0 [expr {$vmin*$_widget(height)+$_widget(bd)}]
152
+ set y1 [expr {$vmax*$_widget(height)+$_widget(bd)-1}]
153
+ $path:cmd coords view [lindex $c 0] $y0 [lindex $c 2] $y1
154
+ if { $_widget(oldyscroll) != "" } {
155
+ uplevel \#0 $_widget(oldyscroll) $vmin $vmax
156
+ }
157
+ }
158
+
159
+
160
+ # ------------------------------------------------------------------------------
161
+ # Command ScrollView::_update_scroll
162
+ # ------------------------------------------------------------------------------
163
+ proc ScrollView::_update_scroll { path callscroll hminmax vminmax } {
164
+ Widget::getVariable $path _widget
165
+
166
+ set c [$path:cmd coords view]
167
+ set hmin [lindex $hminmax 0]
168
+ set hmax [lindex $hminmax 1]
169
+ set vmin [lindex $vminmax 0]
170
+ set vmax [lindex $vminmax 1]
171
+ set x0 [expr {$hmin*$_widget(width)+$_widget(bd)}]
172
+ set x1 [expr {$hmax*$_widget(width)+$_widget(bd)-1}]
173
+ set y0 [expr {$vmin*$_widget(height)+$_widget(bd)}]
174
+ set y1 [expr {$vmax*$_widget(height)+$_widget(bd)-1}]
175
+ $path:cmd coords view $x0 $y0 $x1 $y1
176
+ if { $callscroll } {
177
+ if { $_widget(oldxscroll) != "" } {
178
+ uplevel \#0 $_widget(oldxscroll) $hmin $hmax
179
+ }
180
+ if { $_widget(oldyscroll) != "" } {
181
+ uplevel \#0 $_widget(oldyscroll) $vmin $vmax
182
+ }
183
+ }
184
+ }
185
+
186
+
187
+ # ------------------------------------------------------------------------------
188
+ # Command ScrollView::_set_view
189
+ # ------------------------------------------------------------------------------
190
+ proc ScrollView::_set_view { path cmd x y } {
191
+ Widget::getVariable $path _widget
192
+
193
+ set w [Widget::getoption $path -window]
194
+ if {[winfo exists $w]} {
195
+ if {[string equal $cmd "set"]} {
196
+ set c [$path:cmd coords view]
197
+ set x0 [lindex $c 0]
198
+ set y0 [lindex $c 1]
199
+ set x1 [lindex $c 2]
200
+ set y1 [lindex $c 3]
201
+ if {$x >= $x0 && $x <= $x1 &&
202
+ $y >= $y0 && $y <= $y1} {
203
+ set _widget(dx) [expr {$x-$x0}]
204
+ set _widget(dy) [expr {$y-$y0}]
205
+ return
206
+ } else {
207
+ set x0 [expr {$x-($x1-$x0)/2}]
208
+ set y0 [expr {$y-($y1-$y0)/2}]
209
+ set _widget(dx) [expr {$x-$x0}]
210
+ set _widget(dy) [expr {$y-$y0}]
211
+ set vh [expr {double($x0-$_widget(bd))/$_widget(width)}]
212
+ set vv [expr {double($y0-$_widget(bd))/$_widget(height)}]
213
+ }
214
+ } elseif {[string equal $cmd "motion"]} {
215
+ set vh [expr {double($x-$_widget(dx)-$_widget(bd))/$_widget(width)}]
216
+ set vv [expr {double($y-$_widget(dy)-$_widget(bd))/$_widget(height)}]
217
+ }
218
+ $w xview moveto $vh
219
+ $w yview moveto $vv
220
+ _update_scroll $path 1 [$w xview] [$w yview]
221
+ }
222
+ }
223
+
224
+
225
+ # ------------------------------------------------------------------------------
226
+ # Command ScrollView::_resize
227
+ # ------------------------------------------------------------------------------
228
+ proc ScrollView::_resize { path } {
229
+ Widget::getVariable $path _widget
230
+
231
+ set _widget(bd) [Widget::getoption $path -borderwidth]
232
+ set _widget(width) [expr {[winfo width $path]-2*$_widget(bd)}]
233
+ set _widget(height) [expr {[winfo height $path]-2*$_widget(bd)}]
234
+ set w [Widget::getoption $path -window]
235
+ if { [winfo exists $w] } {
236
+ _update_scroll $path 0 [$w xview] [$w yview]
237
+ }
238
+ }
239
+
240
+
241
+ # ------------------------------------------------------------------------------
242
+ # Command ScrollView::_destroy
243
+ # ------------------------------------------------------------------------------
244
+ proc ScrollView::_destroy { path } {
245
+ Widget::getVariable $path _widget
246
+
247
+ set w [Widget::getoption $path -window]
248
+ if { [winfo exists $w] } {
249
+ $w configure \
250
+ -xscrollcommand $_widget(oldxscroll) \
251
+ -yscrollcommand $_widget(oldyscroll)
252
+ }
253
+ Widget::destroy $path
254
+ }
@@ -0,0 +1,280 @@
1
+ # -----------------------------------------------------------------------------
2
+ # scrollw.tcl
3
+ # This file is part of Unifix BWidget Toolkit
4
+ # $Id: scrollw.tcl,v 1.12 2006/08/21 20:54:14 dev_null42a Exp $
5
+ # -----------------------------------------------------------------------------
6
+ # Index of commands:
7
+ # - ScrolledWindow::create
8
+ # - ScrolledWindow::getframe
9
+ # - ScrolledWindow::setwidget
10
+ # - ScrolledWindow::configure
11
+ # - ScrolledWindow::cget
12
+ # - ScrolledWindow::_set_hframe
13
+ # - ScrolledWindow::_set_vscroll
14
+ # - ScrolledWindow::_setData
15
+ # - ScrolledWindow::_setSBSize
16
+ # - ScrolledWindow::_realize
17
+ # -----------------------------------------------------------------------------
18
+
19
+ namespace eval ScrolledWindow {
20
+ Widget::define ScrolledWindow scrollw
21
+
22
+ Widget::declare ScrolledWindow {
23
+ {-background TkResource "" 0 button}
24
+ {-scrollbar Enum both 0 {none both vertical horizontal}}
25
+ {-auto Enum both 0 {none both vertical horizontal}}
26
+ {-sides Enum se 0 {ne en nw wn se es sw ws}}
27
+ {-size Int 0 1 "%d >= 0"}
28
+ {-ipad Int 1 1 "%d >= 0"}
29
+ {-managed Boolean 1 1}
30
+ {-relief TkResource flat 0 frame}
31
+ {-borderwidth TkResource 0 0 frame}
32
+ {-bg Synonym -background}
33
+ {-bd Synonym -borderwidth}
34
+ }
35
+
36
+ Widget::addmap ScrolledWindow "" :cmd {-relief {} -borderwidth {}}
37
+ }
38
+
39
+
40
+ # -----------------------------------------------------------------------------
41
+ # Command ScrolledWindow::create
42
+ # -----------------------------------------------------------------------------
43
+ proc ScrolledWindow::create { path args } {
44
+ Widget::init ScrolledWindow $path $args
45
+
46
+ Widget::getVariable $path data
47
+
48
+ set bg [Widget::cget $path -background]
49
+ set sbsize [Widget::cget $path -size]
50
+ set sw [eval [list frame $path \
51
+ -relief flat -borderwidth 0 -background $bg \
52
+ -highlightthickness 0 -takefocus 0] \
53
+ [Widget::subcget $path :cmd]]
54
+
55
+ scrollbar $path.hscroll \
56
+ -highlightthickness 0 -takefocus 0 \
57
+ -orient horiz \
58
+ -relief sunken \
59
+ -bg $bg
60
+ scrollbar $path.vscroll \
61
+ -highlightthickness 0 -takefocus 0 \
62
+ -orient vert \
63
+ -relief sunken \
64
+ -bg $bg
65
+
66
+ set data(realized) 0
67
+
68
+ _setData $path \
69
+ [Widget::cget $path -scrollbar] \
70
+ [Widget::cget $path -auto] \
71
+ [Widget::cget $path -sides]
72
+
73
+ if {[Widget::cget $path -managed]} {
74
+ set data(hsb,packed) $data(hsb,present)
75
+ set data(vsb,packed) $data(vsb,present)
76
+ } else {
77
+ set data(hsb,packed) 0
78
+ set data(vsb,packed) 0
79
+ }
80
+ if {$sbsize} {
81
+ $path.vscroll configure -width $sbsize
82
+ $path.hscroll configure -width $sbsize
83
+ } else {
84
+ set sbsize [$path.vscroll cget -width]
85
+ }
86
+ set data(ipad) [Widget::cget $path -ipad]
87
+
88
+ if {$data(hsb,packed)} {
89
+ grid $path.hscroll -column 1 -row $data(hsb,row) \
90
+ -sticky ew -ipady $data(ipad)
91
+ }
92
+ if {$data(vsb,packed)} {
93
+ grid $path.vscroll -column $data(vsb,column) -row 1 \
94
+ -sticky ns -ipadx $data(ipad)
95
+ }
96
+
97
+ grid columnconfigure $path 1 -weight 1
98
+ grid rowconfigure $path 1 -weight 1
99
+
100
+ bind $path <Configure> [list ScrolledWindow::_realize $path]
101
+ bind $path <Destroy> [list ScrolledWindow::_destroy $path]
102
+
103
+ return [Widget::create ScrolledWindow $path]
104
+ }
105
+
106
+
107
+ # -----------------------------------------------------------------------------
108
+ # Command ScrolledWindow::getframe
109
+ # -----------------------------------------------------------------------------
110
+ proc ScrolledWindow::getframe { path } {
111
+ return $path
112
+ }
113
+
114
+
115
+ # -----------------------------------------------------------------------------
116
+ # Command ScrolledWindow::setwidget
117
+ # -----------------------------------------------------------------------------
118
+ proc ScrolledWindow::setwidget { path widget } {
119
+ Widget::getVariable $path data
120
+
121
+ if {[info exists data(widget)] && [winfo exists $data(widget)]
122
+ && ![string equal $data(widget) $widget]} {
123
+ grid remove $data(widget)
124
+ $data(widget) configure -xscrollcommand "" -yscrollcommand ""
125
+ }
126
+ set data(widget) $widget
127
+ grid $widget -in $path -row 1 -column 1 -sticky news
128
+
129
+ $path.hscroll configure -command [list $widget xview]
130
+ $path.vscroll configure -command [list $widget yview]
131
+ $widget configure \
132
+ -xscrollcommand [list ScrolledWindow::_set_hscroll $path] \
133
+ -yscrollcommand [list ScrolledWindow::_set_vscroll $path]
134
+ }
135
+
136
+
137
+ # -----------------------------------------------------------------------------
138
+ # Command ScrolledWindow::configure
139
+ # -----------------------------------------------------------------------------
140
+ proc ScrolledWindow::configure { path args } {
141
+ Widget::getVariable $path data
142
+
143
+ set res [Widget::configure $path $args]
144
+ if { [Widget::hasChanged $path -background bg] } {
145
+ $path configure -background $bg
146
+ catch {$path.hscroll configure -background $bg}
147
+ catch {$path.vscroll configure -background $bg}
148
+ }
149
+
150
+ if {[Widget::hasChanged $path -scrollbar scrollbar] | \
151
+ [Widget::hasChanged $path -auto auto] | \
152
+ [Widget::hasChanged $path -sides sides]} {
153
+ _setData $path $scrollbar $auto $sides
154
+ foreach {vmin vmax} [$path.hscroll get] { break }
155
+ set data(hsb,packed) [expr {$data(hsb,present) && \
156
+ (!$data(hsb,auto) || ($vmin != 0 || $vmax != 1))}]
157
+ foreach {vmin vmax} [$path.vscroll get] { break }
158
+ set data(vsb,packed) [expr {$data(vsb,present) && \
159
+ (!$data(vsb,auto) || ($vmin != 0 || $vmax != 1))}]
160
+
161
+ set data(ipad) [Widget::cget $path -ipad]
162
+
163
+ if {$data(hsb,packed)} {
164
+ grid $path.hscroll -column 1 -row $data(hsb,row) \
165
+ -sticky ew -ipady $data(ipad)
166
+ } else {
167
+ if {![info exists data(hlock)]} {
168
+ set data(hsb,packed) 0
169
+ grid remove $path.hscroll
170
+ }
171
+ }
172
+ if {$data(vsb,packed)} {
173
+ grid $path.vscroll -column $data(vsb,column) -row 1 \
174
+ -sticky ns -ipadx $data(ipad)
175
+ } else {
176
+ if {![info exists data(hlock)]} {
177
+ set data(vsb,packed) 0
178
+ grid remove $path.vscroll
179
+ }
180
+ }
181
+ }
182
+ return $res
183
+ }
184
+
185
+
186
+ # -----------------------------------------------------------------------------
187
+ # Command ScrolledWindow::cget
188
+ # -----------------------------------------------------------------------------
189
+ proc ScrolledWindow::cget { path option } {
190
+ return [Widget::cget $path $option]
191
+ }
192
+
193
+
194
+ # -----------------------------------------------------------------------------
195
+ # Command ScrolledWindow::_set_hscroll
196
+ # -----------------------------------------------------------------------------
197
+ proc ScrolledWindow::_set_hscroll { path vmin vmax } {
198
+ Widget::getVariable $path data
199
+
200
+ if {$data(realized) && $data(hsb,present)} {
201
+ if {$data(hsb,auto)} {
202
+ if {$data(hsb,packed) && $vmin == 0 && $vmax == 1} {
203
+ if {![info exists data(hlock)]} {
204
+ set data(hsb,packed) 0
205
+ grid remove $path.hscroll
206
+ }
207
+ } elseif {!$data(hsb,packed) && ($vmin != 0 || $vmax != 1)} {
208
+ set data(hsb,packed) 1
209
+ grid $path.hscroll -column 1 -row $data(hsb,row) \
210
+ -sticky ew -ipady $data(ipad)
211
+ set data(hlock) 1
212
+ update idletasks
213
+ unset data(hlock)
214
+ }
215
+ }
216
+ $path.hscroll set $vmin $vmax
217
+ }
218
+ }
219
+
220
+
221
+ # -----------------------------------------------------------------------------
222
+ # Command ScrolledWindow::_set_vscroll
223
+ # -----------------------------------------------------------------------------
224
+ proc ScrolledWindow::_set_vscroll { path vmin vmax } {
225
+ Widget::getVariable $path data
226
+
227
+ if {$data(realized) && $data(vsb,present)} {
228
+ if {$data(vsb,auto)} {
229
+ if {$data(vsb,packed) && $vmin == 0 && $vmax == 1} {
230
+ if {![info exists data(vlock)]} {
231
+ set data(vsb,packed) 0
232
+ grid remove $path.vscroll
233
+ }
234
+ } elseif {!$data(vsb,packed) && ($vmin != 0 || $vmax != 1) } {
235
+ set data(vsb,packed) 1
236
+ grid $path.vscroll -column $data(vsb,column) -row 1 \
237
+ -sticky ns -ipadx $data(ipad)
238
+ set data(vlock) 1
239
+ update idletasks
240
+ unset data(vlock)
241
+ }
242
+ }
243
+ $path.vscroll set $vmin $vmax
244
+ }
245
+ }
246
+
247
+
248
+ proc ScrolledWindow::_setData {path scrollbar auto sides} {
249
+ Widget::getVariable $path data
250
+
251
+ set sb [lsearch {none horizontal vertical both} $scrollbar]
252
+ set auto [lsearch {none horizontal vertical both} $auto]
253
+
254
+ set data(hsb,present) [expr {($sb & 1) != 0}]
255
+ set data(hsb,auto) [expr {($auto & 1) != 0}]
256
+ set data(hsb,row) [expr {[string match *n* $sides] ? 0 : 2}]
257
+
258
+ set data(vsb,present) [expr {($sb & 2) != 0}]
259
+ set data(vsb,auto) [expr {($auto & 2) != 0}]
260
+ set data(vsb,column) [expr {[string match *w* $sides] ? 0 : 2}]
261
+ }
262
+
263
+
264
+ # -----------------------------------------------------------------------------
265
+ # Command ScrolledWindow::_realize
266
+ # -----------------------------------------------------------------------------
267
+ proc ScrolledWindow::_realize { path } {
268
+ Widget::getVariable $path data
269
+
270
+ bind $path <Configure> {}
271
+ set data(realized) 1
272
+ }
273
+
274
+
275
+ # -----------------------------------------------------------------------------
276
+ # Command ScrolledWindow::_destroy
277
+ # -----------------------------------------------------------------------------
278
+ proc ScrolledWindow::_destroy { path } {
279
+ Widget::destroy $path
280
+ }