#****************************************************************************** #*** #*** This file is part of XTeXShell; see file xtexsh for details #*** Version 0.91 (21.2.94) #*** #****************************************************************************** #****************************************************************************** #*** Message Windows ********************************************************** #****************************************************************************** proc DisplayMsg {msg font} { #*** Displays message until next GotoXY command. Don't show buttons global msg_win msg_name msg_geo global goto_command update #*** Open a window set msg_win [CreateTopWin dialog "CREATE"] wm title $msg_win "" wm iconname $msg_win "Message" #*** Create frame for Text frame $msg_win.top -relief raised -border 1 pack $msg_win.top -side top -fill both -expand yes #*** Fill in text message $msg_win.top.msg -justify center -text "$msg" -font "$font" -aspect 200 pack $msg_win.top.msg -side top -expand yes -padx 3m -pady 1m update lvarcat goto_command "destroy $msg_win;" } proc DisplayInfo {msg font {but1 "OK"}} { #*** Displays msg in a new window and waits until user klicks #*** on the button DialogWin "$msg" "$font" [list $but1 {DialogEnd}] } proc DisplayQuest {msg font args} { #***************************************************************************** #*** Displays msg in a new top window. Create Buttons at the bottom of #*** the window and wait until one of them is pressed. Return the number #*** of the button, the leftmost is 1 #*** args - contains the names of the buttons #***************************************************************************** set i 1 set buf {DialogWin "$msg" "$font"} foreach arg [lrange $args 0 end] { lappend buf [list "$arg" "set DialogRet $i; DialogEnd"] incr i } set retval [eval $buf] } proc DialogWin {msg font args} { #***************************************************************************** #*** Create a new top window and display a message. Create buttons at the #*** bottom of the window and wait until one of them is pressed #*** #*** msg - Message to be displayed #*** list - A two-element list that describes one of the buttons that #*** will appear at the bottom of the dialog. The first element #*** gives the text to be displayed in the button and the second #*** gives the command to be invoked when the button is invoked. #*** #*** Returns the value of the variable DialogRet, wich is initially "" and #*** may be modified by the key bindings. Key bindings should call DialogEnd #*** which terminates the dialog #***************************************************************************** global dia_win dialog_name dialog_geo global DialogRet set DialogRet "" update #*** Open a window set dia_win [CreateTopWin dialog "CREATE"] wm title $dia_win "" wm iconname $dia_win "Dialog Box" #*** Create frames for Text and Buttons frame $dia_win.top -relief raised -border 1 frame $dia_win.bot -relief raised -border 1 pack $dia_win.top $dia_win.bot -side top -fill both -expand yes #*** Fill in text message $dia_win.top.msg -justify center -text "$msg" -font "$font" -aspect 200 pack $dia_win.top.msg -side top -expand yes -padx 3m -pady 1m #*** Create Buttons for {set i 0} {$i < [llength $args]} {incr i} { set arg [lindex $args $i] if {$i == 0 } { frame $dia_win.bot.0 -relief sunken -border 1 pack $dia_win.bot.0 -side left -expand yes -padx 3m -pady 2m button $dia_win.bot.0.button -text [lindex $arg 0] -command "[lindex $arg 1]" pack $dia_win.bot.0.button -expand yes -padx 1.5m -pady 1.5m -ipadx 1m bind $dia_win "[lindex $arg 1]" } else { button $dia_win.bot.$i -text [lindex $arg 0] -command "[lindex $arg 1]" pack $dia_win.bot.$i -side left -expand yes -padx 3m -pady 1m -ipadx 1m } } bind $dia_win [list focus $dia_win] tkwait visibility $dia_win grab $dia_win focus $dia_win tkwait window $dia_win return $DialogRet } proc DialogEnd {} { #*** Terminates the Dialog. May be called from key bindings. global dia_win destroy $dia_win } proc CreateTopWin {wname mode} { #*** Create a new toplevel window. #*** $($name_name) - name of toplevel window #*** $($name_geo) - geometry of toplevel window #*** $($name_min) - minimal size of new window. Not required #*** mode : "" return if window already exists. "CREATE" : destroy old window #*** return value : Name of window on success, "" if operation was not completed #*** Get the real window names set win_name "$wname\_name" set win_geo "$wname\_geo" set win_min "$wname\_min" global $win_name $win_geo $win_min eval set win_name "\$$win_name" eval set win_geo "\$$win_geo" #*** Check if mode != CREATE and window exists if {![cequal $mode "CREATE"]} { if {[info exists win_name] && [winfo exists $win_name]} { return "" } } #*** Ok, we can create the new window. Get size of Main Window if {![cequal "." $win_name]} { catch {destroy $win_name} toplevel $win_name set geo [winfo geometry "."]; #*** Get geometry of main window } else { set geo "10x10+0+0" } #*** Calculate geometry relative to main window if {[string first "x" $geo] >= 0} {set tmp [ctoken geo "+"]} set mxpos [ctoken geo "+"] set mypos [ctoken geo "+"] set geo "$win_geo"; #*** Get geometry of new window if {[string first "x" $geo] >= 0} { set tmp [ctoken geo "+"] } else { set tmp "" } set nxpos [ctoken geo "+"] set nypos [ctoken geo "+"] if {[cequal $nypos ""]} { set geo $tmp } else { set geo [format "%s+%d+%d" $tmp [expr $mxpos+$nxpos] [expr $mypos+$nypos]] } #*** Set window geometry wm geometry $win_name $geo #*** Set Window minsize if {[info exists $win_min]} { eval eval wm minsize $win_name "\$$win_min" } return $win_name } proc InsertWithTags {w text args} { #*** InsertWithTags inserts text into a given text widget and #*** applies one or more tags to that text. The arguments are: #*** #*** w Window in which to insert #*** text Text to insert (it's inserted at the "insert" mark) #*** args One or more tags to apply to text. If this is empty #*** then all tags are removed from the text. set start [$w index insert] $w insert insert $text foreach tag [$w tag names $start] { $w tag remove $tag $start insert } foreach i $args { $w tag add $i $start insert } } proc strip_extension {filename} { #*** Strip of extension of filename set pos [expr [string last "." "$filename"] - 1] set pos1 [expr [string last "/" "$filename"] - 1] if {$pos >= 0 && $pos > $pos1} { return [crange "$filename" 0 "$pos" ] } return $filename } proc SelNewMain {fname} { #*** Set fname as the new main file. If fname=="", ask user for a file global mainflag if {[cequal "" $fname]} { set fname [FileSelBox OPEN] if {![string compare $fname ""]} {return} } .menu.main.m add radio -label "$fname" -variable mainname .menu.main.m invoke last if {![info exists mainflag] || !$mainflag} { .menu.main.m invoke 0 } } proc PurgeFiles {} { #*** Deletes all temporary files in a directory global boldl_font DisplayQuest "Ready to delete all files\n*~ *.aux *.lis *.toc *.dvi *.lof *.lot\n in current directory?" \ "$boldl_font" " GO " "Subdirs also" "Show Files" "Quit" } proc ChangeDir {} { #*** Set a new directory set newdir [FileSelBox "CD"] if {![cequal $newdir ""]} { pushd $newdir } }