Преглед изворни кода

wxGUI/modeler: fix setting parametrized options multiple times
update item panel when page changed
add Refresh button to the items panel
show in item list parameterized options
(merge r66942:7 from trunk)


git-svn-id: https://svn.osgeo.org/grass/grass/branches/releasebranch_7_0@66949 15284696-431f-4ddb-bdfa-cd5b030d7da7

Martin Landa пре 9 година
родитељ
комит
1b89da8031
3 измењених фајлова са 46 додато и 16 уклоњено
  1. 12 3
      gui/wxpython/gmodeler/dialogs.py
  2. 10 4
      gui/wxpython/gmodeler/frame.py
  3. 24 9
      gui/wxpython/gmodeler/model.py

+ 12 - 3
gui/wxpython/gmodeler/dialogs.py

@@ -790,7 +790,7 @@ class ItemListCtrl(ModelListCtrl):
         self.SetColumnWidth(0, 100)
         self.SetColumnWidth(0, 100)
         self.SetColumnWidth(1, 75)
         self.SetColumnWidth(1, 75)
         if len(self.columns) >= 3:
         if len(self.columns) >= 3:
-            self.SetColumnWidth(2, 65)
+            self.SetColumnWidth(2, 100)
 
 
     def GetData(self):
     def GetData(self):
         """Get list data"""
         """Get list data"""
@@ -837,8 +837,16 @@ class ItemListCtrl(ModelListCtrl):
                     bId = _('No')
                     bId = _('No')
                 else:
                 else:
                     bId = _("Yes")
                     bId = _("Yes")
+                options = action.GetParameterizedParams()
+                params = []
+                for f in options['flags']:
+                    params.append('-{}'.format(f['name']))
+                for p in options['params']:
+                    params.append(p['name'])
+
                 self.itemDataMap[i] = [action.GetLabel(),
                 self.itemDataMap[i] = [action.GetLabel(),
                                        bId,
                                        bId,
+                                       ','.join(params),
                                        action.GetLog()]
                                        action.GetLog()]
             
             
             i += 1
             i += 1
@@ -856,11 +864,12 @@ class ItemListCtrl(ModelListCtrl):
                     self.CheckItem(index, True)
                     self.CheckItem(index, True)
                 i += 1
                 i += 1
         else:
         else:
-            for name, inloop, desc in self.itemDataMap.itervalues():
+            for name, inloop, param, desc in self.itemDataMap.itervalues():
                 index = self.InsertStringItem(sys.maxint, str(i))
                 index = self.InsertStringItem(sys.maxint, str(i))
                 self.SetStringItem(index, 0, name)
                 self.SetStringItem(index, 0, name)
                 self.SetStringItem(index, 1, inloop)
                 self.SetStringItem(index, 1, inloop)
-                self.SetStringItem(index, 2, desc)
+                self.SetStringItem(index, 2, param)
+                self.SetStringItem(index, 3, desc)
                 self.SetItemData(index, i)
                 self.SetItemData(index, i)
                 i += 1
                 i += 1
                 
                 

+ 10 - 4
gui/wxpython/gmodeler/frame.py

@@ -201,7 +201,9 @@ class ModelFrame(wx.Frame):
                 self.SetStatusText(_('Python script contains local modifications'), 0)
                 self.SetStatusText(_('Python script contains local modifications'), 0)
             else:
             else:
                 self.SetStatusText(_('Python script is up-to-date'), 0)
                 self.SetStatusText(_('Python script is up-to-date'), 0)
-        
+        elif page == self.notebook.GetPageIndexByName('items'):
+            self.itemPanel.Update()
+            
         event.Skip()
         event.Skip()
 
 
     def OnVariables(self, event):
     def OnVariables(self, event):
@@ -1585,17 +1587,19 @@ class ItemPanel(wx.Panel):
                                     label=" %s " % _("List of items - right-click to delete"))
                                     label=" %s " % _("List of items - right-click to delete"))
         
         
         self.list = ItemListCtrl(parent = self,
         self.list = ItemListCtrl(parent = self,
-                                 columns = [_("Label"), _("In loop"),
+                                 columns = [_("Label"), _("In loop"), _("Parameterized"),
                                             _("Command")],
                                             _("Command")],
-                                 columnsNotEditable = [1, 2],
+                                 columnsNotEditable = [1, 2, 3],
                                  frame = self.parent)
                                  frame = self.parent)
         
         
         self.btnMoveUp = wx.Button(parent=self, id=wx.ID_UP)
         self.btnMoveUp = wx.Button(parent=self, id=wx.ID_UP)
         self.btnMoveDown = wx.Button(parent=self, id=wx.ID_DOWN)
         self.btnMoveDown = wx.Button(parent=self, id=wx.ID_DOWN)
