[GRASS-SVN] r42563 - grass/trunk/gui/wxpython/gui_modules

svn_grass at osgeo.org svn_grass at osgeo.org
Mon Jun 14 09:49:22 EDT 2010


Author: martinl
Date: 2010-06-14 13:49:22 +0000 (Mon, 14 Jun 2010)
New Revision: 42563

Modified:
   grass/trunk/gui/wxpython/gui_modules/gmodeler.py
   grass/trunk/gui/wxpython/gui_modules/menuform.py
Log:
wxGUI/modeler: fix runing model with variables


Modified: grass/trunk/gui/wxpython/gui_modules/gmodeler.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/gmodeler.py	2010-06-14 11:39:18 UTC (rev 42562)
+++ grass/trunk/gui/wxpython/gui_modules/gmodeler.py	2010-06-14 13:49:22 UTC (rev 42563)
@@ -84,6 +84,7 @@
                             'author'      : getpass.getuser() }
         # model variables
         self.variables = dict()
+        self.variablesParams = dict()
         
         self.canvas  = canvas
         
@@ -103,8 +104,11 @@
         """!Get model properties"""
         return self.properties
 
-    def GetVariables(self):
+    def GetVariables(self, params = False):
         """!Get model variables"""
+        if params:
+            return self.variablesParams
+        
         return self.variables
     
     def SetVariables(self, data):
@@ -317,12 +321,12 @@
 
     def IsParameterized(self):
         """!Return True if model is parameterized"""
-        if self.Parametrize():
+        if self.Parameterize():
             return True
         
         return False
     
-    def Parametrize(self):
+    def Parameterize(self):
         """!Return parameterized options"""
         result = dict()
         idx = 0
@@ -332,23 +336,37 @@
                                        'params' : params,
                                        'idx' : idx }
             for name, values in self.variables.iteritems():
-                params.append({ 'gisprompt' : False,
+                gtype = values.get('type', 'string')
+                if gtype in ('raster', 'vector'):
+                    gisprompt = True
+                    prompt = gtype
+                    if gtype == 'raster':
+                        element = 'cell'
+                    else:
+                        element = 'vector'
+                    ptype = 'string'
+                else:
+                    gisprompt = False
+                    prompt = None
+                    element = None
+                    ptype = gtype
+                params.append({ 'gisprompt' : gisprompt,
                                 'multiple'  : 'no',
                                 'description' : values.get('description', ''),
                                 'guidependency' : '',
-                                'default' : values.get('value', ''),
+                                'default' : '',
                                 'age' : None,
                                 'required' : 'yes',
-                                'value' : '',
+                                'value' : values.get('value', ''),
                                 'label' : '',
                                 'guisection' : '',
                                 'key_desc' : '',
                                 'values' : list(),
                                 'parameterized' : False,
                                 'values_desc' : list(),
-                                'prompt' : None,
-                                'element' : None,
-                                'type' : values.get('type', 'string'),
+                                'prompt' : prompt,
+                                'element' : element,
+                                'type' : ptype,
                                 'name' : name })
             
             idx += 1
@@ -373,6 +391,8 @@
                                          'idx'   : idx }
                     result[name]['params'].append(p)
             idx += 1
+
+        self.variablesParams = result # record parameters
         
         return result
     
@@ -748,7 +768,7 @@
                 return
         
         # parametrization
-        params = self.model.Parametrize()
+        params = self.model.Parameterize()
         if params:
             dlg = ModelParamDialog(parent = self,
                                    params = params)
@@ -759,6 +779,12 @@
                 dlg.Destroy()
                 return
         
+        err = dlg.GetErrors()
+        if err:
+            GMessage(parent = self,
+                     message = unicode('\n'.join(err)))
+            return
+        
         self.goutput.cmdThread.SetId(-1)
         for action in self.model.GetActions():
             if not action.IsEnabled():
@@ -1445,17 +1471,32 @@
         cmd = self.task.getCmd(ignoreErrors = True)
         # substitute variables
         variables = self.parent.GetVariables()
+        fparams = self.parent.GetVariables(params = True)
+        params = None
+        for values in fparams.itervalues():
+            params = values['params']
+            break
+        
         for variable in variables:
             pattern= re.compile('%' + variable)
-            value = variables[variable].get('value', '')
+            value = None
+            if params:
+                for p in params:
+                    if variable == p.get('name', ''):
+                        value = p.get('value', '')
+                        break
+            if not value:
+                value = variables[variable].get('value', '')
+            
             for idx in range(len(cmd)):
                 if pattern.search(cmd[idx]):
                     if value:
                         cmd[idx] = pattern.sub(value, cmd[idx])
                     else:
                         self.isValid = False
-                        break
+                    break
                 idx += 1
+        
         if string:
             if cmd is None:
                 return ''
@@ -2912,6 +2953,7 @@
         """
         self.parent = parent
         self.params = params
+        self.tasks  = list() # list of tasks/pages
         
         wx.Dialog.__init__(self, parent = parent, id = id, title = title, style = style, **kwargs)
         
@@ -2981,9 +3023,18 @@
         task.params = params['params']
         
         panel = menuform.cmdPanel(parent = self, id = wx.ID_ANY, task = task)
+        self.tasks.append(task)
         
         return panel
 
+    def GetErrors(self):
+        """!Check for errors, get list of messages"""
+        errList = list()
+        for task in self.tasks:
+            errList += task.getCmdError()
+        
+        return errList
+    
 class VariablesDialog(wx.Dialog, listmix.ColumnSorterMixin):
     def __init__(self, parent, id = wx.ID_ANY, title = _("Manage model variables"),
                  style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
@@ -3020,7 +3071,9 @@
         self.type = wx.Choice(parent = self, id = wx.ID_ANY,
                               choices = [_("integer"),
                                          _("float"),
-                                         _("string")])
+                                         _("string"),
+                                         _("raster"),
+                                         _("vector")])
         self.value = wx.TextCtrl(parent = self, id = wx.ID_ANY, size = (150, -1))
         self.desc = wx.TextCtrl(parent = self, id = wx.ID_ANY, size = (350, -1))
         

Modified: grass/trunk/gui/wxpython/gui_modules/menuform.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/menuform.py	2010-06-14 11:39:18 UTC (rev 42562)
+++ grass/trunk/gui/wxpython/gui_modules/menuform.py	2010-06-14 13:49:22 UTC (rev 42563)
@@ -1594,7 +1594,7 @@
                     title_txt.SetToolTipString(tooltip)
 
             if p == first_param:
-                if len(p['wxId']) > 0:
+                if p.has_key('wxId') and len(p['wxId']) > 0:
                     self.FindWindowById(p['wxId'][0]).SetFocus()
         
         #
@@ -1912,7 +1912,7 @@
                     porf['parameterized'] = me.IsChecked()
                 else:
                     porf['value'] = me.GetValue()
-        
+                
         self.OnUpdateValues(event)
         
         event.Skip()
@@ -1920,6 +1920,10 @@
     def OnUpdateSelection(self, event):
         """!Update dialog (layers, tables, columns, etc.)
         """
+        if not hasattr(self.parent, "updateThread"):
+            if event:
+                event.Skip()
+            return
         if event:
             self.parent.updateThread.Update(UpdateDialog,
                                             self,



More information about the grass-commit mailing list