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