source: trunk/BWidget-1.2.1/dialog.tcl

Last change on this file was 931, checked in by toby, 11 years ago

include rest of files

File size: 9.4 KB
Line 
1# ------------------------------------------------------------------------------
2#  dialog.tcl
3#  This file is part of Unifix BWidget Toolkit
4#  $Id: dialog.tcl,v 1.6 1999/07/09 08:10:28 eric Exp $
5# ------------------------------------------------------------------------------
6#  Index of commands:
7#     - Dialog::create
8#     - Dialog::configure
9#     - Dialog::cget
10#     - Dialog::getframe
11#     - Dialog::add
12#     - Dialog::itemconfigure
13#     - Dialog::itemcget
14#     - Dialog::invoke
15#     - Dialog::setfocus
16#     - Dialog::enddialog
17#     - Dialog::draw
18#     - Dialog::withdraw
19#     - Dialog::_destroy
20# ------------------------------------------------------------------------------
21
22namespace eval Dialog {
23    ButtonBox::use
24
25    Widget::bwinclude Dialog ButtonBox .bbox \
26        remove     {-orient} \
27        initialize {-spacing 10 -padx 10}
28
29    Widget::declare Dialog {
30        {-title       String     ""       0}
31        {-modal       Enum       local    0 {none local global}}
32        {-bitmap      TkResource ""       1 label}
33        {-image       TkResource ""       1 label}
34        {-separator   Boolean    0        1}
35        {-cancel      Int        -1       0 {=-1 ""}}
36        {-parent      String     ""       0}
37        {-side        Enum       bottom   1 {bottom left top right}}
38        {-anchor      Enum       c        1 {n e w s c}}
39    }
40
41    Widget::addmap Dialog "" :cmd   {-background {}}
42    Widget::addmap Dialog "" .frame {-background {}}
43
44    proc ::Dialog { path args } { return [eval Dialog::create $path $args] }
45    proc use {} {}
46
47    bind BwDialog <Destroy> {Dialog::enddialog %W -1; Dialog::_destroy %W}
48
49    variable _widget
50}
51
52
53# ------------------------------------------------------------------------------
54#  Command Dialog::create
55# ------------------------------------------------------------------------------
56proc Dialog::create { path args } {
57    global   tcl_platform
58    variable _widget
59
60    Widget::init Dialog $path $args
61    set bg [Widget::getoption $path -background]
62    if { ![string compare $tcl_platform(platform) "unix"] } {
63        toplevel $path -relief raised -borderwidth 1 -background $bg
64    } else {
65        toplevel $path -relief flat   -borderwidth 0 -background $bg
66    }
67    bindtags $path [list $path BwDialog all]
68    wm overrideredirect $path 1
69    wm title $path [Widget::getoption $path -title]
70    set parent [Widget::getoption $path -parent]
71    if { ![winfo exists $parent] } {
72        set parent [winfo parent $path]
73    }
74    wm transient $path [winfo toplevel $parent]
75    wm withdraw $path
76
77    set side [Widget::getoption $path -side]
78    if { ![string compare $side "left"] || ![string compare $side "right"] } {
79        set orient vertical
80    } else {
81        set orient horizontal
82    }
83
84    set bbox  [eval ButtonBox::create $path.bbox [Widget::subcget $path .bbox] \
85                   -orient $orient]
86    set frame [frame $path.frame -relief flat -borderwidth 0 -background $bg]
87
88    if { [set bitmap [Widget::getoption $path -image]] != "" } {
89        set label [label $path.label -image $bitmap -background $bg]
90    } elseif { [set bitmap [Widget::getoption $path -bitmap]] != "" } {
91        set label [label $path.label -bitmap $bitmap -background $bg]
92    }
93    if { [Widget::getoption $path -separator] } {
94                Separator::create $path.sep -orient $orient -background $bg
95    }
96    set _widget($path,realized) 0
97    set _widget($path,nbut)     0
98
99    bind $path <Escape>  "ButtonBox::invoke $path.bbox [Widget::getoption $path -cancel]"
100    bind $path <Return>  "ButtonBox::invoke $path.bbox default"
101
102    rename $path ::$path:cmd
103    proc ::$path { cmd args } "return \[eval Dialog::\$cmd $path \$args\]"
104
105    return $path
106}
107
108
109# ------------------------------------------------------------------------------
110#  Command Dialog::configure
111# ------------------------------------------------------------------------------
112proc Dialog::configure { path args } {
113    set res [Widget::configure $path $args]
114
115    if { [Widget::hasChanged $path -title title] } {
116        wm title $path $title
117    }
118    if { [Widget::hasChanged $path -background bg] } {
119        if { [winfo exists $path.label] } {
120            $path.label configure -background $bg
121        }
122        if { [winfo exists $path.sep] } {
123            Separator::configure $path.sep -background $bg
124        }
125    }
126    return $res
127}
128
129
130# ------------------------------------------------------------------------------
131#  Command Dialog::cget
132# ------------------------------------------------------------------------------
133proc Dialog::cget { path option } {
134    return [Widget::cget $path $option]
135}
136
137
138# ------------------------------------------------------------------------------
139#  Command Dialog::getframe
140# ------------------------------------------------------------------------------
141proc Dialog::getframe { path } {
142    return $path.frame
143}
144
145
146# ------------------------------------------------------------------------------
147#  Command Dialog::add
148# ------------------------------------------------------------------------------
149proc Dialog::add { path args } {
150    variable _widget
151
152    set res [eval ButtonBox::add $path.bbox \
153                 -command [list "Dialog::enddialog $path $_widget($path,nbut)"] $args]
154    incr _widget($path,nbut)
155    return $res
156}
157
158
159# ------------------------------------------------------------------------------
160#  Command Dialog::itemconfigure
161# ------------------------------------------------------------------------------
162proc Dialog::itemconfigure { path index args } {
163    return [eval ButtonBox::itemconfigure $path.bbox $index $args]
164}
165
166
167# ------------------------------------------------------------------------------
168#  Command Dialog::itemcget
169# ------------------------------------------------------------------------------
170proc Dialog::itemcget { path index option } {
171    return [ButtonBox::itemcget $path.bbox $index $option]
172}
173
174
175# ------------------------------------------------------------------------------
176#  Command Dialog::invoke
177# ------------------------------------------------------------------------------
178proc Dialog::invoke { path index } {
179    ButtonBox::invoke $path.bbox $index
180}
181
182
183# ------------------------------------------------------------------------------
184#  Command Dialog::setfocus
185# ------------------------------------------------------------------------------
186proc Dialog::setfocus { path index } {
187    ButtonBox::setfocus $path.bbox $index
188}
189
190
191# ------------------------------------------------------------------------------
192#  Command Dialog::enddialog
193# ------------------------------------------------------------------------------
194proc Dialog::enddialog { path result } {
195    variable _widget
196
197    set _widget($path,result) $result
198}
199
200
201# ------------------------------------------------------------------------------
202#  Command Dialog::draw
203# ------------------------------------------------------------------------------
204proc Dialog::draw { path {focus ""}} {
205    variable _widget
206
207    set parent [Widget::getoption $path -parent]
208    if { !$_widget($path,realized) } {
209        set _widget($path,realized) 1
210        if { [llength [winfo children $path.bbox]] } {
211            set side [Widget::getoption $path -side]
212            if { ![string compare $side "left"] || ![string compare $side "right"] } {
213                set pad  -padx
214                set fill y
215            } else {
216                set pad  -pady
217                set fill x
218            }
219            pack $path.bbox -side $side -anchor [Widget::getoption $path -anchor] -padx 1m -pady 1m
220            if { [winfo exists $path.sep] } {
221                pack $path.sep -side $side -fill $fill $pad 2m
222            }
223        }
224        if { [winfo exists $path.label] } {
225            pack $path.label -side left -anchor n -padx 3m -pady 3m
226        }
227        pack $path.frame -padx 1m -pady 1m -fill both -expand yes
228    }
229
230    if { [winfo exists $parent] } {
231        BWidget::place $path 0 0 center $parent
232    } else {
233        BWidget::place $path 0 0 center
234    }
235    update idletasks
236    wm overrideredirect $path 0
237    wm deiconify $path
238
239    tkwait visibility $path
240    BWidget::focus set $path
241    if { [winfo exists $focus] } {
242        focus -force $focus
243    } else {
244        ButtonBox::setfocus $path.bbox default
245    }
246
247    if { [set grab [Widget::getoption $path -modal]] != "none" } {
248        BWidget::grab $grab $path
249        catch {unset _widget($path,result)}
250        tkwait variable Dialog::_widget($path,result)
251        if { [info exists _widget($path,result)] } {
252            set res $_widget($path,result)
253            unset _widget($path,result)
254        } else {
255            set res -1
256        }
257        withdraw $path
258        return $res
259    }
260    return ""
261}
262
263
264# ------------------------------------------------------------------------------
265#  Command Dialog::withdraw
266# ------------------------------------------------------------------------------
267proc Dialog::withdraw { path } {
268    BWidget::grab release $path
269    BWidget::focus release $path
270    if { [winfo exists $path] } {
271        wm withdraw $path
272    }
273}
274
275
276# ------------------------------------------------------------------------------
277#  Command Dialog::_destroy
278# ------------------------------------------------------------------------------
279proc Dialog::_destroy { path } {
280    variable _widget
281
282    BWidget::grab  release $path
283    BWidget::focus release $path
284    catch {unset _widget($path,result)}
285    unset _widget($path,realized)
286    unset _widget($path,nbut)
287
288    Widget::destroy $path
289    rename $path {}
290}
Note: See TracBrowser for help on using the repository browser.