summaryrefslogtreecommitdiffstats
path: root/ds9/library/menu.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'ds9/library/menu.tcl')
-rw-r--r--ds9/library/menu.tcl586
1 files changed, 586 insertions, 0 deletions
diff --git a/ds9/library/menu.tcl b/ds9/library/menu.tcl
new file mode 100644
index 0000000..70997a5
--- /dev/null
+++ b/ds9/library/menu.tcl
@@ -0,0 +1,586 @@
+# Copyright (C) 1999-2016
+# Smithsonian Astrophysical Observatory, Cambridge, MA, USA
+# For conditions of distribution and use, see copyright notice in "copyright"
+
+package provide DS9 1.0
+
+proc CreateMenuBar {} {
+ global ds9
+
+ # we need this first, before the configure command
+ menu $ds9(mb)
+ AppleMenu $ds9(mb)
+ $ds9(top) configure -menu $ds9(mb)
+
+ $ds9(mb) add cascade -label [msgcat::mc {File}] -menu $ds9(mb).file
+ $ds9(mb) add cascade -label [msgcat::mc {Edit}] -menu $ds9(mb).edit
+ $ds9(mb) add cascade -label [msgcat::mc {View}] -menu $ds9(mb).view
+ $ds9(mb) add cascade -label [msgcat::mc {Frame}] -menu $ds9(mb).frame
+ $ds9(mb) add cascade -label [msgcat::mc {Bin}] -menu $ds9(mb).bin
+ $ds9(mb) add cascade -label [msgcat::mc {Zoom}] -menu $ds9(mb).zoom
+ $ds9(mb) add cascade -label [msgcat::mc {Scale}] -menu $ds9(mb).scale
+ $ds9(mb) add cascade -label [msgcat::mc {Color}] -menu $ds9(mb).color
+ $ds9(mb) add cascade -label [msgcat::mc {Region}] -menu $ds9(mb).region
+ $ds9(mb) add cascade -label [msgcat::mc {WCS}] -menu $ds9(mb).wcs
+ $ds9(mb) add cascade -label [msgcat::mc {Analysis}] -menu $ds9(mb).analysis
+
+ FileMainMenu
+ EditMainMenu
+ ViewMainMenu
+ FrameMainMenu
+ BinMainMenu
+ ZoomMainMenu
+ ScaleMainMenu
+ ColorMainMenu
+ RegionMainMenu
+ WCSMainMenu
+ AnalysisMainMenu
+ HelpMainMenu
+}
+
+proc AppleMenu {mb} {
+ global ds9
+
+ switch $ds9(wm) {
+ x11 -
+ win32 {}
+ aqua {
+ # apple menu
+ menu $mb.apple
+ $mb add cascade -menu $mb.apple
+ $mb.apple add command \
+ -label [msgcat::mc {About SAOImage DS9}] \
+ -command AboutBox
+# -command ::tk::mac::standardAboutPanel
+ }
+ }
+}
+
+# CoordMenu
+proc CoordMenu {w varname system other sky skyformat cmd} {
+ upvar #0 $varname var
+ global $varname
+
+ menu $w
+ $w add radiobutton -label [msgcat::mc {WCS}] \
+ -variable ${varname}($system) -value wcs -command $cmd
+ $w add cascade -label [msgcat::mc {Multiple WCS}] -menu $w.wcs
+ menu $w.wcs
+ foreach l {a b c d e f g h i j k l m n o p q r s t u v w x y z} {
+ $w.wcs add radiobutton -label "[msgcat::mc {WCS}] $l" \
+ -variable ${varname}($system) -value "wcs$l" -command $cmd
+ }
+
+ switch -- $other {
+ 1 {
+ $w add separator
+ $w add radiobutton -label [msgcat::mc {Image}] \
+ -variable ${varname}($system) -value image -command $cmd
+ $w add radiobutton -label [msgcat::mc {Physical}] \
+ -variable ${varname}($system) -value physical -command $cmd
+ $w add radiobutton -label [msgcat::mc {Amplifier}] \
+ -variable ${varname}($system) -value amplifier -command $cmd
+ $w add radiobutton -label [msgcat::mc {Detector}] \
+ -variable ${varname}($system) -value detector -command $cmd
+ }
+ 2 {
+ $w add separator
+ $w add radiobutton -label [msgcat::mc {Image}] \
+ -variable ${varname}($system) -value image -command $cmd
+ }
+ }
+
+ if {$sky != {}} {
+ $w add separator
+ $w add radiobutton -label [msgcat::mc {FK4}] \
+ -variable ${varname}($sky) -value fk4 -command $cmd
+ $w add radiobutton -label [msgcat::mc {FK5}] \
+ -variable ${varname}($sky) -value fk5 -command $cmd
+ $w add radiobutton -label [msgcat::mc {ICRS}] \
+ -variable ${varname}($sky) -value icrs -command $cmd
+ $w add radiobutton -label [msgcat::mc {Galactic}] \
+ -variable ${varname}($sky) -value galactic -command $cmd
+ $w add radiobutton -label [msgcat::mc {Ecliptic}] \
+ -variable ${varname}($sky) -value ecliptic -command $cmd
+ }
+
+ if {$skyformat != {}} {
+ $w add separator
+ $w add radiobutton -label [msgcat::mc {Degrees}] \
+ -variable ${varname}($skyformat) -value degrees -command $cmd
+ $w add radiobutton -label {Sexagesimal} \
+ -variable ${varname}($skyformat) -value sexagesimal -command $cmd
+ }
+}
+
+proc CoordMenuButton {w varname system other sky skyformat cmd} {
+ upvar #0 $varname var
+ global $varname
+
+ CoordMenuButtonCmd $varname $system $sky {}
+ ttk::menubutton $w -textvariable ${varname}($system,msg) -menu $w.menu
+ CoordMenu $w.menu $varname $system $other $sky $skyformat \
+ [list CoordMenuButtonCmd $varname $system $sky $cmd]
+}
+
+proc CoordMenuButtonCmd {varname system sky cmd} {
+ upvar #0 $varname var
+ global $varname
+
+ set ${varname}($system,msg) [msgcat::mc $var($system)]
+
+ if {$sky != {}} {
+ switch -- $var($system) {
+ image -
+ physical -
+ amplifier -
+ detector {}
+ default {
+ if {[info exists var(frame)]} {
+ if {$var(frame) != {}} {
+ if {[$var(frame) has wcs equatorial $var($system)]} {
+ set ${varname}($system,msg) [msgcat::mc $var($sky)]
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if {$cmd != {}} {
+ eval $cmd
+ }
+}
+
+proc CoordMenuEnable {w varname system other sky skyformat} {
+ upvar #0 $varname var
+ global $varname
+
+ if {![info exists var(frame)]} {
+ return
+ }
+
+ if {$var(frame) == {}} {
+ return
+ }
+
+ if {[$var(frame) has wcs wcs]} {
+ $w entryconfig [msgcat::mc {WCS}] -state normal
+ } else {
+ $w entryconfig [msgcat::mc {WCS}] -state disabled
+ }
+
+ $w entryconfig [msgcat::mc {Multiple WCS}] -state normal
+
+ foreach ll {a b c d e f g h i j k l m n o p q r s t u v w x y z} {
+ if {[$var(frame) has wcs "wcs${ll}"]} {
+ $w.wcs entryconfig "[msgcat::mc {WCS}] $ll" -state normal
+ } else {
+ $w.wcs entryconfig "[msgcat::mc {WCS}] $ll" -state disabled
+ }
+ }
+
+ switch -- $other {
+ 1 {
+ $w entryconfig [msgcat::mc {Image}] -state normal
+ $w entryconfig [msgcat::mc {Physical}] -state normal
+ $w entryconfig [msgcat::mc {Amplifier}] -state normal
+ $w entryconfig [msgcat::mc {Detector}] -state normal
+ }
+ 2 {
+ $w entryconfig [msgcat::mc {Image}] -state normal
+ }
+ }
+
+ if {$sky != {}} {
+ if {[$var(frame) has wcs equatorial $var($system)]} {
+ $w entryconfig [msgcat::mc {FK4}] -state normal
+ $w entryconfig [msgcat::mc {FK5}] -state normal
+ $w entryconfig [msgcat::mc {ICRS}] -state normal
+ $w entryconfig [msgcat::mc {Galactic}] -state normal
+ $w entryconfig [msgcat::mc {Ecliptic}] -state normal
+ } else {
+ $w entryconfig [msgcat::mc {FK4}] -state disabled
+ $w entryconfig [msgcat::mc {FK5}] -state disabled
+ $w entryconfig [msgcat::mc {ICRS}] -state disabled
+ $w entryconfig [msgcat::mc {Galactic}] -state disabled
+ $w entryconfig [msgcat::mc {Ecliptic}] -state disabled
+ }
+ }
+
+ if {$skyformat != {}} {
+ if {[$var(frame) has wcs celestrial $var($system)]} {
+ $w entryconfig [msgcat::mc {Degrees}] -state normal
+ $w entryconfig {Sexagesimal} -state normal
+ } else {
+ $w entryconfig [msgcat::mc {Degrees}] -state disabled
+ $w entryconfig {Sexagesimal} -state disabled
+ }
+ }
+}
+
+proc CoordMenuReset {w varname system other sky skyformat} {
+ upvar #0 $varname var
+ global $varname
+
+ $w entryconfig [msgcat::mc {WCS}] -state normal
+ $w entryconfig [msgcat::mc {Multiple WCS}] -state normal
+
+ foreach l {a b c d e f g h i j k l m n o p q r s t u v w x y z} {
+ $w.wcs entryconfig "[msgcat::mc {WCS}] $l" -state normal
+ }
+
+ switch -- $other {
+ 1 {
+ $w entryconfig [msgcat::mc {Image}] -state normal
+ $w entryconfig [msgcat::mc {Physical}] -state normal
+ $w entryconfig [msgcat::mc {Amplifier}] -state normal
+ $w entryconfig [msgcat::mc {Detector}] -state normal
+ }
+ 2 {
+ $w entryconfig [msgcat::mc {Image}] -state normal
+ }
+ }
+
+ if {$sky != {}} {
+ $w entryconfig [msgcat::mc {FK4}] -state normal
+ $w entryconfig [msgcat::mc {FK5}] -state normal
+ $w entryconfig [msgcat::mc {ICRS}] -state normal
+ $w entryconfig [msgcat::mc {Galactic}] -state normal
+ $w entryconfig [msgcat::mc {Ecliptic}] -state normal
+ }
+
+ if {$skyformat != {}} {
+ $w entryconfig [msgcat::mc {Degrees}] -state normal
+ $w entryconfig {Sexagesimal} -state normal
+ }
+}
+
+# DistMenu
+proc DistMenu {w varname system other format cmd} {
+ upvar #0 $varname var
+ global $varname
+
+ menu $w
+ $w add radiobutton -label [msgcat::mc {WCS}] \
+ -variable ${varname}($system) -value wcs -command $cmd
+ $w add cascade -label [msgcat::mc {Multiple WCS}] \
+ -menu $w.wcs
+ menu $w.wcs
+ foreach l {a b c d e f g h i j k l m n o p q r s t u v w x y z} {
+ $w.wcs add radiobutton -label "[msgcat::mc {WCS}] $l" \
+ -variable ${varname}($system) -value "wcs$l" -command $cmd
+ }
+
+ if {$other} {
+ $w add separator
+ $w add radiobutton -label [msgcat::mc {Image}] \
+ -variable ${varname}($system) -value image -command $cmd
+ $w add radiobutton -label [msgcat::mc {Physical}] \
+ -variable ${varname}($system) -value physical -command $cmd
+ $w add radiobutton -label [msgcat::mc {Amplifier}] \
+ -variable ${varname}($system) -value amplifier -command $cmd
+ $w add radiobutton -label [msgcat::mc {Detector}] \
+ -variable ${varname}($system) -value detector -command $cmd
+ }
+
+ if {$format != {}} {
+ $w add separator
+ $w add radiobutton -label [msgcat::mc {Degrees}] \
+ -variable ${varname}($format) -value degrees -command $cmd
+ $w add radiobutton -label [msgcat::mc {ArcMin}] \
+ -variable ${varname}($format) -value arcmin -command $cmd
+ $w add radiobutton -label [msgcat::mc {ArcSec}] \
+ -variable ${varname}($format) -value arcsec -command $cmd
+ }
+}
+
+proc DistMenuButton {w varname system other format cmd} {
+ upvar #0 $varname var
+ global $varname
+
+ DistMenuButtonCmd $varname $system $format {}
+ ttk::menubutton $w -textvariable ${varname}($system,msg) -menu $w.menu
+ DistMenu $w.menu $varname $system $other $format \
+ [list DistMenuButtonCmd $varname $system $format $cmd]
+}
+
+proc DistMenuButtonCmd {varname system format cmd} {
+ upvar #0 $varname var
+ global $varname
+
+ set ${varname}($system,msg) [msgcat::mc $var($system)]
+
+ if {$format != {}} {
+ switch -- $var($system) {
+ image -
+ physical -
+ amplifier -
+ detector {}
+ default {
+ if {[info exists var(frame)]} {
+ if {$var(frame) != {}} {
+ if {[$var(frame) has wcs equatorial $var($system)]} {
+ set ${varname}($system,msg) [msgcat::mc $var($format)]
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if {$cmd != {}} {
+ eval $cmd
+ }
+}
+
+proc DistMenuEnable {w varname system other format} {
+ upvar #0 $varname var
+ global $varname
+
+ if {![info exists var(frame)]} {
+ return
+ }
+
+ if {$var(frame) == {}} {
+ return
+ }
+
+ if {[$var(frame) has wcs wcs]} {
+ $w entryconfig [msgcat::mc {WCS}] -state normal
+ } else {
+ $w entryconfig [msgcat::mc {WCS}] -state disabled
+ }
+
+ $w entryconfig [msgcat::mc {Multiple WCS}] -state normal
+
+ foreach ll {a b c d e f g h i j k l m n o p q r s t u v w x y z} {
+ if {[$var(frame) has wcs "wcs${ll}"]} {
+ $w.wcs entryconfig "[msgcat::mc {WCS}] $ll" -state normal
+ } else {
+ $w.wcs entryconfig "[msgcat::mc {WCS}] $ll" -state disabled
+ }
+ }
+
+ if {$other} {
+ $w entryconfig [msgcat::mc {Image}] -state normal
+ $w entryconfig [msgcat::mc {Physical}] -state normal
+ $w entryconfig [msgcat::mc {Amplifier}] -state normal
+ $w entryconfig [msgcat::mc {Detector}] -state normal
+ }
+
+ if {$format != {}} {
+ if {[$var(frame) has wcs celestrial $var($system)]} {
+ $w entryconfig [msgcat::mc {Degrees}] -state normal
+ $w entryconfig [msgcat::mc {ArcMin}] -state normal
+ $w entryconfig [msgcat::mc {ArcSec}] -state normal
+ } else {
+ $w entryconfig [msgcat::mc {Degrees}] -state disabled
+ $w entryconfig [msgcat::mc {ArcMin}] -state disabled
+ $w entryconfig [msgcat::mc {ArcSec}] -state disabled
+ }
+ }
+}
+
+proc DistMenuReset {w varname system other format} {
+ upvar #0 $varname var
+ global $varname
+
+ $w entryconfig [msgcat::mc {WCS}] -state normal
+ $w entryconfig [msgcat::mc {Multiple WCS}] -state normal
+
+ foreach ll {a b c d e f g h i j k l m n o p q r s t u v w x y z} {
+ $w.wcs entryconfig "[msgcat::mc {WCS}] $ll" -state normal
+ }
+
+ if {$other} {
+ $w entryconfig [msgcat::mc {Image}] -state normal
+ $w entryconfig [msgcat::mc {Physical}] -state normal
+ $w entryconfig [msgcat::mc {Amplifier}] -state normal
+ $w entryconfig [msgcat::mc {Detector}] -state normal
+ }
+
+ if {$format != {}} {
+ $w entryconfig [msgcat::mc {Degrees}] -state normal
+ $w entryconfig [msgcat::mc {ArcMin}] -state normal
+ $w entryconfig [msgcat::mc {ArcSec}] -state normal
+ }
+}
+
+# EditMenu
+proc EditMenu {mb varname} {
+ upvar #0 $varname var
+ global $varname
+ global ds9
+
+ menu $mb.edit
+ $mb.edit add command -label [msgcat::mc {Cut}] \
+ -command "EntryCut $var(top)" -accelerator "${ds9(ctrl)}X"
+ $mb.edit add command -label [msgcat::mc {Copy}] \
+ -command "EntryCopy $var(top)" -accelerator "${ds9(ctrl)}C"
+ $mb.edit add command -label [msgcat::mc {Paste}] \
+ -command "EntryPaste $var(top)" -accelerator "${ds9(ctrl)}V"
+}
+
+# ColorMenu
+proc ColorMenu {w varname color cmd} {
+ upvar #0 $varname var
+ global $varname
+
+ menu $w
+ $w add radiobutton -label [msgcat::mc {Black}] \
+ -variable ${varname}($color) -value black -command $cmd
+ $w add radiobutton -label [msgcat::mc {White}] \
+ -variable ${varname}($color) -value white -command $cmd
+ $w add radiobutton -label [msgcat::mc {Red}] \
+ -variable ${varname}($color) -value red -command $cmd
+ $w add radiobutton -label [msgcat::mc {Green}] \
+ -variable ${varname}($color) -value green -command $cmd
+ $w add radiobutton -label [msgcat::mc {Blue}] \
+ -variable ${varname}($color) -value blue -command $cmd
+ $w add radiobutton -label [msgcat::mc {Cyan}] \
+ -variable ${varname}($color) -value cyan -command $cmd
+ $w add radiobutton -label [msgcat::mc {Magenta}] \
+ -variable ${varname}($color) -value magenta -command $cmd
+ $w add radiobutton -label [msgcat::mc {Yellow}] \
+ -variable ${varname}($color) -value yellow -command $cmd
+ $w add separator
+ $w add command -label "[msgcat::mc {Other Color}]..." \
+ -command [list ColorMenuOther $varname $color $cmd]
+}
+
+proc ColorMenuOther {varname color cmd} {
+ upvar #0 $varname var
+ global $varname
+
+ if {[EntryDialog [msgcat::mc {Color}] [msgcat::mc {Enter Color}] 20 ${varname}($color)]} {
+ eval $cmd
+ }
+}
+
+proc ColorMenuButton {w varname color cmd} {
+ upvar #0 $varname var
+ global $varname
+
+ ttk::menubutton $w -textvariable ${varname}($color) -menu $w.menu
+ ColorMenu $w.menu $varname $color $cmd
+}
+
+# FontMenu
+proc FontMenu {w varname font size weight slant cmd} {
+ upvar #0 $varname var
+ global $varname
+
+ menu $w
+ $w add radiobutton -label {Times} -variable ${varname}($font) \
+ -value times -command $cmd
+ $w add radiobutton -label {Helvetica} -variable ${varname}($font) \
+ -value helvetica -command $cmd
+ $w add radiobutton -label {Courier} -variable ${varname}($font) \
+ -value courier -command $cmd
+ $w add separator
+ $w add radiobutton -label {9} -variable ${varname}($size) \
+ -value 9 -command $cmd
+ $w add radiobutton -label {10} -variable ${varname}($size) \
+ -value 10 -command $cmd
+ $w add radiobutton -label {12} -variable ${varname}($size) \
+ -value 12 -command $cmd
+ $w add radiobutton -label {14} -variable ${varname}($size) \
+ -value 14 -command $cmd
+ $w add radiobutton -label {16} -variable ${varname}($size) \
+ -value 16 -command $cmd
+ $w add radiobutton -label {20} -variable ${varname}($size) \
+ -value 20 -command $cmd
+ $w add radiobutton -label {24} -variable ${varname}($size) \
+ -value 24 -command $cmd
+ $w add radiobutton -label {30} -variable ${varname}($size) \
+ -value 30 -command $cmd
+ $w add radiobutton -label {36} -variable ${varname}($size) \
+ -value 36 -command $cmd
+ $w add radiobutton -label {72} -variable ${varname}($size) \
+ -value 72 -command $cmd
+ $w add separator
+ $w add command -label "[msgcat::mc {Other Font Size}]..." \
+ -command [list FontMenuSize $varname $size $cmd]
+ $w add separator
+ $w add radiobutton -label [msgcat::mc {Normal}] \
+ -variable ${varname}($weight) -value normal -command $cmd
+ $w add radiobutton -label [msgcat::mc {Bold}] \
+ -variable ${varname}($weight) -value bold -command $cmd
+ $w add separator
+ $w add radiobutton -label [msgcat::mc {Roman}] \
+ -variable ${varname}($slant) -value roman -command $cmd
+ $w add radiobutton -label [msgcat::mc {Italic}] \
+ -variable ${varname}($slant) -value italic -command $cmd
+}
+
+proc FontMenuSize {varname size cmd} {
+ upvar #0 $varname var
+ global $varname
+
+ if {[EntryDialog [msgcat::mc {Font Size}] [msgcat::mc {Enter Font Size}] 20 ${varname}($size)]} {
+ eval $cmd
+ }
+}
+
+proc FontMenuButton {w varname font size weight slant cmd} {
+ upvar #0 $varname var
+ global $varname
+
+ ttk::menubutton $w -textvariable ${varname}($font) -menu $w.menu
+ FontMenu $w.menu $varname $font $size $weight $slant $cmd
+}
+
+# WidthDashMenu
+proc WidthDashMenu {w varname width dash cmd1 cmd2} {
+ upvar #0 $varname var
+ global $varname
+
+ menu $w
+ $w add radiobutton -label {1} -variable ${varname}($width) \
+ -value 1 -command $cmd1
+ $w add radiobutton -label {2} -variable ${varname}($width) \
+ -value 2 -command $cmd1
+ $w add radiobutton -label {3} -variable ${varname}($width) \
+ -value 3 -command $cmd1
+ $w add radiobutton -label {4} -variable ${varname}($width) \
+ -value 4 -command $cmd1
+
+ if {$dash != {}} {
+ $w add separator
+ $w add checkbutton -label [msgcat::mc {Dash}] \
+ -variable ${varname}($dash) -command $cmd2
+ }
+}
+
+proc WidthDashMenuButton {w varname width dash cmd1 cmd2} {
+ upvar #0 $varname var
+ global $varname
+
+ ttk::menubutton $w -textvariable ${varname}($width) -menu $w.menu
+ WidthDashMenu $w.menu $varname $width $dash $cmd1 $cmd2
+}
+
+# Prefs
+proc PrefsDialogMenu {} {
+ global dprefs
+
+ set w $dprefs(tab)
+
+ $dprefs(list) insert end [msgcat::mc {Menus and Buttons}]
+ lappend dprefs(tabs) [ttk::frame $w.menu]
+
+ PrefsDialogFileMenu $w.menu
+ PrefsDialogEditMenu $w.menu
+ PrefsDialogViewMenu $w.menu
+ PrefsDialogFrameMenu $w.menu
+ PrefsDialogBinMenu $w.menu
+ PrefsDialogZoomMenu $w.menu
+ PrefsDialogScaleMenu $w.menu
+ PrefsDialogColorMenu $w.menu
+ PrefsDialogRegionMenu $w.menu
+ PrefsDialogWCSMenu $w.menu
+ PrefsDialogAnalysisMenu $w.menu
+ PrefsDialogHelpMenu $w.menu
+}
+