jan: thuban/Thuban/Model map.py,1.18,1.19

cvs@intevation.de cvs at intevation.de
Thu Feb 17 00:14:37 CET 2005


Author: jan

Update of /thubanrepository/thuban/Thuban/Model
In directory doto:/tmp/cvs-serv8932

Modified Files:
	map.py 
Log Message:
(Map, Map.Destroy, Map.RemoveLayer, Map.ClearLayers,
Map.Layers, Map.HasLayers, Map.MoveLayerToTop,
Map.RaiseLayer, Map.LowerLayer, Map.MoveLayerToBottom,
Map.ProjectedBoundingBox, Map.GetProjection): Improved/added
doc string.
(Map.BoundingBox): Removed superfluous test for label_layer
and improved doc string.
(Map.TreeInfo): Added label_layer and improved sdo string.


Index: map.py
===================================================================
RCS file: /thubanrepository/thuban/Thuban/Model/map.py,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- map.py	10 Jul 2003 14:53:15 -0000	1.18
+++ map.py	16 Feb 2005 23:14:35 -0000	1.19
@@ -1,6 +1,7 @@
-# Copyright (c) 2001, 2002 by Intevation GmbH
+# Copyright (c) 2001-2003, 2005 by Intevation GmbH
 # Authors:
 # Bernhard Herzog <bh at intevation.de>
+# Jonathan Coles <jonathan at intevation.de>
 #
 # This program is free software under the GPL (>=v2)
 # Read the file COPYING coming with Thuban for details.
@@ -21,7 +22,9 @@
 
 class Map(TitledObject, Modifiable):
 
-    """Represent a map. A map is simply a list of layers.
+    """Represent a map. A map is a list of layers. Additionally
+    there is a special label layer containing all labels that
+    are defined for the map.
 
     Map objects send the following message types:
 
@@ -50,10 +53,14 @@
         self.projection = projection
 
     def Destroy(self):
-        # call Modifiable.Destroy first since it will call
-        # Publisher.Destroy which removes all subscriptions. Otherwise
-        # clearing the layers results in messages to be sent which can
-        # cause problems.
+        """Destroys the map object with all layers including
+        the label layer.
+
+        Calls Modifiable.Destroy first since it will call
+        Publisher.Destroy which removes all subscriptions. Otherwise
+        clearing the layers results in messages to be sent which can
+        cause problems.
+        """
         Modifiable.Destroy(self)
         self.ClearLayers()
         self.label_layer.Unsubscribe(CHANGED, self.forward, MAP_LAYERS_CHANGED)
@@ -67,7 +74,9 @@
         self.changed(MAP_LAYERS_ADDED, self)
 
     def RemoveLayer(self, layer):
-        """Remove layer from the map."""
+        """Remove layer from the map.
+        This can not be applied for the label layer of the map.
+        """
         self.unsubscribe_layer_channels(layer)
         self.layers.remove(layer)
         self.changed(MAP_LAYERS_CHANGED, self)
@@ -84,7 +93,9 @@
         return 1
 
     def ClearLayers(self):
-        """Delete all layers."""
+        """Delete all layers and also remove all labels from the
+        label layer.
+        """
         for layer in self.layers:
             self.unsubscribe_layer_channels(layer)
             layer.Destroy()
@@ -110,15 +121,18 @@
     def Layers(self):
         """Return the list of layers contained in the map.
 
-        The list does not include the label layer"""
+        The list does not include the label layer which
+        can be retrieved by a separate method."""
         return self.layers
 
     def HasLayers(self):
-        """Return true if the map has at least one shape layer"""
+        """Return true if the map has at least one layer other
+        than the label layer."""
         return len(self.layers) > 0
 
     def MoveLayerToTop(self, layer):
-        """Put the layer on top of the layer stack.
+        """Put the layer on top of the layer stack. This can not
+        be applied to the label layer.
 
         If the layer is already at the top do nothing. If the stacking
         order has been changed, issue a MAP_LAYERS_CHANGED message.
@@ -130,9 +144,9 @@
             self.changed(MAP_LAYERS_CHANGED, self)
             self.changed(MAP_STACKING_CHANGED, self)
 
-        
     def RaiseLayer(self, layer):
-        """Swap the layer with the one above it.
+        """Swap the layer with the one above it. This does
+        not apply to the label layer.
 
         If the layer is already at the top do nothing. If the stacking
         order has been changed, issue a MAP_LAYERS_CHANGED message.
@@ -145,7 +159,8 @@
             self.changed(MAP_STACKING_CHANGED, self)
 
     def LowerLayer(self, layer):
-        """Swap the layer with the one below it.
+        """Swap the layer with the one below it. This does
+        not apply to the label layer.
 
         If the layer is already at the bottom do nothing. If the
         stacking order has been changed, issue a MAP_LAYERS_CHANGED message.
@@ -158,7 +173,8 @@
             self.changed(MAP_STACKING_CHANGED, self)
 
     def MoveLayerToBottom(self, layer):
-        """Put the layer at the bottom of the stack.
+        """Put the layer at the bottom of the stack. This does
+        not apply to the label layer.
 
         If the layer is already at the bottom do nothing. If the
         stacking order has been changed, issue a MAP_LAYERS_CHANGED message.
@@ -172,8 +188,11 @@
 
     def BoundingBox(self):
         """Return the bounding box of the map in Lat/Lon coordinates.
+        The label layer is not considered for the computation of the
+        bounding box.
 
-        Return None if there are no layers or no layer contains any shapes.
+        Return None if there are no layers (except the label layer) or
+        no layer contains any shapes.
         """
         if not self.layers:
             return None
@@ -182,8 +201,6 @@
         urx = []
         ury = []
         for layer in self.layers:
-            if layer is self.label_layer:
-                continue
             # the layer's bbox may be None if it doesn't have any shapes
             bbox = layer.LatLongBoundingBox()
             if bbox is not None:
@@ -201,8 +218,11 @@
 
     def ProjectedBoundingBox(self):
         """Return the bounding box of the map in projected coordinates.
+        The label layer is not considered for the computation of the
+        bounding box.
 
-        Return None if there are no layers or no layer contains any shapes.
+        Return None if there are no layers (except the label layer) or
+        no layer contains any shapes.
         """
         # This simply returns the rectangle given by the projected
         # corners of the non-projected bbox.
@@ -212,6 +232,7 @@
         return bbox
 
     def GetProjection(self):
+        """Return the projection of the map."""
         return self.projection
 
     def SetProjection(self, projection):
@@ -246,6 +267,9 @@
         self.label_layer.UnsetModified()
 
     def TreeInfo(self):
+        """Return a tuple of (title, tupel) describing the contents
+        of the object in a tree-structure.
+        """
         items = []
         if self.BoundingBox() != None:
             items.append(_("Extent (lat-lon): (%g, %g, %g, %g)")
@@ -260,6 +284,6 @@
         layers = self.layers[:]
         layers.reverse()
         items.extend(layers)
+        items.append(self.label_layer)
 
         return (_("Map: %s") % self.title, items)
-





More information about the Thuban-devel mailing list

This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)