瀏覽代碼

wxGUI/vdigit: allow to open temporary vector map for editing

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@57448 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 11 年之前
父節點
當前提交
1a839a4130

+ 4 - 0
gui/wxpython/vdigit/mapwindow.py

@@ -65,6 +65,10 @@ class VDigitWindow(BufferedMapWindow):
             return self.digit.GetDisplay()
         return None
 
+    def GetDigit(self):
+        """!Get digit class"""
+        return self.digit
+    
     def SetToolbar(self, toolbar):
         """!Set up related toolbar
         """

+ 2 - 2
gui/wxpython/vdigit/toolbars.py

@@ -758,8 +758,8 @@ class VDigitToolbar(BaseToolbar):
         self.digit = self.MapWindow.digit = self.digitClass(mapwindow = self.MapWindow)
         
         self.mapLayer = mapLayer
-        # open vector map
-        if self.digit.OpenMap(mapLayer.GetName()) is None:
+        # open vector map (assume that 'hidden' map layer is temporary vector map)
+        if self.digit.OpenMap(mapLayer.GetName(), tmp = mapLayer.IsHidden()) is None:
             self.mapLayer = None
             self.StopEditing()
             return False

+ 3 - 2
gui/wxpython/vdigit/wxdigit.py

@@ -1281,10 +1281,11 @@ class IVDigit:
         """!Get display driver instance"""
         return self._display
     
-    def OpenMap(self, name):
+    def OpenMap(self, name, tmp = False):
         """!Open vector map for editing
         
         @param map name of vector map to be set up
+        @param tmp True to open temporary vector map
         """
         Debug.msg (3, "AbstractDigit.SetMapName map=%s" % name)
 
@@ -1293,7 +1294,7 @@ class IVDigit:
         else:
             mapset = grass.gisenv()['MAPSET']
         
-        self.poMapInfo = self._display.OpenMap(str(name), str(mapset), True)
+        self.poMapInfo = self._display.OpenMap(str(name), str(mapset), True, tmp)
         
         if self.poMapInfo:
             self.InitCats()

+ 23 - 8
gui/wxpython/vdigit/wxdisplay.py

@@ -857,12 +857,14 @@ class DisplayDriver:
         
         return ret
     
-    def OpenMap(self, name, mapset, update = True):
+    def OpenMap(self, name, mapset, update = True, tmp = False):
         """!Open vector map by the driver
         
         @param name name of vector map to be open
         @param mapset name of mapset where the vector map lives
-   
+        @param update True to open vector map in update mode
+        @param tmp True to open temporary vector map
+        
         @return map_info
         @return None on error
         """
@@ -874,16 +876,24 @@ class DisplayDriver:
         
         # open existing map
         if update:
-            ret = Vect_open_update(self.poMapInfo, name, mapset)
-            Vect_set_updated(self.poMapInfo, True) # track updated lines
+            if tmp:
+                open_fn = Vect_open_tmp_update
+            else:
+                open_fn = Vect_open_update
         else:
-            ret = Vect_open_old(self.poMapInfo, name, mapset)
-        self.is3D = Vect_is_3d(self.poMapInfo)
+            if tmp:
+                open_fn = Vect_open_tmp_old
+            else:
+                open_fn = Vect_open_old
+        
+        ret = open_fn(self.poMapInfo, name, mapset)
         
-        if ret == -1: # error
+        if ret == -1:
+             # fatal error detected
             del self.mapInfo
             self.poMapInfo = self.mapInfo = None
         elif ret < 2:
+            # map open at level 1, try to build topology
             dlg = wx.MessageDialog(parent = self.window,
                                    message = _("Topology for vector map <%s> is not available. "
                                                "Topology is required by digitizer. Do you want to "
@@ -898,8 +908,13 @@ class DisplayDriver:
             else:
                 Vect_build(self.poMapInfo)
         
+        if update:
+            Vect_set_updated(self.poMapInfo, True) # track updated lines at update mode
+        
+        self.is3D = Vect_is_3d(self.poMapInfo)
+        
         return self.poMapInfo
-    
+
     def GetMapBoundingBox(self):
         """!Get bounding box of (opened) vector map layer