diff --git a/src/mra.py b/src/mra.py index 667c68c5319aafc881f2b4aa7f3b9faa7644425d..46317e09b29197db1b6bb2bfcaba484c093d0c07 100644 --- a/src/mra.py +++ b/src/mra.py @@ -52,13 +52,19 @@ import stores import metadata class MetadataMixin(object): - def __getattr__(self, attr): if hasattr(self, "ms") and hasattr(metadata, attr): return functools.partial(getattr(metadata, attr), self.ms) raise AttributeError("\"%s\" object has no attribute \"%s\"." % (type(self).__name__, attr)) +class Clazz(object): + def __init__(self, backend): + self.ms = backend + + def index(self): + return self.index + class Layer(MetadataMixin): def __init__(self, backend): self.ms = backend @@ -124,11 +130,13 @@ class Layer(MetadataMixin): return iter(self.get_fields()) def iter_classes(self): - for i in xrange(self.ms.numclasses): - yield Class(self.ms.getClass(i)) + for i in reversed(xrange(self.ms.numclasses)): + c = Clazz(self.ms.getClass(i)) + c.index = i + yield c def get_styles(self): - return set(self.ms.getClass(i).group for i in xrange(self.ms.numclasses)) + return set(self.ms.getClass(i).group for i in reversed(xrange(self.ms.numclasses))) def iter_styles(self): return iter(self.get_styles()) @@ -175,18 +183,16 @@ class Layer(MetadataMixin): mf.ms.removeLayer(ms_template_layer.index) def set_default_style(self, mf): + s_name = tools.get_dflt_sld_name(self.ms.type) if self.ms.type == mapscript.MS_LAYER_POINT: self.ms.tolerance = 8 self.ms.toleranceunits = 6 - s_name = "default_point" elif self.ms.type == mapscript.MS_LAYER_LINE: self.ms.tolerance = 8 self.ms.toleranceunits = 6 - s_name = "default_line" elif self.ms.type == mapscript.MS_LAYER_POLYGON: self.ms.tolerance = 0 self.ms.toleranceunits = 6 - s_name = "default_polygon" else: return @@ -199,16 +205,14 @@ class Layer(MetadataMixin): self.ms.classgroup = s_name def remove_style(self, s_name): - for c_index in reversed(xrange(self.ms.numclasses)): - c = self.ms.getClass(c_index) - if c.group == s_name: - self.ms.removeClass(c_index) - break - else: - raise KeyError(s_name) - if self.ms.classgroup == s_name: - self.ms.classgroup = None # Should never be 'None' + self.ms.classgroup = None + + for c in self.iter_classes(): + if c.ms.group == s_name: + self.ms.removeClass(c.index) + else: + pass class LayerGroup(object): diff --git a/src/server.py b/src/server.py index 56affa62adf7388dcc0221dfa072388b441a4f45..b1bec29c9ee6e6e0655efafef0b4a428d702be3b 100755 --- a/src/server.py +++ b/src/server.py @@ -843,7 +843,7 @@ class layers(object): # Remove the automatic default style. for s_name in layer.iter_styles(): - if s_name in ("default_polygon", "default_line", "default_point"): + if s_name == tools.get_dflt_sld_name(layer.ms.type): layer.remove_style(s_name) mf.save() @@ -955,7 +955,7 @@ class layer(object): # Remove the automatic default style. for s_name in layer.iter_styles(): - if s_name in ("default_polygon", "default_line", "default_point"): + if s_name == tools.get_dflt_sld_name(layer.ms.type): layer.remove_style(s_name) mf.save() diff --git a/src/tools.py b/src/tools.py index 8891a5ba76d2e0526b5a54e9557ec5565ea1a375..a9d5e1514a5c034e04a496c01ef49a872a1a4c57 100644 --- a/src/tools.py +++ b/src/tools.py @@ -61,6 +61,17 @@ def is_hidden(path): # MacOSX has at least four ways to hide files... return os.path.basename(path).startswith(".") +def get_dflt_sld_name(type): + # TODO: Names should be changed... + if type == 0: # point + return "default_point" + elif type == 1: # line + return "default_line" + elif type == 2: # polygon + return "default_polygon" + else: + return None + def wkt_to_proj4(wkt): """Return Proj4 definition from WKT definition."""