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

svn_grass at osgeo.org svn_grass at osgeo.org
Thu Jul 16 16:21:10 EDT 2009


Author: martinl
Date: 2009-07-16 16:21:10 -0400 (Thu, 16 Jul 2009)
New Revision: 38440

Modified:
   grass/trunk/gui/wxpython/gui_modules/gcmd.py
   grass/trunk/gui/wxpython/gui_modules/location_wizard.py
Log:
wxGUI: parse error message in location wizard
       (merge from devbr6, r38439)


Modified: grass/trunk/gui/wxpython/gui_modules/gcmd.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/gcmd.py	2009-07-16 20:05:01 UTC (rev 38439)
+++ grass/trunk/gui/wxpython/gui_modules/gcmd.py	2009-07-16 20:21:10 UTC (rev 38440)
@@ -558,7 +558,7 @@
         self._want_abort = True
     
 def RunCommand(prog, flags = "", overwrite = False, quiet = False, verbose = False,
-               parent = None, read = False, stdin = None, **kwargs):
+               parent = None, read = False, stdin = None, getErrorMsg = False, **kwargs):
     """!Run GRASS command"""
     kwargs['stderr'] = subprocess.PIPE
     
@@ -586,6 +586,12 @@
         e.Show()
 
     if not read:
-        return ret
+        if not getErrorMsg:
+            return ret
+        else:
+            return ret, stderr
 
-    return stdout
+    if not getErrorMsg:
+        return stdout
+    
+    return stdout, stderr

Modified: grass/trunk/gui/wxpython/gui_modules/location_wizard.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/location_wizard.py	2009-07-16 20:05:01 UTC (rev 38439)
+++ grass/trunk/gui/wxpython/gui_modules/location_wizard.py	2009-07-16 20:21:10 UTC (rev 38440)
@@ -1,4 +1,4 @@
-"""
+"""!
 @package location_wizard.py
 
 @brief Location wizard - creates a new GRASS Location. User can choose
@@ -1722,8 +1722,8 @@
         # run wizard...
         #
         if self.wizard.RunWizard(self.startpage):
-            success = self.OnWizFinished()
-            if success == True:
+            msg = self.OnWizFinished()
+            if len(msg) < 1:
                 self.wizard.Destroy()
                 self.location = self.startpage.location
                 dlg = wx.MessageDialog(parent=self.parent,
@@ -1739,22 +1739,22 @@
                     defineRegion.Show()
                 else:
                     dlg.Destroy()
-
-            elif success == False:
+            else: # -> error
                 self.wizard.Destroy()
                 wx.MessageBox(parent=self.parent,
                               message="%s" % _("Unable to create new location. "
-                                               "Location <%s> not created.") % self.startpage.location,
+                                               "Location <%(loc)s> not created.\n\n"
+                                               "Details: %(err)s") % \
+                                  { 'loc' : self.startpage.location,
+                                    'err' : msg },
                               caption=_("Location wizard"),
                               style=wx.OK | wx.ICON_ERROR | wx.CENTRE)
-            else: # None
-                pass
         else:
             win = wx.MessageBox(parent=self.parent,
                                 message=_("Location wizard canceled. "
                                           "Location not created."),
                                 caption=_("Location wizard"))
-
+    
     def __readData(self):
         """!Get georeferencing information from tables in $GISBASE/etc"""
         # read projection definitions
@@ -1835,7 +1835,7 @@
         database = self.startpage.grassdatabase
         location = self.startpage.location
         global coordsys
-        success = False
+        msg = '' # error message (empty on success)
         
         # location already exists?
         if os.path.isdir(os.path.join(database,location)):
@@ -1873,31 +1873,29 @@
                           style=wx.OK | wx.ICON_INFORMATION | wx.CENTRE)
             
         if coordsys == "xy":
-            success = self.XYCreate()
-        elif coordsys == "latlong":
-            rows = int(round((float(north) - float(south)) / float(resolution)))
-            cols = int(round((float(east) - float(west)) / float(resolution)))
-            cells = int(rows * cols)
-            success = self.LatlongCreate()
+            msg = self.XYCreate()
         elif coordsys == "proj":
             proj4string = self.CreateProj4String()
-            success = self.Proj4Create(proj4string)
+            msg = self.Proj4Create(proj4string)
         elif coordsys == 'custom':
