#  Copyright (C) 1999-2017
#  Smithsonian Astrophysical Observatory, Cambridge, MA, USA
#  For conditions of distribution and use, see copyright notice in "copyright"

package provide DS9 1.0

proc ARInit {varname next} {
    upvar #0 $varname var
    global $varname

    set var(sync) 0
    set var(proc,next) $next

    set var(name) {}
    set var(x) {}
    set var(y) {}
    set var(status) {}
}

proc ARApply {varname} {
    upvar #0 $varname var
    global $varname

    ARStatus $varname {}

    $var(mb).file entryconfig [msgcat::mc {Retrieve}] -state disabled
    $var(mb).file entryconfig [msgcat::mc {Cancel}] -state normal

    $var(apply) configure -state disabled
    $var(cancel) configure -state normal
}

proc ARCancel {varname} {
    upvar #0 $varname var
    global $varname

    # set state to 0 so that we don't process the finish proc
    set var(active) 0

    if {[info exists var(token)]} {
	http::reset $var(token)
    }
}

proc ARDestroy {varname} {
    upvar #0 $varname var
    global $varname

    ARCancel $varname

    if {[winfo exists $var(top)]} {
	destroy $var(top)
	destroy $var(mb)
    }

    unset $varname
}

proc ARReset {varname} {
    upvar #0 $varname var
    global $varname

    set var(active) 0

    if {[info exists var(token)]} {
	http::cleanup $var(token)
	unset var(token)
    }

    $var(mb).file entryconfig [msgcat::mc {Retrieve}] -state normal
    $var(mb).file entryconfig [msgcat::mc {Cancel}] -state disabled

    $var(apply) configure -state normal
    $var(cancel) configure -state disabled
}

proc ARDone {varname} {
    upvar #0 $varname var
    global $varname

    set var(status) [msgcat::mc {Done}]
    ARReset $varname
}

proc ARCancelled {varname} {
    upvar #0 $varname var
    global $varname

    set var(status) [msgcat::mc {Cancelled}]
    ARReset $varname
}

proc ARError {varname message} {
    upvar #0 $varname var
    global $varname

    set var(status) [string range $message 0 80]
    ARReset $varname
}

proc ARStatus {varname message} {
    upvar #0 $varname var
    global $varname

    set var(status) [string range $message 0 80]
}

proc ARClear {varname} {
    upvar #0 $varname var
    global $varname

    set var(name) {}
    set var(x) {}
    set var(y) {}
    set var(status) {}
}

proc ARCoord {varname} {
    upvar #0 $varname var
    global $varname

    global ds9
    global pds9

    switch -- $var(sky) {
	fk4 -
	fk5 -
	icrs {
	    $var(xname) configure -text "\u03b1" \
		-font "$ds9(times) $pds9(font,size)"
	    $var(yname) configure -text "\u03b4" \
		-font "$ds9(times) $pds9(font,size)"
	}
	galactic {
	    $var(xname) configure -text {l} \
		-font "{$ds9(times)} $pds9(font,size) normal italic"
	    $var(yname) configure -text {b} \
		-font "{$ds9(times)} $pds9(font,size) normal italic"
	}
	ecliptic {
	    $var(xname) configure -text "\u03bb" \
		-font "$ds9(times) $pds9(font,size)"
	    $var(yname) configure -text "\u03b2" \
		-font "$ds9(times) $pds9(font,size)"
	}
    }
}

proc AREditMenu {varname} {
    upvar #0 $varname var
    global $varname

    global ds9

    $var(mb) add cascade -label [msgcat::mc {Edit}] -menu $var(mb).edit
    EditMenu $var(mb) $varname
    $var(mb).edit add separator
    $var(mb).edit add command -label [msgcat::mc {Clear}] \
	-command "ARClear $varname"
}

proc ARSkyFormat {w varname} {
    upvar #0 $varname var
    global $varname

    set ${varname}(skyformat,msg) [msgcat::mc $var(skyformat)]
    ttk::menubutton $w -textvariable ${varname}(skyformat,msg) -menu $w.menu
    menu $w.menu
    $w.menu add radiobutton -label [msgcat::mc {Degrees}] \
	-variable ${varname}(skyformat) -value degrees \
	-command "ARSkyFormatMenu $varname"
    $w.menu add radiobutton -label {Sexagesimal} \
	-variable ${varname}(skyformat) -value sexagesimal \
	-command "ARSkyFormatMenu $varname"
}

proc ARSkyFormatMenu {varname} {
    upvar #0 $varname var
    global $varname

    set ${varname}(skyformat,msg) $var(skyformat)
}

proc ARRFormat {w varname} {
    upvar #0 $varname var
    global $varname

    set ${varname}(rformat,msg) [msgcat::mc $var(rformat)]
    ttk::menubutton $w -textvariable ${varname}(rformat,msg) -menu $w.menu
    menu $w.menu
    $w.menu add radiobutton -label [msgcat::mc {Degrees}] \
	-variable ${varname}(rformat) -value degrees \
	-command "ARRFormatMenu $varname"
    $w.menu add radiobutton -label [msgcat::mc {ArcMin}] \
	-variable ${varname}(rformat) -value arcmin \
	-command "ARRFormatMenu $varname"
    $w.menu add radiobutton -label [msgcat::mc {ArcSec}] \
	-variable ${varname}(rformat) -value arcsec \
	-command "ARRFormatMenu $varname"
}

proc ARRFormatMenu {varname} {
    upvar #0 $varname var
    global $varname

    set ${varname}(rformat,msg) $var(rformat)
}