~ubuntu-branches/ubuntu/gutsy/amsn/gutsy

« back to all changes in this revision

Viewing changes to plugins/BWidget-1.7.0/pagesmgr.tcl

  • Committer: Bazaar Package Importer
  • Author(s): Theodore Karkoulis
  • Date: 2006-01-04 15:26:02 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20060104152602-ipe1yg00rl3nlklv
Tags: 0.95-1
New Upstream Release (closes: #345052, #278575).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# ------------------------------------------------------------------------------
2
 
#  pagesmgr.tcl
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
 
# ------------------------------------------------------------------------------
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
 
}