-            success = self.CustomCreate()
+            msg = self.CustomCreate()
         elif coordsys == "epsg":
-            success = self.EPSGCreate()
+            msg = self.EPSGCreate()
         elif coordsys == "file":
-            success = self.FileCreate()
+            msg = self.FileCreate()
         elif coordsys == "wkt":
-            success = self.WKTCreate()
+            msg = self.WKTCreate()
 
-        return success
+        return msg
 
     def XYCreate(self):
-        """!Create an XY location"""
+        """!Create an XY location
+
+        @return error message (empty string on success)
+        """        
         database = self.startpage.grassdatabase
         location = self.startpage.location
-
+        
         # create location directory and PERMANENT mapset
         try:
             os.mkdir(os.path.join(database, location))
@@ -1927,36 +1925,29 @@
             for param in regioninfo:
                 defwind.write(param + '%s' % os.linesep)
             defwind.close()
-
+            
             shutil.copy(os.path.join(database, location, "PERMANENT", "DEFAULT_WIND"),
                         os.path.join(database, location, "PERMANENT", "WIND"))
-
+            
             # create MYNAME file
             myname = open(os.path.join(database, location, "PERMANENT",
                                        "MYNAME"), 'w')
             myname.write('%s' % os.linesep)
             myname.close()
-
-            return True
-
         except OSError, e:
-            dlg = wx.MessageDialog(parent=self.wizard,
-                                   message="%s: %s" % (_("Unable to create new location"), e),
-                                   caption=_("Error"),
-                                   style=wx.OK | wx.ICON_ERROR)
-            dlg.ShowModal()
-            dlg.Destroy()
-            return False
+            return e
+        
+        return ''
 
     def CreateProj4String(self):
         """!Constract PROJ.4 string"""
         location = self.startpage.location
         proj = self.projpage.proj
         projdesc = self.projpage.projdesc
-
+        
         utmzone = self.projtypepage.utmzone
         utmhemisphere = self.projtypepage.utmhemisphere
-
+        
         datum = self.datumpage.datum
         if self.datumpage.datumdesc:
             datumdesc = self.datumpage.datumdesc +' - ' + self.datumpage.ellipsoid
@@ -1964,11 +1955,11 @@
             datumdesc = ''
         datumparams = self.datumpage.datumparams
         transparams = self.datumpage.transparams
-
+        
         ellipse = self.ellipsepage.ellipse
         ellipsedesc = self.ellipsepage.ellipsedesc
         ellipseparams = self.ellipsepage.ellipseparams
-
+        
         #
         # creating PROJ.4 string
         #
@@ -2003,58 +1994,62 @@
         return '%s %s' % (proj4string, proj4params)
         
     def Proj4Create(self, proj4string):
+        """!Create a new location for selected projection
+        
+        @return error message (empty string on success)
         """
-        Create a new location for selected projection
-        """
         # creating location from PROJ.4 string passed to g.proj
-        ret = gcmd.RunCommand('g.proj',
-                              flags = 'c',
-                              proj4 = proj4string,
-                              location = self.startpage.location)
-
+        ret, msg = gcmd.RunCommand('g.proj',
+                                   flags = 'c',
+                                   proj4 = proj4string,
+                                   location = self.startpage.location,
+                                   getErrorMsg = True)
+        
         if ret == 0:
-            return True
+            return ''
+        
+        return msg
 
-        return False
-
     def CustomCreate(self):
-        """!Create a new location based on given proj4 string"""
+        """!Create a new location based on given proj4 string
+
+        @return error message (empty string on success)
+        """
         proj4string = self.custompage.customstring
         location = self.startpage.location
         
-        ret = gcmd.RunCommand('g.proj',
-                              flags = 'c',
-                              proj4 = proj4string,
-                              location = location)
-
+        ret, msg = gcmd.RunCommand('g.proj',
+                                   flags = 'c',
+                                   proj4 = proj4string,
+                                   location = location,
+                                   getErrorMsg = True)
+        
         if ret == 0:
-            return True
+            return ''
+        
+        return msg
 
-        return False
-
     def EPSGCreate(self):
+        """!Create a new location from an EPSG code.
+
+        @return error message (empty string on success)
         """
-        Create a new location from an EPSG code.
-        """
         epsgcode = self.epsgpage.epsgcode
         epsgdesc = self.epsgpage.epsgdesc
         location = self.startpage.location
         
         # should not happend
         if epsgcode == '':
