summaryrefslogtreecommitdiff
path: root/support/xtexshell/fileselbox.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/fileselbox.tcl
Initial commit
Diffstat (limited to 'support/xtexshell/fileselbox.tcl')
-rw-r--r--support/xtexshell/fileselbox.tcl205
1 files changed, 205 insertions, 0 deletions
diff --git a/support/xtexshell/fileselbox.tcl b/support/xtexshell/fileselbox.tcl
new file mode 100644
index 0000000000..2e8d5b9135
--- /dev/null
+++ b/support/xtexshell/fileselbox.tcl
@@ -0,0 +1,205 @@
+#******************************************************************************
+#***
+#*** This file is part of XTeXShell; see file xtexsh for details
+#*** Version 0.91 (21.2.94)
+#***
+#******************************************************************************
+
+proc FileSelBox {Mode {startdir "."}} {
+
+#***
+#*** Displays a File Selector Box
+#***
+#*** Input Value (optional)
+#*** Mode = (OPEN / CREATE / OPENCREATE / DIR / CD)
+#*** Start directory ("." is default)
+#***
+#*** Return Values:
+#*** "" if operation was canceled
+#*** Full File Name if operation was completed successfully
+#***
+
+#*** Variables and Definitions
+
+ global fsbfname fsbfmode
+
+ set fsbfname [expr {[cequal $startdir "."] ? [eval pwd] : $startdir}]
+
+ switch $Mode {
+ "OPEN" { set title "OPEN existing File" }
+ "CREATE" { set title "CREATE a new File" }
+ "OPENCREATE" { set title "OPEN / CREATE a File" }
+ "DIR" { set title "View Directory" }
+ "CD" { set title "Change Directory" }
+ }
+ set fsbfmode $Mode
+
+#*** Generate Window
+
+ global fsbwin fsbwin_name fsbwin_geo
+ global fixbold_font bold_font
+
+ set fsbwin [CreateTopWin fsbwin "CREATE"]
+
+ wm title $fsbwin $title
+ wm iconname $fsbwin "File Selector Box"
+ wm minsize $fsbwin 5 5
+
+ entry $fsbwin.mask -relief sunken -textvariable fsbfname -font $bold_font -exportselection 0
+ frame $fsbwin.but -relief raised -borderwidth 1
+ scrollbar $fsbwin.scroll -command "$fsbwin.list yview"
+ listbox $fsbwin.list -yscroll "$fsbwin.scroll set" -relief flat -geometry 20x20 \
+ -setgrid yes -font $fixbold_font -exportselection 0
+
+ pack $fsbwin.mask -side top -fill x -padx 3m -pady 1m -fill x
+ pack $fsbwin.but -side bottom -fill x
+ pack $fsbwin.scroll -side right -fill y
+ pack $fsbwin.list -side left -fill both -expand yes
+
+#*** Generate Buttons
+
+ button $fsbwin.but.ok -text "OK" -command {fsbcheck OK 0}
+ button $fsbwin.but.cancel -text "Cancel" -command {fsbcheck CANCEL 0}
+ button $fsbwin.but.form -text "Format" -command {lvarpush fsboptions [lvarpop fsboptions 0] "end+1"; fsbgetlist}
+ button $fsbwin.but.help -text "Help" -command { }
+ pack $fsbwin.but.ok $fsbwin.but.cancel $fsbwin.but.form $fsbwin.but.help -side left -padx 3m -pady 1m -ipadx 0.6m
+
+#*** Set Input focus and Keyboard events
+
+ bind $fsbwin.mask <Return> {fsbcheck RETURN 0}
+ bind $fsbwin.list <Control-q> {fsbcheck CANCEL 0}
+ bind $fsbwin.list <Control-c> {fsbcheck CANCEL 0}
+# bind $fsbwin.list <Button-1> { }
+# bind $fsbwin.list <Any-ButtonPress> { }
+# bind $fsbwin.list <Any-ButtonRelease> { }
+# bind $fsbwin.list <Any-Motion> { }
+ bind $fsbwin.list <Double-Button-1> {fsbcheck BUT1 %y}
+
+
+#*** Read File List
+
+ fsbgetlist
+
+#*** Wait for OK or cancel
+
+ tkwait window $fsbwin
+ return $fsbfname
+}
+
+#*******************************************************************************
+#*** functions to handle user input and read directories ***********************
+#*******************************************************************************
+
+proc fsbcheck {Mode {ypos 0}} {
+
+#*** This function is called after input from user
+#*** Action depends on Mode
+
+ global fsbwin fsbfname fsbfmode
+ global boldl_font
+
+#*** User requested CANCEL.
+
+ if {[cequal $Mode "CANCEL"]} {
+ set fsbfname ""
+ destroy $fsbwin
+ return
+ }
+
+#*** User pushed Double Button 1
+
+ if {[cequal $Mode "BUT1"]} {
+ if {![file isdirectory $fsbfname]} {
+ DisplayInfo "Can't concatenate filename because mask is not a valid directory name" $boldl_font
+ return
+ }
+
+ set str [$fsbwin.list get [$fsbwin.list nearest $ypos]]
+ set str [lvarpop str end]
+
+ if {[cequal $str "."]} {
+ fsbgetlist
+ return
+ }
+
+ if {[cequal $fsbfname "."]} {
+ set fsbfname $str
+ } else {
+ if {[cequal "/" [cindex $fsbfname end]]} {
+ set fsbfname "$fsbfname$str"
+ } else {
+ set fsbfname "$fsbfname/$str"
+ }
+ }
+ set Mode "RETURN"
+ }
+
+#*** User requested RETURN.
+
+ if {[cequal $Mode "RETURN"]} {
+ if {[file isdirectory $fsbfname]} {
+ fsbgetlist
+ return
+ }
+ }
+
+#*** OK, user has selected a filename which is in fsbfname.
+
+ switch $fsbfmode {
+ "OPENCREATE" {
+ destroy $fsbwin
+ }
+ "OPEN" {
+ if {[file exists $fsbfname]} {
+ destroy $fsbwin
+ return
+ }
+ DisplayInfo "Warning!!!\n\nThe file you selected:\n$fsbfname\nis not a valid file\nPlease choose a new one" "$boldl_font"
+ }
+ "CREATE" {
+ if {[file exists $fsbfname]} {
+ set retval [DisplayQuest "Warning!!!\n\nFile:\n$fsbfname\n already exists!\nOverwrite?"\
+ "$boldl_font" "Overwrite" "Select New File"]
+ if {$retval==1} {
+ destroy $fsbwin
+ return
+ }
+ } else {
+ destroy $fsbwin
+ return
+ }
+ }
+ "DIR" {
+ set fsbfname ""
+ destroy $fsbwin
+ return
+ }
+ "CD" {
+ if {[file isdirectory $fsbfname]} {
+ destroy $fsbwin
+ return
+ }
+ DisplayInfo "Error!!!\n\nThe path you selected:\nis not a valid directory\nPlease chose a new directory" "$boldl_font"
+ }
+ }
+}
+
+proc fsbgetlist {} {
+
+#*** Clear Listbox. Then fill Listbox with directory entries
+
+ global fsbfname fsboptions fsbwin
+
+ $fsbwin.list delete 0 10000
+
+ set filelist [exec ls [lindex $fsboptions 0] $fsbfname]
+ foreach i [split $filelist "\n"] {
+ $fsbwin.list insert end $i
+ }
+
+ if {![cequal "/" [cindex $fsbfname end]]} {
+ set fsbfname "$fsbfname/"
+ }
+
+ focus $fsbwin.mask
+}