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.
- data/README +126 -123
- data/arcadia.rb +770 -756
- data/base/a-contracts.rb +130 -93
- data/base/a-ext.rb +280 -280
- data/base/a-libs.rb +5 -11
- data/base/a-utils.rb +235 -44
- data/conf/arcadia.conf +20 -16
- data/conf/arcadia.init.rb +0 -0
- data/conf/arcadia.res.rb +74 -0
- data/ext/ae-complete-code/ae-complete-code.conf +0 -0
- data/ext/ae-complete-code/ae-complete-code.rb +80 -79
- data/ext/ae-debug/ae-debug.conf +0 -0
- data/ext/ae-debug/ae-debug.rb +2 -6
- data/ext/ae-debug/debug1.57.rb +0 -0
- data/ext/ae-doc-code/ae-doc-code.conf +15 -0
- data/ext/ae-doc-code/ae-doc-code.rb +289 -0
- data/ext/ae-editor/ae-editor.conf +17 -8
- data/ext/ae-editor/ae-editor.rb +738 -396
- data/ext/ae-event-log/ae-event-log.conf +0 -0
- data/ext/ae-event-log/ae-event-log.rb +0 -0
- data/ext/ae-file-history/ae-file-history.conf +2 -2
- data/ext/ae-file-history/ae-file-history.rb +286 -290
- data/ext/ae-inspector/ae-inspector.conf +0 -0
- data/ext/ae-inspector/ae-inspector.rb +0 -0
- data/ext/ae-output-event/ae-output-event.conf +2 -2
- data/ext/ae-output/ae-output.conf +2 -2
- data/ext/ae-output/ae-output.rb +173 -178
- data/ext/ae-palette/ae-palette.conf +0 -0
- data/ext/ae-palette/ae-palette.rb +0 -0
- data/ext/ae-shell/ae-shell.conf +0 -0
- data/ext/ae-shell/ae-shell.rb +54 -54
- data/lib/tk/al-tk.rb +3076 -3082
- data/lib/tk/al-tk.res.rb +0 -0
- data/lib/tk/al-tkarcadia.rb +0 -0
- data/lib/tk/al-tkcustom.rb +0 -0
- data/lib/tkext/al-bwidget.rb +0 -0
- data/lib/tkext/al-iwidgets.rb +0 -0
- data/lib/tkext/al-tile.rb +0 -0
- data/lib/tkext/al-tktable.rb +0 -0
- data/tcl/BWidget-1.8.0/BWman/ArrowButton.html +276 -0
- data/tcl/BWidget-1.8.0/BWman/BWidget.html +228 -0
- data/tcl/BWidget-1.8.0/BWman/Button.html +273 -0
- data/tcl/BWidget-1.8.0/BWman/ButtonBox.html +264 -0
- data/tcl/BWidget-1.8.0/BWman/ComboBox.html +402 -0
- data/tcl/BWidget-1.8.0/BWman/Dialog.html +314 -0
- data/tcl/BWidget-1.8.0/BWman/DragSite.html +139 -0
- data/tcl/BWidget-1.8.0/BWman/DropSite.html +254 -0
- data/tcl/BWidget-1.8.0/BWman/DynamicHelp.html +248 -0
- data/tcl/BWidget-1.8.0/BWman/Entry.html +341 -0
- data/tcl/BWidget-1.8.0/BWman/Label.html +331 -0
- data/tcl/BWidget-1.8.0/BWman/LabelEntry.html +194 -0
- data/tcl/BWidget-1.8.0/BWman/LabelFrame.html +144 -0
- data/tcl/BWidget-1.8.0/BWman/ListBox.html +678 -0
- data/tcl/BWidget-1.8.0/BWman/MainFrame.html +283 -0
- data/tcl/BWidget-1.8.0/BWman/MessageDlg.html +218 -0
- data/tcl/BWidget-1.8.0/BWman/NoteBook.html +374 -0
- data/tcl/BWidget-1.8.0/BWman/PagesManager.html +180 -0
- data/tcl/BWidget-1.8.0/BWman/PanedWindow.html +142 -0
- data/tcl/BWidget-1.8.0/BWman/PanelFrame.html +153 -0
- data/tcl/BWidget-1.8.0/BWman/PasswdDlg.html +214 -0
- data/tcl/BWidget-1.8.0/BWman/ProgressBar.html +152 -0
- data/tcl/BWidget-1.8.0/BWman/ProgressDlg.html +145 -0
- data/tcl/BWidget-1.8.0/BWman/ScrollView.html +130 -0
- data/tcl/BWidget-1.8.0/BWman/ScrollableFrame.html +191 -0
- data/tcl/BWidget-1.8.0/BWman/ScrolledWindow.html +116 -0
- data/tcl/BWidget-1.8.0/BWman/SelectColor.html +164 -0
- data/tcl/BWidget-1.8.0/BWman/SelectFont.html +152 -0
- data/tcl/BWidget-1.8.0/BWman/Separator.html +77 -0
- data/tcl/BWidget-1.8.0/BWman/SpinBox.html +250 -0
- data/tcl/BWidget-1.8.0/BWman/StatusBar.html +147 -0
- data/tcl/BWidget-1.8.0/BWman/TitleFrame.html +107 -0
- data/tcl/BWidget-1.8.0/BWman/Tree.html +947 -0
- data/tcl/BWidget-1.8.0/BWman/Widget.html +502 -0
- data/tcl/BWidget-1.8.0/BWman/contents.html +84 -0
- data/tcl/BWidget-1.8.0/BWman/index.html +7 -0
- data/tcl/BWidget-1.8.0/BWman/navtree.html +41 -0
- data/tcl/BWidget-1.8.0/BWman/options.htm +458 -0
- data/tcl/BWidget-1.8.0/CHANGES.txt +266 -0
- data/tcl/BWidget-1.8.0/ChangeLog +1641 -0
- data/tcl/BWidget-1.8.0/LICENSE.txt +41 -0
- data/tcl/BWidget-1.8.0/README.txt +127 -0
- data/tcl/BWidget-1.8.0/arrow.tcl +551 -0
- data/tcl/BWidget-1.8.0/bitmap.tcl +94 -0
- data/tcl/BWidget-1.8.0/button.tcl +324 -0
- data/tcl/BWidget-1.8.0/buttonbox.tcl +403 -0
- data/tcl/BWidget-1.8.0/color.tcl +493 -0
- data/tcl/BWidget-1.8.0/combobox.tcl +809 -0
- data/tcl/BWidget-1.8.0/demo/basic.tcl +199 -0
- data/tcl/BWidget-1.8.0/demo/bwidget.xbm +46 -0
- data/tcl/BWidget-1.8.0/demo/demo.tcl +212 -0
- data/tcl/BWidget-1.8.0/demo/dnd.tcl +42 -0
- data/tcl/BWidget-1.8.0/demo/manager.tcl +141 -0
- data/tcl/BWidget-1.8.0/demo/select.tcl +59 -0
- data/tcl/BWidget-1.8.0/demo/tmpldlg.tcl +214 -0
- data/tcl/BWidget-1.8.0/demo/tree.tcl +260 -0
- data/tcl/BWidget-1.8.0/demo/x1.xbm +2258 -0
- data/tcl/BWidget-1.8.0/dialog.tcl +345 -0
- data/tcl/BWidget-1.8.0/dragsite.tcl +197 -0
- data/tcl/BWidget-1.8.0/dropsite.tcl +455 -0
- data/tcl/BWidget-1.8.0/dynhelp.tcl +625 -0
- data/tcl/BWidget-1.8.0/entry.tcl +469 -0
- data/tcl/BWidget-1.8.0/font.tcl +566 -0
- data/tcl/BWidget-1.8.0/images/bold.gif +0 -0
- data/tcl/BWidget-1.8.0/images/copy.gif +0 -0
- data/tcl/BWidget-1.8.0/images/cut.gif +0 -0
- data/tcl/BWidget-1.8.0/images/dragfile.gif +0 -0
- data/tcl/BWidget-1.8.0/images/dragicon.gif +0 -0
- data/tcl/BWidget-1.8.0/images/error.gif +0 -0
- data/tcl/BWidget-1.8.0/images/file.gif +0 -0
- data/tcl/BWidget-1.8.0/images/folder.gif +0 -0
- data/tcl/BWidget-1.8.0/images/hourglass.gif +0 -0
- data/tcl/BWidget-1.8.0/images/info.gif +0 -0
- data/tcl/BWidget-1.8.0/images/italic.gif +0 -0
- data/tcl/BWidget-1.8.0/images/minus.xbm +5 -0
- data/tcl/BWidget-1.8.0/images/new.gif +0 -0
- data/tcl/BWidget-1.8.0/images/opcopy.xbm +5 -0
- data/tcl/BWidget-1.8.0/images/open.gif +0 -0
- data/tcl/BWidget-1.8.0/images/openfold.gif +0 -0
- data/tcl/BWidget-1.8.0/images/oplink.xbm +5 -0
- data/tcl/BWidget-1.8.0/images/opmove.xbm +5 -0
- data/tcl/BWidget-1.8.0/images/overstrike.gif +0 -0
- data/tcl/BWidget-1.8.0/images/palette.gif +0 -0
- data/tcl/BWidget-1.8.0/images/passwd.gif +0 -0
- data/tcl/BWidget-1.8.0/images/paste.gif +0 -0
- data/tcl/BWidget-1.8.0/images/plus.xbm +5 -0
- data/tcl/BWidget-1.8.0/images/print.gif +0 -0
- data/tcl/BWidget-1.8.0/images/question.gif +0 -0
- data/tcl/BWidget-1.8.0/images/redo.gif +0 -0
- data/tcl/BWidget-1.8.0/images/save.gif +0 -0
- data/tcl/BWidget-1.8.0/images/target.xbm +9 -0
- data/tcl/BWidget-1.8.0/images/underline.gif +0 -0
- data/tcl/BWidget-1.8.0/images/undo.gif +0 -0
- data/tcl/BWidget-1.8.0/images/warning.gif +0 -0
- data/tcl/BWidget-1.8.0/init.tcl +40 -0
- data/tcl/BWidget-1.8.0/label.tcl +271 -0
- data/tcl/BWidget-1.8.0/labelentry.tcl +100 -0
- data/tcl/BWidget-1.8.0/labelframe.tcl +160 -0
- data/tcl/BWidget-1.8.0/lang/da.rc +52 -0
- data/tcl/BWidget-1.8.0/lang/de.rc +52 -0
- data/tcl/BWidget-1.8.0/lang/en.rc +52 -0
- data/tcl/BWidget-1.8.0/lang/es.rc +53 -0
- data/tcl/BWidget-1.8.0/lang/fr.rc +52 -0
- data/tcl/BWidget-1.8.0/listbox.tcl +1638 -0
- data/tcl/BWidget-1.8.0/mainframe.tcl +711 -0
- data/tcl/BWidget-1.8.0/messagedlg.tcl +128 -0
- data/tcl/BWidget-1.8.0/notebook.tcl +1164 -0
- data/tcl/BWidget-1.8.0/pagesmgr.tcl +294 -0
- data/tcl/BWidget-1.8.0/panedw.tcl +381 -0
- data/tcl/BWidget-1.8.0/panelframe.tcl +246 -0
- data/tcl/BWidget-1.8.0/passwddlg.tcl +178 -0
- data/tcl/BWidget-1.8.0/pkgIndex.tcl +47 -0
- data/tcl/BWidget-1.8.0/progressbar.tcl +208 -0
- data/tcl/BWidget-1.8.0/progressdlg.tcl +87 -0
- data/tcl/BWidget-1.8.0/scrollframe.tcl +226 -0
- data/tcl/BWidget-1.8.0/scrollview.tcl +254 -0
- data/tcl/BWidget-1.8.0/scrollw.tcl +280 -0
- data/tcl/BWidget-1.8.0/separator.tcl +75 -0
- data/tcl/BWidget-1.8.0/spinbox.tcl +331 -0
- data/tcl/BWidget-1.8.0/statusbar.tcl +422 -0
- data/tcl/BWidget-1.8.0/tests/entry.test +173 -0
- data/tcl/BWidget-1.8.0/titleframe.tcl +170 -0
- data/tcl/BWidget-1.8.0/tree.tcl +2228 -0
- data/tcl/BWidget-1.8.0/utils.tcl +645 -0
- data/tcl/BWidget-1.8.0/widget.tcl +1576 -0
- data/tcl/BWidget-1.8.0/wizard.tcl +1028 -0
- data/tcl/BWidget-1.8.0/xpm2image.tcl +115 -0
- 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
|
+
}
|