summaryrefslogtreecommitdiff
path: root/support/xtexshell/util.tcl
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/xtexshell/util.tcl
Initial commit
Diffstat (limited to 'support/xtexshell/util.tcl')
-rw-r--r--support/xtexshell/util.tcl297
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
+ }
+}
+
+
+