#!/bin/sh
# the next line restarts using wish \
exec wish "$0" "$@"

# 
# This was largely cribbed from the TCL demo code.  My TCL skills weren't
# that great when I last used it about ten years ago and my Tk skills never
# existed before.  So be kind.
#

set font {Helvetica 14}
set ifile {}
set ofile {}
set use_shortnames 0

proc positionWindow w {
    wm geometry $w +300+300
}

proc showCmd w {
 global ifile ofile use_shortnames ftyperead ftypewrite
 set cmd "gpsbabel -i $ftyperead -f $ifile"
 if {$use_shortnames > 0} {
	set cmd [concat $cmd "-s"]
  }
 set cmd [concat $cmd  "-o $ftypewrite -F $ofile"]
 eval exec $cmd
 
# tk_messageBox -icon info -message  $cmd
}

set w .filebox
catch {destroy $w}
toplevel $w
wm title $w "gpsbabel"
wm iconname $w "filebox"
positionWindow $w

#label $w.msg -font $font -wraplength 4i -justify left -text "Enter a file name in the entry box or click on the \"Browse\" buttons to select a file name using the file selection dialog."
#pack $w.msg -side top

frame $w.buttons
pack $w.buttons -side bottom -fill x -pady 2m
button $w.buttons.dismiss -text End -command "destroy $w"
button $w.buttons.code -text OK -command "showCmd $w"
pack $w.buttons.dismiss $w.buttons.code -side left -expand 1

foreach i {read write} {
    set f [frame $w.$i]
    set ftype "ftype$i"
    label $f.lab -text "Select a file to $i: " -anchor e
    entry $f.ent -width 20
    button $f.but -text "Browse ..." -command "fileDialog $w $f.ent $i"
# TODO: Get this list from 'gpsbabel -?' instead of hardcoding it here.
    tk_optionMenu $f.ftypes $ftype geo gpsman gpx \
	magellan mapsend pcx mapsource gpsutil tiger csv xmap dna psp \
	cetus gpspilot magnav garmin mxf holux ozi tpg tpo igc baroiq
    pack $f.lab -side left
    pack $f.ent -side left -expand yes -fill x
    pack $f.but -side left
    pack $f -fill x -padx 1c -pady 3
    pack $f.ftypes -side right -padx 45 
}
set ftyperead "geo"
set ftypewrite "mapsend"

 checkbutton $w.strict -text "Make Up Shortnames" \
	-variable use_shortnames -onvalue 1 -offvalue 0
 pack $w.strict -anchor c

proc fileDialog {w ent operation} {
    #   Type names		Extension(s)	Mac File Type(s)
    #
    #---------------------------------------------------------
    set types {
	{"All files"		*		}
	{"loc files"		{.loc}		}
	{"Waypoint files"	{.wpt} 		}
	{"GPX files"		{.gpx} 		}
	{"Various Palm/OS files" {.pdb} 		}
    }
    global ifile ofile
    if {$operation == "read"} {
	set ifile [tk_getOpenFile -filetypes $types -parent $w]
        if [string compare $ifile ""] {
	    $ent delete 0 end
	    $ent insert 0 $ifile
	    $ent xview end
	} ;
    } else {
	set ofile [tk_getSaveFile -filetypes $types -parent $w \
	    -initialfile Untitled ]
        if [string compare $ofile ""] {
    	    $ent delete 0 end
    	    $ent insert 0 $ofile
    	    $ent xview end
    	} ;
    }
}
