1 # High-level operation with layers
5 proc open_layer {filename} {
7 if ![file exists $filename] {
8 if [file exist $filename.epp] {
11 tk_messageBox -message "File $filename doesn't exists" -type ok
14 if {[file extension $filename]==".epp"} {
16 set basename [file rootname $filename]
17 set layer [layer create raster -file $filename -title $basename ]
19 if [file exists $basename.leg] {
20 $layer configure -legfile $basename.leg
21 set legend [$layer cget -legend]
22 if [string length [$legend title]] {
23 $layer configure -title [$legend title]
26 if [file exists $basename.clr] {
27 $layer configure -palfile $basename.clr
31 set layer [uplevel #0 source [list $filename]]
32 set layerFile($layer) $filename
38 #if ![llength $argv] {
39 # set argv [tk_getOpenFile -filetypes {{"Epp files" *.epp}
40 # {"fGIS layers" *.lay}}]
43 proc show_layer {layer} {
45 if ![string length $layer] return
46 wm title . "Mapview: [$layer title]"
47 $planchet show $layer -base
50 proc add_layer {{file {}}} {
52 if ![string length $file] {
53 set file [tk_getOpenFile -filetypes {{"Epp files" *.epp}
54 {"fGIS layers" *.lay}}]
56 if ![string length $file] return
57 set layer [open_layer $file]
58 if ![llength [$planchet layers]] {
61 $planchet look add $layer
62 catch {.menu.file.m entryconfig "Save..." -state normal}
63 catch {.menu.file.m entryconfig "Close..." -state normal}
65 catch {.menu.layer.m entryconfig $i -state normal}
70 proc select_layers {} {
72 foreach layer [$planchet look list] {
75 catch {destroy .chooser}
77 wm title .chooser "Select layer"
79 listbox .chooser.t.l -width 40 -height 10 -yscrollcommand ".chooser.t.y set" -selectmode extended
80 scrollbar .chooser.t.y -orient vert -command ".chooser.t.l yview"
81 pack .chooser.t.l .chooser.t.y -side left -fill both -expand y
82 pack .chooser.t -fill both -expand y
84 button .chooser.b.ok -padx 10 -text "Apply" -command {setup_look .chooser.t.l}
85 button .chooser.b.cancel -padx 10 -text "Close" -command {destroy .chooser}
86 pack .chooser.b.ok -side left
87 pack .chooser.b.cancel -side left
90 foreach layer [layer names] {
92 $box insert end [$layer title]
93 if [info exist on($layer)] {
100 proc setup_look {box} {
102 set layers [layer names]
103 $planchet look remove all
104 foreach n [$box curselection] {
105 $planchet look add [lindex $layers $n]
109 proc select_layer {} {
111 catch {destroy .chooser}
113 wm title .chooser "Select layer"
114 wm transient .chooser
116 bind .chooser <Destroy> {set selectedLayer ""}
117 listbox .chooser.t.l -width 40 -height 10 -yscrollcommand ".chooser.t.y set" -exportselection false
118 scrollbar .chooser.t.y -orient vert -command ".chooser.t.l yview"
119 pack .chooser.t.l .chooser.t.y -side left -fill both -expand y
120 pack .chooser.t -fill both -expand y
122 bind .chooser.t.l <Double-1> {set selectedLayer [.chooser.t.l index active]}
123 button .chooser.b.ok -padx 10 -text "Ok" -command {set selectedLayer [.chooser.t.l curselection]}
124 button .chooser.b.cancel -padx 10 -text "Cancel" -command {set selectedLayer ""}
125 pack .chooser.b.ok -side left
126 pack .chooser.b.cancel -side left
129 set current [lindex [$planchet layers] 0]
130 foreach layer [layer names] {
132 $box insert end [$layer title]
133 if {"$layer"=="$current"} {
134 $box selection set $n
139 if { $selectedLayer == ""} {
142 set result [lindex [layer names] $selectedLayer]
144 catch {destroy .chooser}
148 proc close_layer {layer} {
149 global modifiedLayers planchet
150 if ![string length $layer] return
151 if [info exist modifiedLayers($layer)] {
152 switch -exact -- [tk_messageBox -title "Warning" -message\
153 "This layer was modified. Save it?" -type yesnocancel] {
154 yes {save_layer $layer}
160 if {[llength [layer names]]==1} {
161 if {[tk_messageBox -title "Warning" -message "This is a last layer.\
162 Closing it would cause mapview to exit. Proceed?"\
163 -type yesno]=="no"} return else exit
166 catch {$planchet look remove $layer}
168 if ![llength [$planchet layers]] {
169 show_layer [lindex [layer names] 0]
173 proc save_layer {layer} {
174 global layerFile layerModified
175 if ![info exist layerFile($layer)] {
176 regsub -all "\[\t ]+" [$layer title] "_" filename
177 set filename [tk_getSaveFile -defaultextension ".lay" -initialfile $filename.lay]
178 if ![string length $filename] return
179 set layerFile($layer) $filename
181 if [file exists $layerFile($layer)] {
182 set bakname "[file rootname $layerFile].bak"
183 if [file exists $bakname] {
186 file rename $layerFile($layer) $bakname
188 set f [open $layerFile($layer) w]
189 puts $f [$layer dump]
191 catch {unset layerModified($layer)}
194 proc confirmExit {} {
196 if {[tk_messageBox -title confirm -type yesno -message "Exit $argv0. Are