1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264
|
# Copyright (C) 1999-2020
# Smithsonian Astrophysical Observatory, Cambridge, MA, USA
# For conditions of distribution and use, see copyright notice in "copyright"
package provide DS9 1.0
proc PlotBackupAll {ch dir} {
global iap
# don't save marker analysis plots
foreach ww $iap(plots) {
if {[string range $ww 0 2] != {mkr}} {
set fdir [file join $dir $ww]
# create dir if needed
if {![file isdirectory $fdir]} {
if {[catch {file mkdir $fdir}]} {
Error [msgcat::mc {An error has occurred during backup}]
return
}
}
PlotBackupOne $ww $ch $fdir
}
}
}
proc PlotBackupOne {varname ch fdir} {
upvar #0 $varname var
global $varname
puts $ch "global $varname"
puts $ch "PlotDialog $varname \{$var(tt)\}"
set gr $var(graph,current)
set ds $var(graph,ds,current)
# for each graph
foreach cc $var(graphs) {
set var(graph,current) $cc
PlotCurrentGraph $varname
puts $ch "PlotAddGraph $varname $var($cc,type)"
PlotBackupGraph $varname "$fdir/graph${cc}.plt"
puts $ch "PlotBackupLoadFile $varname $fdir/graph${cc}.plt"
# for each dataset
foreach nn $var($cc,dss) {
set var(graph,ds,current) $nn
PlotCurrentDataSet $varname
PlotSaveDataFile $varname "$fdir/graph${cc}ds${nn}.dat"
puts $ch "PlotLoadDataFile $varname $fdir/graph${cc}ds${nn}.dat $var($cc,$nn,dim)"
PlotBackupDataset $varname "$fdir/graph${cc}ds${nn}.plt"
puts $ch "PlotBackupLoadFile $varname $fdir/graph${cc}ds${nn}.plt"
}
}
PlotBackupCanvas $varname "$fdir/canvas.plt"
puts $ch "PlotBackupLoadFile $varname $fdir/canvas.plt"
puts $ch "wm geometry $var(top) [winfo width $var(top)]x[winfo height $var(top)]"
puts $ch "PlotChangeLayout $varname"
puts $ch "set ${varname}(mode) $var(mode)"
puts $ch "PlotChangeMode $varname"
puts $ch "set ${varname}(graph,current) $gr"
puts $ch "PlotCurrentGraph $varname"
puts $ch "set ${varname}(graph,ds,current) $ds"
puts $ch "PlotCurrentDataSet $varname"
puts $ch "set ${varname}(canvas,theme) $var(canvas,theme)"
puts $ch "PlotUpdateAllElement $varname"
set var(graph,current) $gr
PlotCurrentGraph $varname
set var(graph,ds,current) $ds
PlotCurrentDataSet $varname
}
# used by backup
proc PlotBackupLoadFile {varname fn} {
upvar #0 $varname var
global $varname
source $fn
if {[info exist apca(version)]} {
switch $apca(version) {
8.2 {
array set $varname [array get apca]
unset apca
}
}
$var(graph,proc,updateelement) $varname
PlotUpdateCanvas $varname
PlotUpdateGraph $varname
PlotUpdateMenus $varname
PlotUpdateGUI $varname
}
}
proc PlotBackupCanvas {varname filename} {
upvar #0 $varname var
global $varname
global ds9
set apca(version) $ds9(version)
array set apca [array get $varname "canvas,*"]
set ch [open $filename w]
puts $ch "array set apca \{ [array get apca] \}"
close $ch
}
proc PlotBackupGraph {varname filename} {
upvar #0 $varname var
global $varname
global ds9
set apca(version) $ds9(version)
array set apca [array get $varname "graph,name"]
array set apca [array get $varname "graph,format"]
array set apca [array get $varname "graph,title"]
array set apca [array get $varname "graph,legend*"]
array set apca [array get $varname "graph,axis*"]
set ch [open $filename w]
puts $ch "array set apca \{ [array get apca] \}"
close $ch
}
proc PlotBackupDataset {varname filename} {
upvar #0 $varname var
global $varname
global ds9
set apca(version) $ds9(version)
array set apca [array get $varname "graph,ds,*"]
# cleanup
unset apca(graph,ds,current)
unset apca(graph,ds,dim)
unset apca(graph,ds,xdata)
unset apca(graph,ds,ydata)
unset apca(graph,ds,xedata)
unset apca(graph,ds,yedata)
set ch [open $filename w]
puts $ch "array set apca \{ [array get apca] \}"
close $ch
}
proc PlotBackupDialog {varname} {
upvar #0 $varname var
global $varname
set fn [SaveFileDialog plotbackupfbox]
if {[string length $fn] != 0} {
PlotBackup $varname $fn
}
}
proc PlotBackup {varname fn} {
upvar #0 $varname var
global $varname
set ch {}
set dir {}
if {![BackupPreamble $fn ch dir]} {
return
}
set fdir [file join $dir $varname]
# create dir if needed
if {![file isdirectory $fdir]} {
if {[catch {file mkdir $fdir}]} {
Error [msgcat::mc {An error has occurred during backup}]
return
}
}
PlotBackupOne $varname $ch $fdir
# all done
close $ch
}
proc PlotRestoreDialog {varname} {
upvar #0 $varname var
global $varname
set fn [OpenFileDialog plotbackupfbox]
if {[string length $fn] != 0} {
PlotRestore $varname $fn
}
}
proc PlotRestore {varname fn} {
global iap
# special case
# do we have a plot window?
if {$varname != {}} {
upvar #0 $varname var
global $varname
if {[string length $fn] == 0} {
return
}
PlotDestroy $varname
} else {
# create a new name
set tt $iap(tt)
# make the window name unique
set ii [lsearch $iap(plots) $tt]
if {$ii>=0} {
incr iap(unique)
append tt $iap(unique)
}
set varname $tt
upvar #0 $varname var
global $varname
}
set dir [file dirname $fn]
set ffn [lindex [file split $fn] end]
set cd [pwd]
cd $dir
set src {}
if {![catch {set ch [open "$ffn" r]}]} {
set src [read $ch]
close $ch
} else {
Error [msgcat::mc {An error has occurred during restore}]
return
}
# and load
if {[catch {eval $src}]} {
Error [msgcat::mc {An error has occurred during restore}]
return
}
# return to start dir
cd $cd
}
# used by backup
# backward compatibilty
proc PlotLoadConfigFile {varname fn} {
upvar #0 $varname var
global $varname
}
|