Ignore:
Timestamp:
Dec 16, 2015 1:19:34 PM (8 years ago)
Author:
ldelgass
Message:

Add deleteLayer, hasLayer methods. Use XML id attribute for layer names.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gui/scripts/map.tcl

    r5947 r5948  
    3232    public method addLayer { type name paramArray driver driverParamArray {stylesheet {}} {script {}} {selectors {}} }
    3333    public method addViewpoint { name props }
     34    public method deleteLayer { layerName }
    3435    public method earthfile {}
     36    public method hasLayer { layerName }
    3537    public method hints { args }
    3638    public method isGeocentric {}
     
    5860    private variable _tree "";         # Tree of information about the map.
    5961    private variable _isValid 0;
    60     private common _nextLayer 0;       # Counter used to generate unique
    61                                        # layer names.
    6262    private common _nextSelector 0;
    6363    private common _nextViewpoint 0;   # Counter used to generate unique
     
    147147    foreach layer [$layers children -type layer] {
    148148        # Unique identifier for layer.
    149         set name "layer[incr _nextLayer]"
     149        set name [$map element -as id "layers.$layer"]
     150        if {[hasLayer $name]} {
     151            puts stderr "ERROR: Duplicate layer ID '$name', skipping"
     152            continue
     153        }
    150154        set child [$_tree insert $parent -label $name]
    151155        set layerType [$layers get $layer.type]
     
    153157            error "invalid layer type \"$layerType\": should be one of [array names _layerTypes]"
    154158        }
    155         $_tree set $child "name" $layer
     159        $_tree set $child "name" $name
    156160        $_tree set $child "type" $layerType
    157161        foreach key { label description attribution profile srs verticalDatum } {
     
    453457
    454458itcl::body Rappture::Map::addLayer { type name paramArray driver driverParamArray {stylesheet {}} {script {}} {selectors {}} } {
    455     set id "layer[incr _nextLayer]"
     459    set id "$name"
     460    if {[hasLayer $id]} {
     461        error "Layer '$id' already exists"
     462    }
    456463    set parent [$_tree findchild root "layers"]
    457464    set child [$_tree insert $parent -label $id]
     
    616623        }
    617624    }
     625    return $id
     626}
     627
     628itcl::body Rappture::Map::deleteLayer { layerName } {
     629    set id [$_tree findchild root->"layers" $layerName]
     630    if { $id < 0 } {
     631        error "unknown layer \"$layerName\""
     632    }
     633    $_tree delete $id
    618634}
    619635
     
    657673    }
    658674    return [$_tree get $id]
     675}
     676
     677itcl::body Rappture::Map::hasLayer { layerName } {
     678    set id [$_tree findchild root->"layers" $layerName]
     679    if { $id < 0 } {
     680        return 0
     681    } else {
     682        return 1
     683    }
    659684}
    660685
Note: See TracChangeset for help on using the changeset viewer.