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

svn_grass at osgeo.org svn_grass at osgeo.org
Tue May 25 11:54:47 EDT 2010


Author: martinl
Date: 2010-05-25 11:54:46 -0400 (Tue, 25 May 2010)
New Revision: 42348

Modified:
   grass/trunk/gui/wxpython/gui_modules/gmodeler.py
Log:
wxGUI/modeler: save properties in gxm


Modified: grass/trunk/gui/wxpython/gui_modules/gmodeler.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/gmodeler.py	2010-05-25 15:54:11 UTC (rev 42347)
+++ grass/trunk/gui/wxpython/gui_modules/gmodeler.py	2010-05-25 15:54:46 UTC (rev 42348)
@@ -68,8 +68,12 @@
 class Model(object):
     """!Class representing the model"""
     def __init__(self, canvas = None):
-        self.actions = list()    # list of recorded actions
-        self.data    = list()    # list of recorded data items
+        self.actions    = list()    # list of recorded actions
+        self.data       = list()    # list of recorded data items
+        # model properties
+        self.properties = { 'name'        : '',
+                            'description' : '',
+                            'author'      : getpass.getuser() }
         
         self.canvas  = canvas
         
@@ -80,7 +84,11 @@
     def GetActions(self):
         """!Return list of actions"""
         return self.actions
-
+    
+    def GetProperties(self):
+        """!Get model properties"""
+        return self.properties
+    
     def GetData(self):
         """!Return list of data"""
         return self.data
@@ -137,6 +145,9 @@
         except StandardError, e:
             raise GError(e)
         