+        self.btnRefresh = wx.Button(parent=self, id=wx.ID_REFRESH)
         
         
         self.btnMoveUp.Bind(wx.EVT_BUTTON, self.OnMoveItemsUp)
         self.btnMoveUp.Bind(wx.EVT_BUTTON, self.OnMoveItemsUp)
         self.btnMoveDown.Bind(wx.EVT_BUTTON, self.OnMoveItemsDown)
         self.btnMoveDown.Bind(wx.EVT_BUTTON, self.OnMoveItemsDown)
-        
+        self.btnRefresh.Bind(wx.EVT_BUTTON, self.list.OnReload)
+                
         self._layout()
         self._layout()
 
 
     def _layout(self):
     def _layout(self):
@@ -1607,6 +1611,8 @@ class ItemPanel(wx.Panel):
         manageSizer = wx.BoxSizer(wx.VERTICAL)
         manageSizer = wx.BoxSizer(wx.VERTICAL)
         manageSizer.Add(item=self.btnMoveUp, border = 5, flag = wx.ALL)
         manageSizer.Add(item=self.btnMoveUp, border = 5, flag = wx.ALL)
         manageSizer.Add(item=self.btnMoveDown, border = 5,
         manageSizer.Add(item=self.btnMoveDown, border = 5,
+                        flag = wx.LEFT | wx.RIGHT | wx.BOTTOM)
+        manageSizer.Add(item=self.btnRefresh, border = 5,
                         flag = wx.LEFT | wx.RIGHT)
                         flag = wx.LEFT | wx.RIGHT)
         
         
         mainSizer = wx.BoxSizer(wx.HORIZONTAL)
         mainSizer = wx.BoxSizer(wx.HORIZONTAL)

+ 24 - 9
gui/wxpython/gmodeler/model.py

@@ -1186,17 +1186,16 @@ class ModelAction(ModelObject, ogl.DividedShape):
         :param options: dictionary with flags and params (gtask)
         :param options: dictionary with flags and params (gtask)
         """
         """
         self.isValid = True
         self.isValid = True
-        self.isParameterized = False
-        
+
         for f in options['flags']:
         for f in options['flags']:
             if f.get('parameterized', False):
             if f.get('parameterized', False):
-                self.IsParameterized = True
+                self.isParameterized = True
                 break
                 break
-        
+
         for p in options['params']:
         for p in options['params']:
             if self.isValid and p.get('required', False) and \
             if self.isValid and p.get('required', False) and \
-                    p.get('value', '') == '' and \
-                    p.get('default', '') == '':
+               p.get('value', '') == '' and \
+               p.get('default', '') == '':
                 self.isValid = False
                 self.isValid = False
             if not self.isParameterized and p.get('parameterized', False):
             if not self.isParameterized and p.get('parameterized', False):
                 self.isParameterized = True
                 self.isParameterized = True
@@ -1212,7 +1211,23 @@ class ModelAction(ModelObject, ogl.DividedShape):
     def IsParameterized(self):
     def IsParameterized(self):
         """Check if action is parameterized"""
         """Check if action is parameterized"""
         return self.isParameterized
         return self.isParameterized
-    
+
+    def GetParameterizedParams(self):
+        """Return parameterized flags and options"""
+        param = { 'flags': [], 'params' : [] }
+        
+        options = self.GetParams()
+        
+        for f in options['flags']:
+            if f.get('parameterized', False):
+                param['flags'].append(f)
+        
+        for p in options['params']:
+            if p.get('parameterized', False):
+                param['params'].append(p)
+        
+        return param
+        
     def FindData(self, name):
     def FindData(self, name):
         """Find data item by name"""
         """Find data item by name"""
         for rel in self.GetRelations():
         for rel in self.GetRelations():
@@ -1329,10 +1344,10 @@ class ModelData(ModelObject, ogl.EllipseShape):
                     action = rel.GetTo()
                     action = rel.GetTo()
                 else:
                 else:
                     action = rel.GetFrom()
                     action = rel.GetFrom()
-                
+
                 task = GUI(show = None).ParseCommand(cmd = action.GetLog(string = False))
                 task = GUI(show = None).ParseCommand(cmd = action.GetLog(string = False))
                 task.set_param(rel.GetLabel(), self.value)
                 task.set_param(rel.GetLabel(), self.value)
-                action.SetParams(params = task.get_options())
+                action.MergeParams(task.get_options())
         
         
     def GetPropDialog(self):
     def GetPropDialog(self):
         """Get properties dialog"""
         """Get properties dialog"""