فهرست منبع

wxGUI: abort all commands in the queue

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@42292 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 15 سال پیش
والد
کامیت
7044e2943d
1فایلهای تغییر یافته به همراه17 افزوده شده و 8 حذف شده
  1. 17 8
      gui/wxpython/gui_modules/goutput.py

+ 17 - 8
gui/wxpython/gui_modules/goutput.py

@@ -62,6 +62,7 @@ class CmdThread(threading.Thread):
         self.setDaemon(True)
         self.setDaemon(True)
 
 
         self.parent = parent # GMConsole
         self.parent = parent # GMConsole
+        self._want_abort_all = False
         
         
         self.requestQ = requestQ
         self.requestQ = requestQ
         self.resultQ = resultQ
         self.resultQ = resultQ
@@ -90,11 +91,15 @@ class CmdThread(threading.Thread):
                              pid=requestId)
                              pid=requestId)
             
             
             wx.PostEvent(self.parent, event)
             wx.PostEvent(self.parent, event)
-
+            
             time.sleep(.1)
             time.sleep(.1)
             
             
             self.requestCmd = callable(*args, **kwds)
             self.requestCmd = callable(*args, **kwds)
-
+            if self._want_abort_all:
+                self.requestCmd.abort()
+                if self.requestQ.empty():
+                    self._want_abort_all = False
+            
             self.resultQ.put((requestId, self.requestCmd.run()))
             self.resultQ.put((requestId, self.requestCmd.run()))
 
 
             try:
             try:
@@ -131,10 +136,15 @@ class CmdThread(threading.Thread):
             
             
             # send event
             # send event
             wx.PostEvent(self.parent, event)
             wx.PostEvent(self.parent, event)
-            
-    def abort(self):
+                
+    def abort(self, abortall = True):
+        """!Abort command(s)"""
+        if abortall:
+            self._want_abort_all = True
         self.requestCmd.abort()
         self.requestCmd.abort()
-    
+        if self.requestQ.empty():
+            self._want_abort_all = False
+        
 class GMConsole(wx.SplitterWindow):
 class GMConsole(wx.SplitterWindow):
     """!Create and manage output console for commands run by GUI.
     """!Create and manage output console for commands run by GUI.
     """
     """
@@ -514,7 +524,6 @@ class GMConsole(wx.SplitterWindow):
                                           onDone,
                                           onDone,
                                           cmdlist,
                                           cmdlist,
                                           self.cmd_stdout, self.cmd_stderr)                                          
                                           self.cmd_stdout, self.cmd_stderr)                                          
-                    self.btn_abort.Enable()
                     self.cmd_output_timer.Start(50)
                     self.cmd_output_timer.Start(50)
                     
                     
                     return None
                     return None
@@ -529,7 +538,6 @@ class GMConsole(wx.SplitterWindow):
                                   onDone,
                                   onDone,
                                   cmdlist,
                                   cmdlist,
                                   self.cmd_stdout, self.cmd_stderr)                                         
                                   self.cmd_stdout, self.cmd_stderr)                                         
-            self.btn_abort.Enable()
             self.cmd_output_timer.Start(50)
             self.cmd_output_timer.Start(50)
                 
                 
         return None
         return None
@@ -662,7 +670,8 @@ class GMConsole(wx.SplitterWindow):
                 pass
                 pass
         
         
         self.WriteCmdLog('(%s)\n%s' % (str(time.ctime()), ' '.join(event.cmd)))
         self.WriteCmdLog('(%s)\n%s' % (str(time.ctime()), ' '.join(event.cmd)))
-        
+        self.btn_abort.Enable()
+
     def OnCmdDone(self, event):
     def OnCmdDone(self, event):
         """!Command done (or aborted)"""
         """!Command done (or aborted)"""
         if self.parent.GetName() == 'Modeler':
         if self.parent.GetName() == 'Modeler':