+        # load properties
+        self.properties = gxmXml.properties
+        
         # load model.GetActions()
         for action in gxmXml.actions:
             actionItem = ModelAction(parent = self, 
@@ -159,7 +170,7 @@
                     break
             actionItem.SetValid(valid)
         
-        # load data & connections
+        # load data & relations
         for data in gxmXml.data:
             dataItem = ModelData(parent = self, 
                                  x = data['pos'][0],
@@ -307,7 +318,6 @@
         self.baseTitle = title
         self.modelFile = None    # loaded model
         self.modelChanged = False
-        self.properties = None
         
         self.cursors = {
             "default" : wx.StockCursor(wx.CURSOR_ARROW),
@@ -412,13 +422,9 @@
         """!Model properties dialog"""
         dlg = PropertiesDialog(parent = self)
         dlg.CentreOnParent()
-        if self.properties:
-            dlg.Init(self.properties)
-        else:
-            dlg.Init({ 'name' : '',
-                       'desc' : '',
-                       'author' : getpass.getuser() })
+        dlg.Init(self.model.GetProperties())
         if dlg.ShowModal() == wx.ID_OK:
+            self.ModelChanged()
             self.properties = dlg.GetValues()
             for action in self.model.GetActions():
                 action.GetTask().set_flag('overwrite', self.properties['overwrite'])
@@ -782,9 +788,9 @@
         if self.properties:
             properties = self.properties
         else:
-            properties = { 'name' : _("Graphical modeler script"),
-                           'desc' : _("Script generated by wxGUI Graphical Modeler"),
-                           'author' : getpass.getuser() }
+            properties = { 'name'        : _("Graphical modeler script"),
+                           'description' : _("Script generated by wxGUI Graphical Modeler"),
+                           'author'      : getpass.getuser() }
         
         fd.write(
 r"""#!/usr/bin/env python
@@ -802,7 +808,7 @@
 #############################################################################
 """ % (properties['name'],
        properties['author'],
-       properties['desc'],
+       properties['description'],
        time.asctime()))
         
         fd.write(
@@ -916,6 +922,8 @@
         # add action to canvas
         width, height = self.canvas.GetSize()
         action = ModelAction(self, cmd = cmd, x = width/2, y = height/2)
+        action.GetTask().set_flag('overwrite', self.properties['overwrite'])
+        
         self.canvas.diagram.AddShape(action)
         action.Show(True)
 
@@ -1117,7 +1125,8 @@
         try:
             WriteModelFile(fd = tmpfile,
                            actions = self.model.GetActions(),
-                           data = self.model.GetData())
+                           data = self.model.GetData(),
+                           properties = self.properties)
         except StandardError:
             GMessage(parent = self,
                      message = _("Writing current settings to model file failed."))
@@ -1797,11 +1806,13 @@
         """
         self.tree = tree
         self.root = self.tree.getroot()
-
+        
         # list of actions, data
+        self.properties = dict()
         self.actions = list()
         self.data    = list()
         
+        self._processProperties()
         self._processActions()
         self._processData()
         
@@ -1826,6 +1837,28 @@
         
         return default
     
+    def _processProperties(self):
+        """!Process model properties"""
+        node = self.root.find('properties')
+        if node is None:
+            return
+        self._processProperty(node, 'name')
+        self._processProperty(node, 'description')
+        self._processProperty(node, 'author')
+        
+        for f in node.findall('flag'):
+            name = f.get('name', '')
+            if name == 'overwrite':
+                self.properties['overwrite'] = True
+        
+    def _processProperty(self, pnode, name):
+        """!Process given property"""
+        node = pnode.find(name)
+        if node is not None:
+            self.properties[name] = node.text
+        else:
+            self.properties[name] = ''
+            
     def _processActions(self):
         """!Process model file"""
         for action in self.root.findall('action'):
@@ -1948,10 +1981,11 @@
     
 class WriteModelFile:
     """!Generic class for writing model file"""
-    def __init__(self, fd, actions, data):
+    def __init__(self, fd, actions, data, properties):
         self.fd      = fd
         self.actions = actions
         self.data    = data
+        self.properties = properties
         
         self.indent = 0
         
@@ -1983,6 +2017,20 @@
         """!Write actions"""
         id = 1
         self.indent += 4
+        self.fd.write('%s<properties>\n' % (' ' * self.indent))
+        self.indent += 4
+        if self.properties['name']:
+            self.fd.write('%s<name>%s</name>\n' % (' ' * self.indent, self.properties['name']))
+        if self.properties['description']:
+            self.fd.write('%s<description>%s</description>\n' % (' ' * self.indent, self.properties['description']))
+        if self.properties['author']:
+            self.fd.write('%s<author>%s</author>\n' % (' ' * self.indent, self.properties['author']))
+        
+        if self.properties.has_key('overwrite') and \
+                self.properties['overwrite']:
+            self.fd.write('%s<flag name="overwrite" />\n' % (' ' * self.indent))
+        self.indent -= 4
+        self.fd.write('%s</properties>\n' % (' ' * self.indent))
         for action in self.actions:
             action.SetId(id)
             self.fd.write('%s<action id="%d" name="%s" pos="%d,%d" size="%d,%d">\n' % \
@@ -2059,8 +2107,8 @@
                         self.fd.write('%s<point>\n' % (' ' * self.indent))
                         self.indent += 4
                         x, y = point.Get()
-                        self.fd.write('%s<x>%f</x>\n' % (' ' * self.indent, x))
-                        self.fd.write('%s<y>%f</y>\n' % (' ' * self.indent, y))
+                        self.fd.write('%s<x>%d</x>\n' % (' ' * self.indent, int(x)))
+                        self.fd.write('%s<y>%d</y>\n' % (' ' * self.indent, int(y)))
                         self.indent -= 4
                         self.fd.write('%s</point>\n' % (' ' * self.indent))
                     self.indent -= 4
@@ -2437,14 +2485,14 @@
     def GetValues(self):
         """!Get values"""
         return { 'name'   : self.name.GetValue(),
-                 'desc'   : self.desc.GetValue(),
+                 'description'   : self.desc.GetValue(),
                  'author' : self.author.GetValue(),
                  'overwrite' : self.overwrite.IsChecked() }
 
     def Init(self, prop):
         """!Initialize dialog"""
         self.name.SetValue(prop['name'])
-        self.desc.SetValue(prop['desc'])
+        self.desc.SetValue(prop['description'])
         self.author.SetValue(prop['author'])
         if prop.has_key('overwrite'):
             self.overwrite.SetValue(prop['overwrite'])



More information about the grass-commit mailing list