def __init__(self, parent, command, caption, modally=True, linesep=os.linesep, autoClose=True, overrideDisplay=''): self.dlg_caption = 'Progress' self.dlg_caption = caption self.splitterStyle = Preferences.splitterStyle self._init_ctrls(parent) self.splitterWindow.SetMinimumPaneSize(20) ProcessRunnerMix.__init__(self, []) self.Center(wx.BOTH) self.modally = True self.linesep = linesep self.autoClose = autoClose if overrideDisplay: self.cmdStxt.SetLabel(overrideDisplay) else: self.cmdStxt.SetLabel(command) self.execute(command, modally) if not modally: while not self.finished: wx.Yield()
def execute(self, cmd, modally = True): self.killBtn.Enable(True) self.cancelBtn.SetLabel(_('Cancel')) self.statusStxt.SetLabel(_('Waiting for response...')) self.responded = False self.modally = modally ProcessRunnerMix.execute(self, cmd)
def updateStream(self, stream, data): resp = self.responded try: return ProcessRunnerMix.updateStream(self, stream, data) finally: if self.responded == (not resp): self.statusStxt.SetLabel(_('Receiving response...'))
def OnIdle(self, event=None): # step the gauge to indicate activity if not self.finished: v = self.statusGge.GetValue() if v >= 100: v = 0 else: v = v + 1 self.statusGge.SetValue(v) ProcessRunnerMix.OnIdle(self, event)
def OnProcessEnded(self, event): ProcessRunnerMix.OnProcessEnded(self, event) self.statusStxt.SetLabel(_('Response received.')) self.prepareResult() self.statusGge.SetValue(0) self.killBtn.Enable(False) self.cancelBtn.SetLabel(_('OK')) if self.modally and self.autoClose: self.EndModal(wx.OK)
def updateOutStream(self, stream, data): txt = ProcessRunnerMix.updateOutStream(self, stream, data) if txt is not None: self.outputTctrl.SetFocus() self.outputTctrl.AppendText(txt)
def updateErrStream(self, stream, data): txt = ProcessRunnerMix.updateErrStream(self, stream, data) if txt is not None: self.errorTctrl.SetFocus() self.errorTctrl.AppendText(txt)
def OnProcessEnded(self, event): ProcessRunnerMix.OnProcessEnded(self, event) # Test doesn't terminate, don't know why :( app.ExitMainLoop()