瀏覽代碼

pyedit: specify CLI parameters for script using a dialog (alternative to module GUI dialogs)

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@68411 15284696-431f-4ddb-bdfa-cd5b030d7da7
Vaclav Petras 9 年之前
父節點
當前提交
36ec02c728
共有 1 個文件被更改,包括 29 次插入1 次删除
  1. 29 1
      gui/wxpython/gui_core/pyedit.py

+ 29 - 1
gui/wxpython/gui_core/pyedit.py

@@ -266,6 +266,7 @@ class PyEditController(object):
         self.filename = None
         self.tempfile = None  # bool, make them strings for better code
         self.overwrite = False
+        self.parameters = None
 
     def OnRun(self, event):
         """Run Python script"""
@@ -284,6 +285,7 @@ class PyEditController(object):
                 mode = stat.S_IMODE(os.lstat(self.filename)[stat.ST_MODE])
                 os.chmod(self.filename, mode | stat.S_IXUSR)
         else:
+            # always save automatically before running
             fd = open(self.filename, "w")
             try:
                 fd.write(self.body.GetText())
@@ -298,7 +300,10 @@ class PyEditController(object):
         env = os.environ.copy()
         if self.overwrite:
             env['GRASS_OVERWRITE'] = '1'
-        self.giface.RunCmd([fd.name], env=env)
+        cmd = [fd.name]
+        if self.parameters:
+            cmd.extend(self.parameters)
+        self.giface.RunCmd(cmd, env=env)
 
     def SaveAs(self):
         """Save python script to file"""
@@ -459,6 +464,24 @@ class PyEditController(object):
             dlg.Destroy()
         return True
 
+    def OnSetParameters(self, event):
+        """Handle setting CLI parameters for the script (asks for input)"""
+        dlg = wx.TextEntryDialog(
+            parent=self.guiparent,
+            caption=_("Set parameters for the script"),
+            message=_("Specify command line parameters for the script separated by spaces:"),
+            )
+        if self.parameters:
+            dlg.SetValue(" ".join(self.parameters))
+        # TODO: modality might not be needed here if we bind the events
+        if dlg.ShowModal() == wx.ID_OK:
+            text = dlg.GetValue().strip()
+            # TODO: split in the same way as in console
+            if text:
+                self.parameters = text.split()
+            else:
+                self.parameters = None
+
     def OnHelp(self, event):
         # inspired by g.manual but simple not using GRASS_HTML_BROWSER
         # not using g.manual because it does not show
@@ -501,6 +524,7 @@ class PyEditToolbar(BaseToolbar):
                              label=_('Save (Ctrl+S)')),
             'run': MetaIcon(img='execute',
                             label=_('Run (Ctrl+R)')),
+            # TODO: better icons for overwrite modes
             'overwriteTrue': MetaIcon(img='locked',
                                       label=_('Activate overwrite')),
             'overwriteFalse': MetaIcon(img='unlocked',
@@ -532,6 +556,7 @@ class PyEditToolbar(BaseToolbar):
                                       self.parent.OnHelp),
                                      ))
 
+    # TODO: add overwrite also to the menu and sync with toolbar
     def OnSetOverwrite(self, event):
         if self.GetToolState(self.overwrite):
             self.SetToolNormalBitmap(self.overwrite,
@@ -652,6 +677,9 @@ class PyEditFrame(wx.Frame):
     overwrite = property(_get_overwrite, _set_overwrite,
                          doc="Tells if overwrite should be used")
 
+    def OnSetParameters(self, *args, **kwargs):
+        self.controller.OnSetParameters(*args, **kwargs)
+
 
 def main():
     """Test application (potentially useful as g.gui.pyedit)"""