summaryrefslogtreecommitdiffstats
path: root/ds9/library/mcolor.tcl
diff options
context:
space:
mode:
authorWilliam Joye <wjoye@cfa.harvard.edu>2016-10-27 19:01:15 (GMT)
committerWilliam Joye <wjoye@cfa.harvard.edu>2016-10-27 19:01:15 (GMT)
commit12166aa342f7c8d905097e43a1f50e0775503069 (patch)
tree73a6e7296fbf9898633a02c2503a3e959789d8c3 /ds9/library/mcolor.tcl
parentd4d595fa7fb12903db9227d33d48b2b00120dbd1 (diff)
downloadblt-12166aa342f7c8d905097e43a1f50e0775503069.zip
blt-12166aa342f7c8d905097e43a1f50e0775503069.tar.gz
blt-12166aa342f7c8d905097e43a1f50e0775503069.tar.bz2
Initial commit
Diffstat (limited to 'ds9/library/mcolor.tcl')
-rw-r--r--ds9/library/mcolor.tcl498
1 files changed, 498 insertions, 0 deletions
diff --git a/ds9/library/mcolor.tcl b/ds9/library/mcolor.tcl
new file mode 100644
index 0000000..782b451
--- /dev/null
+++ b/ds9/library/mcolor.tcl
@@ -0,0 +1,498 @@
+# 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
+
+# Menus
+
+# Default colormap names
+# [msgcat::mc {grey}]
+# [msgcat::mc {red}]
+# [msgcat::mc {green}]
+# [msgcat::mc {blue}]
+# [msgcat::mc {heat}]
+# [msgcat::mc {cool}]
+# [msgcat::mc {rainbow}]
+# [msgcat::mc {standard}]
+# [msgcat::mc {staircase}]
+# [msgcat::mc {color}]
+
+proc ColorMainMenu {} {
+ global colorbar
+ global icolorbar
+ global ds9
+
+ menu $ds9(mb).color
+
+ set id [colorbar list id]
+ # base
+ foreach jj $id {
+ set name [colorbar get name $jj]
+ $ds9(mb).color add radiobutton \
+ -label [msgcat::mc $name] \
+ -variable colorbar(map) -value $name \
+ -command "ChangeColormapID $jj"
+ incr icolorbar(count)
+ }
+
+ set icolorbar(end) $icolorbar(count)
+ set icolorbar(h5) $icolorbar(count)
+ set icolorbar(matplotlib) $icolorbar(count)
+ set icolorbar(cubehelix) $icolorbar(count)
+ set icolorbar(gist) $icolorbar(count)
+ set icolorbar(topo) $icolorbar(count)
+ set icolorbar(user) $icolorbar(count)
+
+ $ds9(mb).color add separator
+ $ds9(mb).color add cascade -label [msgcat::mc {h5utils}] \
+ -menu $ds9(mb).color.h5
+ $ds9(mb).color add cascade -label [msgcat::mc {Matplotlib}] \
+ -menu $ds9(mb).color.matplotlib
+ $ds9(mb).color add cascade -label [msgcat::mc {Cubehelix}] \
+ -menu $ds9(mb).color.cubehelix
+ $ds9(mb).color add cascade -label [msgcat::mc {Gist}] \
+ -menu $ds9(mb).color.gist
+ $ds9(mb).color add cascade -label [msgcat::mc {Topographic}] \
+ -menu $ds9(mb).color.topo
+ $ds9(mb).color add cascade -label [msgcat::mc {User}] \
+ -menu $ds9(mb).color.user
+ $ds9(mb).color add separator
+ $ds9(mb).color add checkbutton -label [msgcat::mc {Invert Colormap}] \
+ -variable colorbar(invert) -command InvertColorbar
+ $ds9(mb).color add command -label [msgcat::mc {Reset Colormap}] \
+ -command ResetColormap
+ $ds9(mb).color add separator
+ $ds9(mb).color add cascade -label [msgcat::mc {Colorbar}] \
+ -menu $ds9(mb).color.colorbar
+ $ds9(mb).color add separator
+ $ds9(mb).color add command -label "[msgcat::mc {Colormap Parameters}]..." \
+ -command ColormapDialog
+
+ menu $ds9(mb).color.h5
+ menu $ds9(mb).color.matplotlib
+ menu $ds9(mb).color.cubehelix
+ menu $ds9(mb).color.gist
+ menu $ds9(mb).color.topo
+ menu $ds9(mb).color.user
+
+ menu $ds9(mb).color.colorbar
+ $ds9(mb).color.colorbar add cascade -label [msgcat::mc {Orientation}] \
+ -menu $ds9(mb).color.colorbar.orient
+ $ds9(mb).color.colorbar add cascade -label [msgcat::mc {Numerics}] \
+ -menu $ds9(mb).color.colorbar.numerics
+ $ds9(mb).color.colorbar add cascade -label [msgcat::mc {Font}] \
+ -menu $ds9(mb).color.colorbar.cb
+ $ds9(mb).color.colorbar add separator
+ $ds9(mb).color.colorbar add command \
+ -label "[msgcat::mc {Size}]..." \
+ -command ColorbarSizeDialog
+ $ds9(mb).color.colorbar add command \
+ -label "[msgcat::mc {Number of Ticks}]..." \
+ -command TicksDialog
+
+ menu $ds9(mb).color.colorbar.orient
+ $ds9(mb).color.colorbar.orient add radiobutton \
+ -label [msgcat::mc {Horizontal}] -variable colorbar(orientation) \
+ -value horizontal -command UpdateView
+ $ds9(mb).color.colorbar.orient add radiobutton \
+ -label [msgcat::mc {Vertical}] -variable colorbar(orientation) \
+ -value vertical -command UpdateView
+
+ menu $ds9(mb).color.colorbar.numerics
+ $ds9(mb).color.colorbar.numerics add checkbutton \
+ -label [msgcat::mc {Show}] -variable colorbar(numerics) \
+ -command UpdateView
+ $ds9(mb).color.colorbar.numerics add separator
+ $ds9(mb).color.colorbar.numerics add radiobutton \
+ -label [msgcat::mc {Space Equal Value}] -variable colorbar(space) \
+ -value 1 -command UpdateView
+ $ds9(mb).color.colorbar.numerics add radiobutton \
+ -label [msgcat::mc {Space Equal Distance}] -variable colorbar(space) \
+ -value 0 -command UpdateView
+
+ FontMenu $ds9(mb).color.colorbar.cb colorbar font font,size font,weight \
+ font,slant UpdateView
+
+ CreateExColorMenu h5
+ CreateExColorMenu matplotlib
+ CreateExColorMenu cubehelix
+ CreateExColorMenu gist
+ CreateExColorMenu topo
+ CreateExColorMenu user
+}
+
+proc CreateExColorMenu {which} {
+ global ds9
+ global icolorbar
+
+ # save start location
+ set icolorbar($which) $icolorbar(count)
+
+ foreach fn $icolorbar($which,fn) {
+ if {[lindex $fn 0] == {-}} {
+ $ds9(mb).color.$which add separator
+ } else {
+ set ch [open "$ds9(root)/cmaps/$fn" r]
+ global vardata
+ set vardata [read $ch]
+ close $ch
+
+ colorbar load var "\{$fn\}" vardata
+ set id [colorbar get id]
+ set map [colorbar get name]
+ incr icolorbar(count)
+
+ $ds9(mb).color.$which add radiobutton \
+ -label "$map" \
+ -variable colorbar(map) \
+ -command [list ChangeColormapID $id]
+ }
+ }
+}
+
+proc PrefsDialogColorMenu {w} {
+ global colorbar
+ global icolorbar
+ global pcolorbar
+
+ set f [ttk::labelframe $w.mcolor -text [msgcat::mc {Color}]]
+
+ ttk::menubutton $f.menu -text [msgcat::mc {Menu}] -menu $f.menu.menu
+ PrefsDialogButtonbarColor $f.buttonbar
+
+ grid $f.menu $f.buttonbar -padx 2 -pady 2 -sticky w
+
+ set m $f.menu.menu
+ menu $m
+
+ set id [colorbar list id]
+ # base
+ for {set ii 0} {$ii<$icolorbar(end)} {incr ii} {
+ set jj [lindex $id $ii]
+ set name [colorbar get name $jj]
+ $m add radiobutton -label [msgcat::mc $name] \
+ -variable pcolorbar(map) -value $name
+ }
+
+ $m add separator
+ $m add checkbutton -label [msgcat::mc {Invert Colormap}] \
+ -variable pcolorbar(invert)
+ $m add separator
+ $m add cascade -label [msgcat::mc {Colorbar}] -menu $m.colorbar
+
+ menu $m.colorbar
+ $m.colorbar add cascade -label [msgcat::mc {Orientation}] \
+ -menu $m.colorbar.orient
+ $m.colorbar add cascade -label [msgcat::mc {Numerics}] \
+ -menu $m.colorbar.numerics
+ $m.colorbar add cascade -label [msgcat::mc {Font}] \
+ -menu $m.colorbar.cb
+
+ menu $m.colorbar.orient
+ $m.colorbar.orient add radiobutton -label [msgcat::mc {Horizontal}] \
+ -variable pcolorbar(orientation) -value horizontal
+ $m.colorbar.orient add radiobutton -label [msgcat::mc {Vertical}] \
+ -variable pcolorbar(orientation) -value vertical
+
+ menu $m.colorbar.numerics
+ $m.colorbar.numerics add checkbutton -label [msgcat::mc {Show}] \
+ -variable pcolorbar(numerics)
+ $m.colorbar.numerics add separator
+ $m.colorbar.numerics add radiobutton \
+ -label [msgcat::mc {Space Equal Value}] \
+ -variable pcolorbar(space) -value 1
+ $m.colorbar.numerics add radiobutton \
+ -label [msgcat::mc {Space Equal Distance}] \
+ -variable pcolorbar(space) -value 0
+
+ FontMenu $m.colorbar.cb pcolorbar font font,size font,weight \
+ font,slant {}
+
+ pack $f -side top -fill both -expand true
+}
+
+proc PrefsDialogColor {} {
+ global dprefs
+ global colorbar
+ global icolorbar
+ global pcolorbar
+
+ set w $dprefs(tab)
+
+ $dprefs(list) insert end [msgcat::mc {Color}]
+ lappend dprefs(tabs) [ttk::frame $w.color]
+
+ set f [ttk::labelframe $w.color.colorbar -text [msgcat::mc {Colorbar}]]
+
+ ttk::label $f.tsize -text [msgcat::mc {Colorbar Size}]
+ ttk::entry $f.size -textvariable pcolorbar(size) -width 10
+
+ ttk::label $f.tticks -text [msgcat::mc {Number of Ticks}]
+ ttk::entry $f.ticks -textvariable pcolorbar(ticks) -width 10
+
+ ttk::label $f.tcolor -text [msgcat::mc {Tag Color}]
+ ColorMenuButton $f.color pcolorbar tag {}
+
+ grid $f.tsize $f.size -padx 2 -pady 2 -sticky w
+ grid $f.tticks $f.ticks -padx 2 -pady 2 -sticky w
+ grid $f.tcolor $f.color -padx 2 -pady 2 -sticky w
+
+ pack $f -side top -fill both -expand true
+}
+
+# Buttons
+
+proc ButtonsColorDef {} {
+ global pbuttons
+
+ # we have a chicken or the egg problem
+ # the colorbar has not been defined yet, but we must define vars
+ # before prefs are processed, so hard code all default cmaps
+ array set pbuttons {
+ color,grey 1
+ color,red 0
+ color,green 0
+ color,blue 0
+ color,a 1
+ color,b 1
+ color,bb 1
+ color,he 1
+ color,i8 1
+ color,aips0 1
+ color,sls 0
+ color,hsv 0
+ color,heat 1
+ color,cool 1
+ color,rainbow 1
+ color,standard 0
+ color,staircase 0
+ color,color 0
+ color,invert 0
+ color,reset 0
+ color,horz 0
+ color,vert 0
+ color,numerics 0
+ color,numvalue 0
+ color,numspace 0
+ color,params 0
+ }
+}
+
+proc CreateButtonsColor {} {
+ global buttons
+ global ds9
+ global colorbar
+ global icolorbar
+
+ ttk::frame $ds9(buttons).color
+
+ set id [colorbar list id]
+ # base
+ for {set ii 0} {$ii<$icolorbar(end)} {incr ii} {
+ set jj [lindex $id $ii]
+ set name [colorbar get name $jj]
+ RadioButton $ds9(buttons).color.$name [msgcat::mc $name] \
+ colorbar(map) $name "ChangeColormapID $jj"
+ }
+
+ CheckButton $ds9(buttons).color.invert \
+ [string tolower [msgcat::mc {Invert}]] colorbar(invert) InvertColorbar
+ ButtonButton $ds9(buttons).color.reset \
+ [string tolower [msgcat::mc {Reset}]] ResetColormap
+ RadioButton $ds9(buttons).color.horz \
+ [string tolower [msgcat::mc {Horizontal}]] \
+ colorbar(orientation) horizontal UpdateView
+ RadioButton $ds9(buttons).color.vert \
+ [string tolower [msgcat::mc {Vertical}]] \
+ colorbar(orientation) vertical UpdateView
+ CheckButton $ds9(buttons).color.numerics \
+ [string tolower [msgcat::mc {Numerics}]] \
+ colorbar(numerics) UpdateView
+ RadioButton $ds9(buttons).color.numvalue \
+ [string tolower [msgcat::mc {Value}]] \
+ colorbar(space) 1 UpdateView
+ RadioButton $ds9(buttons).color.numspace \
+ [string tolower [msgcat::mc {Distance}]] \
+ colorbar(space) 0 UpdateView
+
+ ButtonButton $ds9(buttons).color.params \
+ [string tolower [msgcat::mc {Parameters}]] ColormapDialog
+
+ set buttons(color) {}
+ set id [colorbar list id]
+ # base
+ for {set ii 0} {$ii<$icolorbar(end)} {incr ii} {
+ set jj [lindex $id $ii]
+ set name [colorbar get name $jj]
+ append buttons(color) "$ds9(buttons).color.$name pbuttons(color,$name) "
+ }
+
+ append buttons(color) "$ds9(buttons).color.invert pbuttons(color,invert) "
+ append buttons(color) "$ds9(buttons).color.reset pbuttons(color,reset) "
+ append buttons(color) "$ds9(buttons).color.horz pbuttons(color,horz) "
+ append buttons(color) "$ds9(buttons).color.vert pbuttons(color,vert) "
+ append buttons(color) "$ds9(buttons).color.numerics pbuttons(color,numerics) "
+ append buttons(color) "$ds9(buttons).color.numvalue pbuttons(color,numvalue) "
+ append buttons(color) "$ds9(buttons).color.numspace pbuttons(color,numspace) "
+ append buttons(color) "$ds9(buttons).color.params pbuttons(color,params) "
+}
+
+proc PrefsDialogButtonbarColor {f} {
+ global icolorbar
+ global buttons
+ global pbuttons
+
+ ttk::menubutton $f -text [msgcat::mc {Buttonbar}] -menu $f.menu
+
+ set m $f.menu
+ menu $m
+
+ set id [colorbar list id]
+ # base
+ for {set ii 0} {$ii<$icolorbar(end)} {incr ii} {
+ set jj [lindex $id $ii]
+ set name [colorbar get name $jj]
+ $m add checkbutton -label [msgcat::mc $name] \
+ -variable pbuttons(color,$name) \
+ -command {UpdateButtons buttons(color)}
+ }
+
+ $m add separator
+ $m add checkbutton -label [msgcat::mc {Invert Colormap}] \
+ -variable pbuttons(color,invert) \
+ -command {UpdateButtons buttons(color)}
+ $m add checkbutton -label [msgcat::mc {Reset Colormap}] \
+ -variable pbuttons(color,reset) \
+ -command {UpdateButtons buttons(color)}
+ $m add separator
+ $m add cascade -label [msgcat::mc {Colorbar}] -menu $m.colorbar
+ $m add separator
+ $m add checkbutton -label "[msgcat::mc {Colormap Parameters}]..." \
+ -variable pbuttons(color,params) \
+ -command {UpdateButtons buttons(color)}
+
+ menu $m.colorbar
+ $m.colorbar add cascade -label [msgcat::mc {Orientation}] \
+ -menu $m.colorbar.orient
+ $m.colorbar add cascade -label [msgcat::mc {Numerics}] \
+ -menu $m.colorbar.numerics
+
+ menu $m.colorbar.orient
+ $m.colorbar.orient add checkbutton -label [msgcat::mc {Horizontal}] \
+ -variable pbuttons(color,horz) \
+ -command {UpdateButtons buttons(color)}
+ $m.colorbar.orient add checkbutton -label [msgcat::mc {Vertical}] \
+ -variable pbuttons(color,vert) \
+ -command {UpdateButtons buttons(color)}
+
+ menu $m.colorbar.numerics
+ $m.colorbar.numerics add checkbutton -label [msgcat::mc {Show}] \
+ -variable pbuttons(color,numerics) \
+ -command {UpdateButtons buttons(color)}
+ $m.colorbar.numerics add separator
+ $m.colorbar.numerics add checkbutton -label [msgcat::mc {Equal Value}] \
+ -variable pbuttons(color,numvalue) \
+ -command {UpdateButtons buttons(color)}
+ $m.colorbar.numerics add checkbutton -label [msgcat::mc {Equal Spacing}] \
+ -variable pbuttons(color,numspace) \
+ -command {UpdateButtons buttons(color)}
+}
+
+# Support
+
+proc UpdateColorMenu {} {
+ global icolorbar
+ global ds9
+ global current
+ global buttons
+
+ global debug
+ if {$debug(tcl,update)} {
+ puts stderr "UpdateColorMenu"
+ }
+
+ set end [expr $icolorbar(end)+$icolorbar(start)]
+ if {$current(frame) != {}} {
+ switch [$current(frame) get type] {
+ base -
+ 3d {
+ # menus
+ # base
+ for {set ii $icolorbar(start)} {$ii<$end} {incr ii} {
+ $ds9(mb).color entryconfig $ii -state normal
+ }
+ $ds9(mb).color entryconfig [msgcat::mc {h5utils}] \
+ -state normal
+ $ds9(mb).color entryconfig [msgcat::mc {Matplotlib}] \
+ -state normal
+ $ds9(mb).color entryconfig [msgcat::mc {Cubehelix}] \
+ -state normal
+ $ds9(mb).color entryconfig [msgcat::mc {Gist}] \
+ -state normal
+ $ds9(mb).color entryconfig [msgcat::mc {Topographic}] \
+ -state normal
+ $ds9(mb).color entryconfig [msgcat::mc {User}] \
+ -state normal
+
+ # buttons
+ set id [colorbar list id]
+ # base
+ for {set ii 0} {$ii<$icolorbar(end)} {incr ii} {
+ set jj [lindex $id $ii]
+ set name [colorbar get name $jj]
+ $ds9(buttons).color.$name configure -state normal
+ }
+ }
+ rgb {
+ # menus
+ # base
+ for {set ii $icolorbar(start)} {$ii<$end} {incr ii} {
+ $ds9(mb).color entryconfig $ii -state disabled
+ }
+ $ds9(mb).color entryconfig [msgcat::mc {h5utils}] \
+ -state disabled
+ $ds9(mb).color entryconfig [msgcat::mc {Matplotlib}] \
+ -state disabled
+ $ds9(mb).color entryconfig [msgcat::mc {Cubehelix}] \
+ -state disabled
+ $ds9(mb).color entryconfig [msgcat::mc {Gist}] \
+ -state disabled
+ $ds9(mb).color entryconfig [msgcat::mc {Topographic}] \
+ -state disabled
+ $ds9(mb).color entryconfig [msgcat::mc {User}] \
+ -state disable
+
+ # buttons
+ set id [colorbar list id]
+ # base
+ for {set ii 0} {$ii<$icolorbar(end)} {incr ii} {
+ set jj [lindex $id $ii]
+ set name [colorbar get name $jj]
+ $ds9(buttons).color.$name configure -state disabled
+ }
+ }
+ }
+ } else {
+ # menus
+ # base
+ for {set ii $icolorbar(start)} {$ii<$end} {incr ii} {
+ $ds9(mb).color entryconfig $ii -state normal
+ }
+ $ds9(mb).color entryconfig [msgcat::mc {h5utils}] -state normal
+ $ds9(mb).color entryconfig [msgcat::mc {Matplotlib}] -state normal
+ $ds9(mb).color entryconfig [msgcat::mc {Cubehelix}] -state normal
+ $ds9(mb).color entryconfig [msgcat::mc {Gist}] -state normal
+ $ds9(mb).color entryconfig [msgcat::mc {Topographic}] -state normal
+ $ds9(mb).color entryconfig [msgcat::mc {User}] -state normal
+
+ # buttons
+ set id [colorbar list id]
+ # base
+ for {set ii 0} {$ii<$icolorbar(end)} {incr ii} {
+ set jj [lindex $id $ii]
+ set name [colorbar get name $jj]
+ $ds9(buttons).color.$name configure -state normal
+ }
+ }
+}