diff options
Diffstat (limited to 'ds9/library')
-rw-r--r-- | ds9/library/plot.tcl | 353 | ||||
-rw-r--r-- | ds9/library/plotconfig.tcl | 8 | ||||
-rw-r--r-- | ds9/library/plotdialog.tcl | 70 | ||||
-rw-r--r-- | ds9/library/plotprocess.tcl | 16 | ||||
-rw-r--r-- | ds9/library/plotstate.tcl | 10 |
5 files changed, 292 insertions, 165 deletions
diff --git a/ds9/library/plot.tcl b/ds9/library/plot.tcl index d54f31f..d0b905e 100644 --- a/ds9/library/plot.tcl +++ b/ds9/library/plot.tcl @@ -61,78 +61,6 @@ proc PlotDestroy {varname} { unset $varname } -proc PlotLayoutCanvas {varname} { - upvar #0 $varname var - global $varname - - set ss [grid size $var(top)] - for {set jj 0} {$jj<[lindex $ss 0]} {incr jj} { - grid columnconfigure $var(top) $jj -weight 0 - } - for {set ii 0} {$ii<[lindex $ss 1]} {incr ii} { - grid rowconfigure $var(top) $ii -weight 0 - } - - foreach cc $var(graphs) { - grid forget $var($cc,canvas) - } - - switch $var(layout) { - grid { - set num [llength $var(graphs)] - set nr [expr int(sqrt($num)+.5)] - set nc [expr int(sqrt($num-1))+1] - - set xx 0 - set yy 0 - foreach cc $var(graphs) { - grid columnconfigure $var(top) $xx -weight 1 - grid rowconfigure $var(top) $yy -weight 1 - grid $var($cc,canvas) -row $yy -column $xx -sticky news - - incr xx - if {$xx==$nc} { - set xx 0 - incr yy - } - } - } - column { - set ii 0 - grid columnconfigure $var(top) 0 -weight 1 - foreach cc $var(graphs) { - grid rowconfigure $var(top) $ii -weight 1 - grid $var($cc,canvas) -row $ii -column 0 -sticky news - incr ii - } - } - row { - set ii 0 - grid rowconfigure $var(top) 0 -weight 1 - foreach cc $var(graphs) { - grid columnconfigure $var(top) $ii -weight 1 - grid $var($cc,canvas) -row 0 -column $ii -sticky news - incr ii - } - } - strip { - set ww 1 - set ii 0 - grid columnconfigure $var(top) 0 -weight 1 - foreach cc $var(graphs) { - grid rowconfigure $var(top) $ii -weight $ww - grid $var($cc,canvas) -row $ii -column 0 -sticky news - - set ww [expr int(100./$var(layout,strip,weight))] - incr ii - } - } - } - - # needed so layout can be properly realized - update idletasks -} - # Graph # used by backup proc PlotAddGraph {varname type} { @@ -405,14 +333,6 @@ proc PlotCurrentDataSet {varname} { PlotStats $varname PlotList $varname } - -proc PlotAxisFormat {varname axis w nn} { - upvar #0 $varname var - global $varname - - return [format $var(graph,axis,$axis,format) $nn] -} - proc PlotChangeAxis {varname} { upvar #0 $varname var global $varname @@ -439,6 +359,21 @@ proc PlotChangeAxis {varname} { } } +proc PlotChangeLegend {varname} { + upvar #0 $varname var + global $varname + + switch $var(layout) { + grid - + column - + row {PlotUpdateGraph $varname} + strip { + PlotUpdateCanvas $varname + PlotUpdateGraph $varname + } + } +} + # used by backup proc PlotChangeLayout {varname} { upvar #0 $varname var @@ -462,6 +397,21 @@ proc PlotChangeLayout {varname} { PlotLayoutCanvas $varname } +proc PlotChangeTitle {varname} { + upvar #0 $varname var + global $varname + + switch $var(layout) { + grid - + column - + row {PlotUpdateGraph $varname} + strip { + PlotUpdateCanvas $varname + PlotUpdateGraph $varname + } + } +} + # used by backup proc PlotChangeMode {varname} { upvar #0 $varname var @@ -483,6 +433,13 @@ proc PlotChangeMode {varname} { } } +proc PlotAxisFormat {varname axis w nn} { + upvar #0 $varname var + global $varname + + return [format $var(graph,axis,$axis,format) $nn] +} + proc PlotList {varname} { upvar #0 $varname var global $varname @@ -623,6 +580,135 @@ proc PlotStatsDestroyCB {varname} { set var(stats) 0 } +proc PlotLayoutCanvas {varname} { + upvar #0 $varname var + global $varname + + set ss [grid size $var(top)] + for {set jj 0} {$jj<[lindex $ss 0]} {incr jj} { + grid columnconfigure $var(top) $jj -weight 0 + } + for {set ii 0} {$ii<[lindex $ss 1]} {incr ii} { + grid rowconfigure $var(top) $ii -weight 0 + } + + foreach cc $var(graphs) { + grid forget $var($cc,canvas) + } + + switch $var(layout) { + grid { + set num [llength $var(graphs)] + set nr [expr int(sqrt($num)+.5)] + set nc [expr int(sqrt($num-1))+1] + + set xx 0 + set yy 0 + foreach cc $var(graphs) { + grid columnconfigure $var(top) $xx -weight 1 + grid rowconfigure $var(top) $yy -weight 1 + grid $var($cc,canvas) -row $yy -column $xx -sticky news + + incr xx + if {$xx==$nc} { + set xx 0 + incr yy + } + } + } + column { + set ii 0 + grid columnconfigure $var(top) 0 -weight 1 + foreach cc $var(graphs) { + grid rowconfigure $var(top) $ii -weight 1 + grid $var($cc,canvas) -row $ii -column 0 -sticky news + incr ii + } + } + row { + set ii 0 + grid rowconfigure $var(top) 0 -weight 1 + foreach cc $var(graphs) { + grid columnconfigure $var(top) $ii -weight 1 + grid $var($cc,canvas) -row 0 -column $ii -sticky news + incr ii + } + } + strip { + set ww 1 + set ii 0 + grid columnconfigure $var(top) 0 -weight 1 + foreach cc $var(graphs) { + grid rowconfigure $var(top) $ii -weight $ww + grid $var($cc,canvas) -row $ii -column 0 -sticky news + + set ww [expr int(100./$var(layout,strip,weight))] + incr ii + } + } + } + + # needed so layout can be properly realized + update idletasks +} + +proc PlotCalcMargins {varname rpixname lpixname} { + upvar $rpixname rpix + upvar $lpixname lpix + upvar #0 $varname var + global $varname + + set rpix 0 + set lpix 0 + + set lchar 0 + set rchar 0 + set ytitle 0 + foreach cc $var(graphs) { + # y axis title + if {$var($cc,axis,y,title) !={}} { + set ytitle 1 + } + + # legend + if {$var($cc,legend)} { + # find max legend dataset name width + set nc 0 + foreach nn $var($cc,dss) { + set nr [string length $var($cc,$nn,name)] + if {$nr > $nc} { + set nc $nr + } + } + switch $var($cc,legend,position) { + top {} + bottom {} + right { + if {$nc > $rchar} { + set rchar $nc + } + } + left { + if {$nc > $lchar} { + set lchar $nc + } + } + plotarea {} + } + } + } + if {$rchar>0} { + set rpix [expr $rpix + int(($var(legend,title,size)*4 + $var(legend,font,size)*$rchar)*.75)] + } + if {$lchar>0} { + set lpix [expr $lpix + int(($var(legend,title,size)*4 + $var(legend,font,size)*$lchar)*.75)] + } + + set rpix [expr 10 + $rpix] + set lpix [expr 8*$var(axis,font,size) + $ytitle*$var(axis,title,size) + $lpix] +} + + # procs # used by backup proc PlotUpdateCanvas {varname} { @@ -631,7 +717,7 @@ proc PlotUpdateCanvas {varname} { global ds9 PlotSaveState $varname - + set first [lindex $var(graphs) 0] set last [lindex $var(graphs) end] @@ -639,8 +725,6 @@ proc PlotUpdateCanvas {varname} { grid - row - column { - set legendpos $var(legend,position) - set var(layout,axis,x,title) {} set var(layout,axis,x,min) 0 set var(layout,axis,x,max) 1 @@ -649,8 +733,6 @@ proc PlotUpdateCanvas {varname} { set var(layout,axis,x,flip) 0 } strip { - set legendpos plotarea - if {$var($first,axis,x,auto)} { if {[info exists ${varname}($first,1,xdata)]} { set xmin [blt::vector expr min($var($first,1,xdata))] @@ -672,14 +754,19 @@ proc PlotUpdateCanvas {varname} { set var(layout,axis,x,flip) $var($first,axis,x,flip) } } - - foreach cc $var(graphs) { - switch $var($cc,type) { - line {} - bar {$var($cc,graph) configure -barmode $var(bar,mode)} - scatter {} + + set right 0 + set left 0 + switch $var(layout) { + grid - + row - + column {} + strip { + PlotCalcMargins $varname right left } - + } + + foreach cc $var(graphs) { $var($cc,graph) configure -plotpadx 0 -plotpady 0 \ -font "{$ds9($var(graph,title,family))} $var(graph,title,size) $var(graph,title,weight) $var(graph,title,slant)" \ -bg $var(background) -plotbackground $var(background) @@ -696,18 +783,14 @@ proc PlotUpdateCanvas {varname} { $var($cc,graph) legend configure \ -bg $var(background) \ - -hide [expr !$var(legend)] \ - -position $legendpos \ -font "{$ds9($var(legend,font,family))} $var(legend,font,size) $var(legend,font,weight) $var(legend,font,slant)" \ -titlefont "{$ds9($var(legend,title,family))} $var(legend,title,size) $var(legend,title,weight) $var(legend,title,slant)" - set var($cc,axis,x,manage) 1 - set var($cc,axis,y,manage) 1 - switch $var(layout) { grid - row - column { + set var($cc,axis,x,manage) 1 $var($cc,graph) configure \ -topmargin 0 -bottommargin 0 \ -leftmargin 0 -rightmargin 0 \ @@ -718,15 +801,12 @@ proc PlotUpdateCanvas {varname} { $var($cc,graph) yaxis configure -showticks 1 -linewidth 1 } strip { - if {$cc != $first} { + if {$cc == $first} { + set var($cc,axis,x,manage) 1 + } else { set var($cc,axis,x,manage) 0 - set var($cc,axis,y,manage) 1 } - set left \ - [expr 10 + 8*$var(axis,font,size) + $var(axis,title,size)] - set right 10 - $var($cc,graph) configure \ -leftmargin $left -rightmargin $right \ -borderwidth 0 \ @@ -791,6 +871,12 @@ proc PlotUpdateGraph {varname} { set xflip $var(layout,axis,x,flip) } + switch $var(graph,type) { + line {} + bar {$var(graph) configure -barmode $var(bar,mode)} + scatter {} + } + if {$var(graph,format)} { if {$var(graph,axis,x,format) != {}} { $var(graph) xaxis configure \ @@ -827,7 +913,48 @@ proc PlotUpdateGraph {varname} { } $var(graph) yaxis configure -title $var(graph,axis,y,title) - $var(graph) legend configure -title $var(graph,legend,title) + + switch $var(layout) { + grid - + row - + column { + $var(graph) legend configure -hide [expr !$var(graph,legend)] \ + -title $var(graph,legend,title) \ + -position $var(graph,legend,position) + } + strip { + switch $var(graph,legend,position) { + top { + if {$var(graph,axis,x,manage)} { + $var(graph) legend configure \ + -hide [expr !$var(graph,legend)] \ + -title $var(graph,legend,title) \ + -position $var(graph,legend,position) + } else { + $var(graph) legend configure -hide yes + } + } + bottom { + if {[$var(graph) xaxis cget -showticks]} { + $var(graph) legend configure \ + -hide [expr !$var(graph,legend)] \ + -title $var(graph,legend,title) \ + -position $var(graph,legend,position) + } else { + $var(graph) legend configure -hide yes + } + } + right - + left - + plotarea { + $var(graph) legend configure \ + -hide [expr !$var(graph,legend)] \ + -title $var(graph,legend,title) \ + -position $var(graph,legend,position) + } + } + } + } } proc PlotButtonInvoke {varname cc nn xx yy} { @@ -884,7 +1011,23 @@ proc PlotTitle {varname title xaxis yaxis} { set var(graph,axis,x,title) "$xaxis" set var(graph,axis,y,title) "$yaxis" - PlotUpdateGraph $varname + PlotChangeTitle $varname +} + +proc PlotDataSetName {varname name} { + upvar #0 $varname var + global $varname + + $var(mb).graph.select entryconfig "$var(graph,ds,name)" -label "$name" + set var(graph,ds,name) $name + $var(graph,proc,updateelement) $varname + + switch $var(layout) { + grid - + row - + column {} + strip {PlotUpdateCanvas $varname} + } } proc PlotBackup {ch dir} { diff --git a/ds9/library/plotconfig.tcl b/ds9/library/plotconfig.tcl index 04040f5..8691d83 100644 --- a/ds9/library/plotconfig.tcl +++ b/ds9/library/plotconfig.tcl @@ -28,8 +28,6 @@ proc PlotLoadConfigFile {varname filename} { set var(graph,title,weight) $analysisplot(graph,title,weight) set var(graph,title,slant) $analysisplot(graph,title,slant) - set var(legend) $analysisplot(legend) - set var(legend,position) $analysisplot(legend,position) set var(legend,title,family) $analysisplot(legend,title,family) set var(legend,title,size) $analysisplot(legend,title,size) set var(legend,title,weight) $analysisplot(legend,title,weight) @@ -50,7 +48,9 @@ proc PlotLoadConfigFile {varname filename} { set var(axis,font,slant) $analysisplot(axis,font,slant) # per Graph + set var(graph,legend) $analysisplot(legend) set var(graph,legend,title) $analysisplot(legend,title) + set var(graph,legend,position) $analysisplot(legend,position) set var(graph,axis,x,title) $analysisplot(axis,x,title) set var(graph,axis,x,grid) $analysisplot(axis,x,grid) @@ -208,8 +208,6 @@ proc PlotSaveConfigFile {varname filename} { set analysisplot(graph,title,weight) $var(graph,title,weight) set analysisplot(graph,title,slant) $var(graph,title,slant) - set analysisplot(legend) $var(legend) - set analysisplot(legend,position) $var(legend,position) set analysisplot(legend,title,family) $var(legend,title,family) set analysisplot(legend,title,size) $var(legend,title,size) set analysisplot(legend,title,weight) $var(legend,title,weight) @@ -232,7 +230,9 @@ proc PlotSaveConfigFile {varname filename} { # per Graph set analysisplot(graph,title) $var(graph,title) + set analysisplot(legend) $var(graph,legend) set analysisplot(legend,title) $var(graph,legend,title) + set analysisplot(legend,position) $var(graph,legend,position) set analysisplot(axis,x,title) $var(graph,axis,x,title) set analysisplot(axis,x,grid) $var(graph,axis,x,grid) diff --git a/ds9/library/plotdialog.tcl b/ds9/library/plotdialog.tcl index 485ea09..a9ff09a 100644 --- a/ds9/library/plotdialog.tcl +++ b/ds9/library/plotdialog.tcl @@ -118,9 +118,6 @@ proc PlotDialog {varname wtt} { $var(mb).canvas add separator $var(mb).canvas add cascade -label [msgcat::mc {Layout}] \ -menu $var(mb).canvas.layout - $var(mb).canvas add separator - $var(mb).canvas add cascade -label [msgcat::mc {Legend}] \ - -menu $var(mb).canvas.legend $var(mb).canvas add cascade -label [msgcat::mc {Font}] \ -menu $var(mb).canvas.font $var(mb).canvas add cascade -label [msgcat::mc {Background}] \ @@ -155,24 +152,6 @@ proc PlotDialog {varname wtt} { -label "[msgcat::mc {Strip Parameters}]..." \ -command [list PlotStripDialog $varname] - menu $var(mb).canvas.legend - $var(mb).canvas.legend add checkbutton -label [msgcat::mc {Show}] \ - -variable ${varname}(legend) \ - -command [list PlotUpdateCanvas $varname] - $var(mb).canvas.legend add separator - $var(mb).canvas.legend add radiobutton -label [msgcat::mc {Right}] \ - -variable ${varname}(legend,position) -value right \ - -command [list PlotUpdateCanvas $varname] - $var(mb).canvas.legend add radiobutton -label [msgcat::mc {Left}] \ - -variable ${varname}(legend,position) -value left \ - -command [list PlotUpdateCanvas $varname] - $var(mb).canvas.legend add radiobutton -label [msgcat::mc {Top}] \ - -variable ${varname}(legend,position) -value top \ - -command [list PlotUpdateCanvas $varname] - $var(mb).canvas.legend add radiobutton -label [msgcat::mc {Bottom}] \ - -variable ${varname}(legend,position) -value bottom \ - -command [list PlotUpdateCanvas $varname] - menu $var(mb).canvas.font $var(mb).canvas.font add cascade -label [msgcat::mc {Title}] \ -menu $var(mb).canvas.font.title @@ -223,12 +202,14 @@ proc PlotDialog {varname wtt} { $var(mb).graph add cascade -label [msgcat::mc {Axes}] \ -menu $var(mb).graph.axes - $var(mb).graph add separator - $var(mb).graph add command -label "[msgcat::mc {Titles}]..." \ - -command [list PlotGraphTitleDialog $varname] + $var(mb).graph add cascade -label [msgcat::mc {Legend}] \ + -menu $var(mb).graph.legend $var(mb).graph add separator $var(mb).graph add cascade -label [msgcat::mc {Bar Mode}] \ -menu $var(mb).graph.barmode + $var(mb).graph add separator + $var(mb).graph add command -label "[msgcat::mc {Titles}]..." \ + -command [list PlotGraphTitleDialog $varname] menu $var(mb).graph.select @@ -256,20 +237,40 @@ proc PlotDialog {varname wtt} { $var(mb).graph.axes add command -label "[msgcat::mc {Range}]..." \ -command [list PlotRangeDialog $varname] - # Graph Mode + menu $var(mb).graph.legend + $var(mb).graph.legend add checkbutton -label [msgcat::mc {Show}] \ + -variable ${varname}(graph,legend) \ + -command [list PlotChangeLegend $varname] + $var(mb).graph.legend add separator + $var(mb).graph.legend add radiobutton -label [msgcat::mc {Right}] \ + -variable ${varname}(graph,legend,position) -value right \ + -command [list PlotChangeLegend $varname] + $var(mb).graph.legend add radiobutton -label [msgcat::mc {Left}] \ + -variable ${varname}(graph,legend,position) -value left \ + -command [list PlotChangeLegend $varname] + $var(mb).graph.legend add radiobutton -label [msgcat::mc {Top}] \ + -variable ${varname}(graph,legend,position) -value top \ + -command [list PlotChangeLegend $varname] + $var(mb).graph.legend add radiobutton -label [msgcat::mc {Bottom}] \ + -variable ${varname}(graph,legend,position) -value bottom \ + -command [list PlotChangeLegend $varname] + $var(mb).graph.legend add radiobutton -label [msgcat::mc {Plot Area}] \ + -variable ${varname}(graph,legend,position) -value plotarea \ + -command [list PlotChangeLegend $varname] + menu $var(mb).graph.barmode $var(mb).graph.barmode add radiobutton -label [msgcat::mc {Normal}] \ -variable ${varname}(bar,mode) -value normal \ - -command [list PlotUpdateCanvas $varname] + -command [list PlotUpdateGraph $varname] $var(mb).graph.barmode add radiobutton -label [msgcat::mc {Stacked}] \ -variable ${varname}(bar,mode) -value stacked \ - -command [list PlotUpdateCanvas $varname] + -command [list PlotUpdateGraph $varname] $var(mb).graph.barmode add radiobutton -label [msgcat::mc {Aligned}] \ -variable ${varname}(bar,mode) -value aligned \ - -command [list PlotUpdateCanvas $varname] + -command [list PlotUpdateGraph $varname] $var(mb).graph.barmode add radiobutton -label [msgcat::mc {Overlap}] \ -variable ${varname}(bar,mode) -value overlap \ - -command [list PlotUpdateCanvas $varname] + -command [list PlotUpdateGraph $varname] PlotLineMenus $varname PlotBarMenus $varname @@ -519,7 +520,7 @@ proc PlotGraphTitleDialog {varname} { set var(graph,axis,y,title) $ed(graph,axis,y,title) set var(graph,legend,title) $ed(graph,legend,title) - PlotUpdateGraph $varname + PlotChangeTitle $varname } set rr $ed(ok) @@ -566,10 +567,7 @@ proc DatasetNameDialog {varname} { DialogDismiss $w if {$ed(ok)} { - $var(mb).graph.select entryconfig "$var(graph,ds,name)" \ - -label "$ed(name)" - set var(graph,ds,name) $ed(name) - $var(graph,proc,updateelement) $varname + PlotDataSetName $varname $ed(name) } set rr $ed(ok) @@ -716,7 +714,6 @@ proc PlotUpdateMenus {varname} { } } - if {[llength $var(graph,dss)] == 0} { $var(mb).graph entryconfig [msgcat::mc {Duplicate Dataset}] \ -state disabled @@ -749,17 +746,14 @@ proc PlotUpdateMenus {varname} { line { $var(mb) add cascade -label [msgcat::mc {Data}] \ -menu $var(mb).dataline - $var(mb).graph entryconfig [msgcat::mc {Bar Mode}] -state disabled } bar { $var(mb) add cascade -label [msgcat::mc {Data}] \ -menu $var(mb).databar - $var(mb).graph entryconfig [msgcat::mc {Bar Mode}] -state normal } scatter { $var(mb) add cascade -label [msgcat::mc {Data}] \ -menu $var(mb).datascatter - $var(mb).graph entryconfig [msgcat::mc {Bar Mode}] -state disabled } } diff --git a/ds9/library/plotprocess.tcl b/ds9/library/plotprocess.tcl index 62ffbaf..a09efa2 100644 --- a/ds9/library/plotprocess.tcl +++ b/ds9/library/plotprocess.tcl @@ -268,22 +268,6 @@ proc PlotCmdSaveConfig {fn} { } } -proc PlotCmdUpdateCanvas {which value} { - global cvarname - upvar #0 $cvarname cvar - - set cvar($which) $value - PlotUpdateCanvas $cvarname -} - -proc PlotCmdUpdateGraph {which value} { - global cvarname - upvar #0 $cvarname cvar - - set cvar($which) $value - PlotUpdateGraph $cvarname -} - proc PlotCmdUpdateElement {which value} { global cvarname upvar #0 $cvarname cvar diff --git a/ds9/library/plotstate.tcl b/ds9/library/plotstate.tcl index 58e7404..70c1c76 100644 --- a/ds9/library/plotstate.tcl +++ b/ds9/library/plotstate.tcl @@ -28,8 +28,6 @@ proc PlotDefState {} { set pap(graph,title,weight) normal set pap(graph,title,slant) roman - set pap(legend) 0 - set pap(legend,position) right set pap(legend,title,family) helvetica set pap(legend,title,size) 10 set pap(legend,title,weight) normal @@ -49,7 +47,9 @@ proc PlotDefState {} { set pap(axis,font,slant) roman # per Graph + set pap(graph,legend) 0 set pap(graph,legend,title) Legend + set pap(graph,legend,position) right set pap(graph,axis,x,title) {} set pap(graph,axis,x,grid) 1 @@ -115,7 +115,9 @@ proc PlotInitGraph {varname} { set var(graph,seq) 0 set var(graph,dss) {} + set var(graph,legend) $pap(graph,legend) set var(graph,legend,title) $pap(graph,legend,title) + set var(graph,legend,position) $pap(graph,legend,position) set var(graph,axis,x,manage) 1 set var(graph,axis,x,title) $pap(graph,axis,x,title) @@ -189,7 +191,9 @@ proc PlotSaveState {varname} { set var($cc,seq) $var(graph,seq) set var($cc,dss) $var(graph,dss) + set var($cc,legend) $var(graph,legend) set var($cc,legend,title) $var(graph,legend,title) + set var($cc,legend,position) $var(graph,legend,position) set var($cc,axis,x,manage) $var(graph,axis,x,manage) set var($cc,axis,x,title) $var(graph,axis,x,title) @@ -263,7 +267,9 @@ proc PlotRestoreState {varname} { set var(graph,seq) $var($cc,seq) set var(graph,dss) $var($cc,dss) + set var(graph,legend) $var($cc,legend) set var(graph,legend,title) $var($cc,legend,title) + set var(graph,legend,position) $var($cc,legend,position) set var(graph,axis,x,manage) $var($cc,axis,x,manage) set var(graph,axis,x,title) $var($cc,axis,x,title) |