diff options
Diffstat (limited to 'ds9/library/mcolor.tcl')
-rw-r--r-- | ds9/library/mcolor.tcl | 498 |
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 + } + } +} |