[GRASS-SVN] r42730 -
grass/branches/develbranch_6/gui/wxpython/gui_modules
svn_grass at osgeo.org
svn_grass at osgeo.org
Thu Jul 8 18:08:51 EDT 2010
Author: martinl
Date: 2010-07-08 22:08:51 +0000 (Thu, 08 Jul 2010)
New Revision: 42730
Modified:
grass/branches/develbranch_6/gui/wxpython/gui_modules/gmodeler.py
Log:
wxGUI/modeler: track actions in the loops
(merge r42729 from trunk)
Modified: grass/branches/develbranch_6/gui/wxpython/gui_modules/gmodeler.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/gui_modules/gmodeler.py 2010-07-08 22:07:31 UTC (rev 42729)
+++ grass/branches/develbranch_6/gui/wxpython/gui_modules/gmodeler.py 2010-07-08 22:08:51 UTC (rev 42730)
@@ -178,6 +178,17 @@
return None
+ def GetData(self):
+ """!Get list of data items"""
+ result = list()
+ for action in self.GetActions():
+ for rel in action.GetRelations():
+ dataItem = rel.GetData()
+ if dataItem not in result:
+ result.append(dataItem)
+
+ return result
+
def FindData(self, value, prompt):
"""!Find data item in the model
@@ -187,12 +198,10 @@
@return ModelData instance
@return None if not found
"""
- for action in self.GetActions():
- for rel in action.GetRelations():
- dataItem = rel.GetData()
- if dataItem.GetValue() == value and \
- dataItem.GetPrompt() == prompt:
- return dataItem
+ for data in self.GetData():
+ if data.GetValue() == value and \
+ data.GetPrompt() == prompt:
+ return dataItem
return None
@@ -283,7 +292,8 @@
for loop in gxmXml.loops:
alist = list()
for aId in loop['actions']:
- alist.append(self.GetAction(aId))
+ action = self.GetAction(aId)
+ alist.append(action)
loopItem = ModelLoop(parent = self,
x = loop['pos'][0],
@@ -294,6 +304,9 @@
actions = alist,
id = loop['id'])
+ for action in loopItem.GetActions():
+ action.SetLoop(loopItem)
+
self.AddItem(loopItem)
def AddItem(self, newItem):
@@ -351,7 +364,7 @@
rast = list()
rast3d = list()
vect = list()
- for data in self.data:
+ for data in self.GetData():
if not data.IsIntermediate():
continue
name = data.GetValue()
@@ -864,6 +877,8 @@
if not item.IsEnabled():
continue
if isinstance(item, ModelAction):
+ if item.GetLoopId():
+ continue
self._runAction(item, params)
elif isinstance(item, ModelLoop):
cond = item.GetText()
@@ -1086,37 +1101,15 @@
fd.write(' pass\n')
fd.write("\ndef main():\n")
- for action in self.model.GetActions():
- task = menuform.GUI().ParseCommand(cmd = action.GetLog(string = False),
- show = None)
- opts = task.get_options()
- flags = ''
- params = list()
- strcmd = " grass.run_command("
- indent = len(strcmd)
- fd.write(strcmd + "'%s',\n" % task.get_name())
- for f in opts['flags']:
- if f.get('value', False) == True:
- name = f.get('name', '')
- if len(name) > 1:
- params.append('%s=True' % name)
- else:
- flags += name
-
- for p in opts['params']:
- name = p.get('name', None)
- value = p.get('value', None)
- if name and value:
- ptype = p.get('type', 'string')
- if ptype == 'string':
- params.append("%s='%s'" % (name, value))
- else:
- params.append("%s=%s" % (name, value))
-
- for opt in params[:-1]:
- fd.write("%s%s,\n" % (' ' * indent, opt))
- fd.write("%s%s)\n" % (' ' * indent, params[-1]))
-
+ for item in self.model.GetItems():
+ if isinstance(item, ModelAction):
+ self._writePythonAction(fd, item)
+ elif isinstance(item, ModelLoop):
+ # for action in item.GetActions():
+ # fd.write('for %s:\n' % item.GetText())
+ # self._writePythonAction(fd, action)
+ pass
+
fd.write("\n return 0\n")
fd.write(
@@ -1126,7 +1119,44 @@
atexit.register(cleanup)
sys.exit(main())
""")
-
+
+ def _writePythonAction(self, fd, item):
+ task = menuform.GUI().ParseCommand(cmd = item.GetLog(string = False),
+ show = None)
+ opts = task.get_options()
+ flags = ''
+ params = list()
+ strcmd = " grass.run_command("
+ indent = len(strcmd)
+ for f in opts['flags']:
+ if f.get('value', False) == True:
+ name = f.get('name', '')
+ if len(name) > 1:
+ params.append('%s = True' % name)
+ else:
+ flags += name
+
+ for p in opts['params']:
+ name = p.get('name', None)
+ value = p.get('value', None)
+ if name and value:
+ ptype = p.get('type', 'string')
+ if ptype == 'string':
+ params.append('%s = "%s"' % (name, value))
+ else:
+ params.append("%s = %s" % (name, value))
+
+ fd.write(strcmd + '"%s"' % task.get_name())
+ if flags:
+ fd.write(",\n%sflags = '%s'" % (' ' * indent, flags))
+ if len(params) > 0:
+ fd.write(",\n")
+ for opt in params[:-1]:
+ fd.write("%s%s,\n" % (' ' * indent, opt))
+ fd.write("%s%s)\n" % (' ' * indent, params[-1]))
+ else:
+ fd.write(")\n")
+
def _validateModel(self):
"""!Validate model"""
self.SetStatusText(_('Validating model...'), 0)
@@ -1578,6 +1608,7 @@
self.isValid = False
self.isParameterized = False
+ self.inLoop = None
if self.parent.GetCanvas():
ogl.RectangleShape.__init__(self, width, height)
@@ -1630,6 +1661,20 @@
else:
self.AddText('(%d) <<%s>>' % (self.id, _("unknown")))
+ def SetLoop(self, loop):
+ """!Register loop"""
+ self.inLoop = loop
+
+ def GetLoopId(self):
+ """!Get id of the loop
+
+ @return loop id
+ @return '' if action is not in the loop
+ """
+ if self.inLoop:
+ return self.inLoop.GetId()
+ return ''
+
def SetProperties(self, params, propwin):
"""!Record properties dialog"""
self.task.params = params['params']
@@ -3718,7 +3763,7 @@
label=" %s " % _("List of actions - right-click to delete"))
self.list = ActionListCtrl(parent = self,
- columns = [_("ID"), _("Name"),
+ columns = [_("ID"), _("Name"), _("In loop"),
_("Command")])
self._layout()
@@ -3762,23 +3807,39 @@
self.itemDataMap = dict()
i = 0
for action in data:
- self.itemDataMap[i] = [str(action.GetId()),
- action.GetName(),
- action.GetLog()]
+ if self.GetItemCount() == 3:
+ self.itemDataMap[i] = [str(action.GetId()),
+ action.GetName(),
+ action.GetLog()]
+ else:
+ self.itemDataMap[i] = [str(action.GetId()),
+ action.GetName(),
+ str(action.GetLoopId()),
+ action.GetLog()]
i += 1
self.itemCount = len(self.itemDataMap.keys())
self.DeleteAllItems()
i = 0
- for aid, name, desc in self.itemDataMap.itervalues():
- index = self.InsertStringItem(sys.maxint, aid)
- self.SetStringItem(index, 0, aid)
- self.SetStringItem(index, 1, name)
- self.SetStringItem(index, 2, desc)
- self.SetItemData(index, i)
- i += 1
-
+ if self.GetItemCount() == 3:
+ for aid, name, desc in self.itemDataMap.itervalues():
+ index = self.InsertStringItem(sys.maxint, aid)
+ self.SetStringItem(index, 0, aid)
+ self.SetStringItem(index, 1, name)
+ self.SetStringItem(index, 2, desc)
+ self.SetItemData(index, i)
+ i += 1
+ else:
+ for aid, name, inloop, desc in self.itemDataMap.itervalues():
+ index = self.InsertStringItem(sys.maxint, aid)
+ self.SetStringItem(index, 0, aid)
+ self.SetStringItem(index, 1, name)
+ self.SetStringItem(index, 2, inloop)
+ self.SetStringItem(index, 3, desc)
+ self.SetItemData(index, i)
+ i += 1
+
def OnRemove(self, event):
"""!Remove selected action(s) from the model"""
model = self.frame.GetModel()
More information about the grass-commit
mailing list