Kaynağa Gözat

g.gui.gmodeler - not possible to remove data from model (trac https://trac.osgeo.org/grass/ticket/2947)

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@68155 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 9 yıl önce
ebeveyn
işleme
71464c59d0
2 değiştirilmiş dosya ile 21 ekleme ve 5 silme
  1. 18 3
      gui/wxpython/gmodeler/frame.py
  2. 3 2
      gui/wxpython/gmodeler/model.py

+ 18 - 3
gui/wxpython/gmodeler/frame.py

@@ -789,9 +789,12 @@ class ModelFrame(wx.Frame):
             x = width/2 - 200 + self._randomShift()
             y = height/2 + self._randomShift()
             for p in params['params']:
-                if p.get('prompt', '') in ('raster', 'vector', 'raster_3d', 'dbtable') and \
-                        (p.get('value', None) or \
-                             (p.get('age', 'old') != 'old' and p.get('required', 'no') == 'yes')):
+                if p.get('prompt', '') not in ('raster', 'vector', 'raster_3d', 'dbtable'):
+                    continue
+
+                # add new data item if defined or required
+                if p.get('value', None) or \
+                   (p.get('age', 'old') != 'old' and p.get('required', 'no') == 'yes'):
                     data = layer.FindData(p.get('name', ''))
                     if data:
                         data.SetValue(p.get('value', ''))
@@ -830,7 +833,19 @@ class ModelFrame(wx.Frame):
                     data.AddRelation(rel)
                     self.AddLine(rel)
                     data.Update()
+
+                # remove dead data items
+                if not p.get('value', ''):
+                    data = layer.FindData(p.get('name', ''))
+                    if data:
+                        remList, upList = self.model.RemoveItem(data)
+                        for item in remList:
+                            self.canvas.diagram.RemoveShape(item)
+                            item.__del__()
             
+                        for item in upList:
+                            item.Update()
+
             # valid / parameterized ?
             layer.SetValid(params)
             

+ 3 - 2
gui/wxpython/gmodeler/model.py

@@ -196,8 +196,9 @@ class Model(object):
         """
         relList = list()
         upList = list()
-        
-        self.items.remove(item)
+
+        if item in self.items:
+            self.items.remove(item)
         
         if isinstance(item, ModelAction):
             for rel in item.GetRelations():