1
# ------------------------------------------------------------------------------
3
# This file is part of Unifix BWidget Toolkit
4
# $Id: pagesmgr.tcl,v 1.1 2004/03/04 00:47:28 airadier Exp $
5
# ------------------------------------------------------------------------------
7
# - PagesManager::create
8
# - PagesManager::configure
10
# - PagesManager::compute_size
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
25
namespace eval PagesManager {
26
Widget::define PagesManager pagesmgr
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"}
35
Widget::addmap PagesManager "" :cmd { -width {} -height {} -cursor {} }
39
# ------------------------------------------------------------------------------
40
# Command PagesManager::create
41
# ------------------------------------------------------------------------------
42
proc PagesManager::create { path args } {
46
Widget::init PagesManager $path $args
53
# --- creation du canvas -----------------------------------------------------------------
54
eval canvas $path -relief flat -bd 0 -highlightthickness 0 \
55
[Widget::subcget $path :cmd]
57
bind $path <Configure> [list PagesManager::_realize $path]
58
bind $path <Destroy> [list PagesManager::_destroy $path]
60
return [Widget::create PagesManager $path]
64
# ------------------------------------------------------------------------------
65
# Command PagesManager::configure
66
# ------------------------------------------------------------------------------
67
proc PagesManager::configure { path args } {
68
return [Widget::configure $path $args]
72
# ------------------------------------------------------------------------------
73
# Command PagesManager::cget
74
# ------------------------------------------------------------------------------
75
proc PagesManager::cget { path option } {
76
return [Widget::cget $path $option]
80
# ------------------------------------------------------------------------------
81
# Command PagesManager::compute_size
82
# ------------------------------------------------------------------------------
83
proc PagesManager::compute_size { path } {
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}]
96
configure $path -width $wmax -height $hmax
100
# ------------------------------------------------------------------------------
101
# Command PagesManager::add
102
# ------------------------------------------------------------------------------
103
proc PagesManager::add { path page } {
107
if { [lsearch -exact $data(pages) $page] != -1 } {
108
return -code error "page \"$page\" already exists"
111
lappend data(pages) $page
113
frame $path.f$page -relief flat \
114
-background [Widget::cget $path -background] -borderwidth 0
120
# ------------------------------------------------------------------------------
121
# Command PagesManager::delete
122
# ------------------------------------------------------------------------------
123
proc PagesManager::delete { path page } {
127
set pos [_test_page $path $page]
128
set data(pages) [lreplace $data(pages) $pos $pos]
129
if { $data(select) == $page } {
137
# ------------------------------------------------------------------------------
138
# Command PagesManager::raise
139
# ------------------------------------------------------------------------------
140
proc PagesManager::raise { path {page ""} } {
145
_test_page $path $page
152
# ------------------------------------------------------------------------------
153
# Command PagesManager::page - deprecated, use pages
154
# ------------------------------------------------------------------------------
155
proc PagesManager::page { path first {last ""} } {
160
return [lindex $data(pages) $first]
162
return [lrange $data(pages) $first $last]
167
# ------------------------------------------------------------------------------
168
# Command PagesManager::pages
169
# ------------------------------------------------------------------------------
170
proc PagesManager::pages { path {first ""} {last ""} } {
174
if { ![string length $first] } {
178
if { ![string length $last] } {
179
return [lindex $data(pages) $first]
181
return [lrange $data(pages) $first $last]
186
# ------------------------------------------------------------------------------
187
# Command PagesManager::getframe
188
# ------------------------------------------------------------------------------
189
proc PagesManager::getframe { path page } {
194
# ------------------------------------------------------------------------------
195
# Command PagesManager::_test_page
196
# ------------------------------------------------------------------------------
197
proc PagesManager::_test_page { path page } {
201
if { [set pos [lsearch $data(pages) $page]] == -1 } {
202
return -code error "page \"$page\" does not exists"
208
# ------------------------------------------------------------------------------
209
# Command PagesManager::_select
210
# ------------------------------------------------------------------------------
211
proc PagesManager::_select { path page } {
215
set oldsel $data(select)
216
if { $page != $oldsel } {
217
set data(select) $page
223
# ------------------------------------------------------------------------------
224
# Command PagesManager::_redraw
225
# ------------------------------------------------------------------------------
226
proc PagesManager::_redraw { path } {
230
if { !$data(realized) } {
237
# ------------------------------------------------------------------------------
238
# Command PagesManager::_draw_area
239
# ------------------------------------------------------------------------------
240
proc PagesManager::_draw_area { path } {
244
set w [winfo width $path]
245
set h [winfo height $path]
246
set sel $data(select)
248
if { [llength [$path:cmd find withtag "window"]] } {
249
$path:cmd coords "window" 0 0
250
$path:cmd itemconfigure "window" \
255
$path:cmd create window 0 0 \
263
$path:cmd delete "window"
268
# ------------------------------------------------------------------------------
269
# Command PagesManager::_realize
270
# ------------------------------------------------------------------------------
271
proc PagesManager::_realize { path } {
275
if { [set width [Widget::cget $path -width]] == 0 ||
276
[set height [Widget::cget $path -height]] == 0 } {
282
bind $path <Configure> [list PagesManager::_draw_area $path]
286
# ------------------------------------------------------------------------------
287
# Command PagesManager::_destroy
288
# ------------------------------------------------------------------------------
289
proc PagesManager::_destroy { path } {
292
Widget::destroy $path