diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/xtexshell/util.tcl |
Initial commit
Diffstat (limited to 'support/xtexshell/util.tcl')
-rw-r--r-- | support/xtexshell/util.tcl | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/support/xtexshell/util.tcl b/support/xtexshell/util.tcl new file mode 100644 index 0000000000..9c0a4a7995 --- /dev/null +++ b/support/xtexshell/util.tcl @@ -0,0 +1,297 @@ +#****************************************************************************** +#*** +#*** 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 <Return> "[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 <Any-Enter> [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 + } +} + + + |