1# Copyright (c) 1993 by Sanjay Ghemawat
2#############################################################################
3# Number Dialog
4#
5# Commands
6#
7# get_number <leader> <title> <label> <doc> <min> <max> <tick> <init> <var>
8#               Get a number in the range <min>..<max> rounded to the
9#               nearest <tick>.  The initial displayed value is <init>.
10#               <title>/<label>/<doc> are used to prompt the user.  If the
11#               user confirms the selection, set <var> to the selected number
12#               and return true.  Else return false.
13
14# Hidden global variables
15#
16#       num_done                Is num interaction finished
17
18set num_done 0
19
20proc get_number {leader title label doc min max tick init var} {
21    num_make
22
23    set result [num_interact $leader $title $label $doc $min $max $tick $init]
24    if $result {
25        upvar $var returnVar
26        set returnVar [.number_dialog.scale get]
27    }
28    return $result
29}
30
31proc num_make {} {
32    set f .number_dialog
33    if [winfo exists $f] {return}
34
35    toplevel $f -class Dialog
36    wm title $f Dialog
37    wm protocol $f WM_DELETE_WINDOW {set num_done 0}
38
39    frame $f.top -class Pane
40    frame $f.mid -class Pane
41
42    message $f.doc -aspect 400 -text {Uninitialized message}
43    pack $f.doc -in $f.top -side top -expand 1 -fill both
44
45    scale $f.scale -orient horizontal -length 3i -showvalue 1
46    make_buttons $f.bot 1 {
47        {Cancel         {set num_done 0}}
48        {Okay           {set num_done 1}}
49    }
50
51    pack $f.scale -in $f.mid -side top -expand 1 -padx 5m -pady 5m
52    pack $f.top -side top -expand 1 -fill both
53    pack $f.mid -side top -expand 1 -fill both
54    pack $f.bot -side bottom -fill both
55
56    bind $f <Control-c> {set num_done 0}
57    bind $f <Return>    {set num_done 1}
58
59    wm withdraw $f
60    update
61}
62
63proc num_interact {leader title label doc min max tick init} {
64    global num_done
65    set f .number_dialog
66
67    # Fix dialog contents
68    $f.doc configure -text $doc
69    $f.scale configure -from $min -to $max -tickinterval $tick -label $label
70    $f.scale set $init
71    wm title $f $title
72
73    # Run dialog
74    set num_done -1
75    dialog_run $leader $f num_done
76
77    return $num_done
78}
79