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