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,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
+ }