-            wx.MessageBox(parent=self,
-                          message="%s: %s" % (_("Unable to create new location"), _("EPSG code missing.")),
-                          caption=_("Error"), style=wx.OK | wx.ICON_ERROR)
-            return False
+            return _('EPSG code missing.')
         
         # creating location
         ret = gcmd.RunCommand('g.proj',
                               read = True,
                               epsg = epsgcode,
                               datumtrans = '-1')
-
+        
         dtoptions = {}
-
+        
         if ret:
             line = ret.splitlines()
             i = 0
@@ -2074,88 +2069,76 @@
             if dlg.ShowModal() == wx.ID_OK:
                 dtrans = dlg.GetDatum()
                 if dtrans == '':
-                    wx.MessageBox(parent=self.parent,
-                                  message=_('Datum transform is required.'),
-                                  caption=_("Error"),
-                                  style=wx.OK | wx.ICON_ERROR | wx.CENTRE)
                     dlg.Destroy()
-                    return False
-                dlg.Destroy()
+                    return 'Datum transform is required.'
             else:
                 dlg.Destroy()
-                return False
-
+                return 'Datum transform is required.'
+            
             datumtrans = dtrans
         else:
             datumtrans = '1'
 
-        ret = gcmd.RunCommand('g.proj',
-                              flags = 'c',
-                              epsg = epsgcode,
-                              location = location,
-                              datumtrans = datumtrans)
+        ret, msg = gcmd.RunCommand('g.proj',
+                                   flags = 'c',
+                                   epsg = epsgcode,
+                                   location = location,
+                                   datumtrans = datumtrans,
+                                   getErrorMsg = True)
         
         if ret == 0:
-            return True
+            return ''
 
-        return False
+        return msg
 
     def FileCreate(self):
+        """!Create a new location from a georeferenced file
+
+        @return error message (empty string on success)
         """
-        Create a new location from a georeferenced file
-        """
         georeffile = self.filepage.georeffile
         location = self.startpage.location
-
+        
         # this should not happen
         if not georeffile or not os.path.isfile(georeffile):
-            dlg = wx.MessageBox(parent=self.wizard,
-                                message="%s: %s ('%s')" % \
-                                    (_("Unable to create new location"),
-                                     _("file not found"),
-                                     georeffile),
-                                caption=("Error"), style=wx.OK | wx.ICON_ERROR)
-            return False
-
+            return _("File not found.")
+        
         # creating location
-        ret = gcmd.RunCommand('g.proj',
-                              flags = 'c',
-                              georef = georeffile,
-                              location = location)
-
+        ret, msg = gcmd.RunCommand('g.proj',
+                                   flags = 'c',
+                                   georef = georeffile,
+                                   location = location,
+                                   getErrorMsg = True)
+        
         if ret == 0:
-            return True
+            return ''
+        
+        return msg
 
-        return False
-
     def WKTCreate(self):
+        """!Create a new location from a WKT file
+        
+        @return error message (empty string on success)
         """
-        Create a new location from a WKT file
-        """
         wktfile = self.wktpage.wktfile
         location = self.startpage.location
         
         # this should not happen
         if not wktfile or not os.path.isfile(wktfile):
-            dlg = wx.MessageBox(parent=self.wizard,
-                                message="%s: %s ('%s')" % \
-                                    (_("Unable to create new location"),
-                                     _("file not found"),
-                                     wktfile),
-                                caption=("Error"), style=wx.OK | wx.ICON_ERROR)
-            return False
-
+            return _("File not found.")
+        
         # creating location
-        ret = gcmd.RunCommand('g.proj',
-                              flags = 'c',
-                              wkt = wktfile,
-                              location = location)
+        ret, msg = gcmd.RunCommand('g.proj',
+                                   flags = 'c',
+                                   wkt = wktfile,
+                                   location = location,
+                                   getErrorMsg = True)
         
         if ret == 0:
-            return True
+            return ''
+        
+        return msg
 
-        return False
-
 class RegionDef(BaseClass, wx.Frame):
     """
     Page for setting default region extents and resolution



More information about the grass-commit mailing list