# 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 # 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 } } }