class Dialog(QDialog): """A dialog for running random Mercurial command""" def __init__(self, cmdline, parent=None): super(Dialog, self).__init__(parent) self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint) self.core = Core(True, self) self.core.commandFinished.connect(self.onCommandFinished) vbox = QVBoxLayout() vbox.setSpacing(4) vbox.setContentsMargins(5, 5, 5, 5) # command output area vbox.addWidget(self.core.outputLog, 1) ## status and progress labels self.stbar = ThgStatusBar() self.stbar.setSizeGripEnabled(False) self.core.setStbar(self.stbar) vbox.addWidget(self.stbar) # bottom buttons buttons = QDialogButtonBox() self.cancelBtn = buttons.addButton(QDialogButtonBox.Cancel) self.cancelBtn.clicked.connect(self.core.cancel) self.core.commandCanceling.connect(self.commandCanceling) self.closeBtn = buttons.addButton(QDialogButtonBox.Close) self.closeBtn.setHidden(True) self.closeBtn.clicked.connect(self.reject) self.detailBtn = buttons.addButton(_("Detail"), QDialogButtonBox.ResetRole) self.detailBtn.setAutoDefault(False) self.detailBtn.setCheckable(True) self.detailBtn.setChecked(True) self.detailBtn.toggled.connect(self.setShowOutput) vbox.addWidget(buttons) self.setLayout(vbox) self.setWindowTitle(_("TortoiseHg Command Dialog")) self.resize(540, 420) # start command self.core.run(cmdline) def setShowOutput(self, visible): """show/hide command output""" self.core.outputLog.setVisible(visible) self.detailBtn.setChecked(visible) # workaround to adjust only window height self.setMinimumWidth(self.width()) self.adjustSize() self.setMinimumWidth(0) ### Private Method ### def reject(self): if self.core.running(): ret = QMessageBox.question( self, _("Confirm Exit"), _("Mercurial command is still running.\n" "Are you sure you want to terminate?"), QMessageBox.Yes | QMessageBox.No, QMessageBox.No, ) if ret == QMessageBox.Yes: self.core.cancel() # don't close dialog return # close dialog if self.returnCode == 0: self.accept() # means command successfully finished else: super(Dialog, self).reject() @pyqtSlot() def commandCanceling(self): self.cancelBtn.setDisabled(True) @pyqtSlot(int) def onCommandFinished(self, ret): self.returnCode = ret self.cancelBtn.setHidden(True) self.closeBtn.setShown(True) self.closeBtn.setFocus()
class Dialog(QDialog): """A dialog for running random Mercurial command""" def __init__(self, cmdline, parent=None): super(Dialog, self).__init__(parent) self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint) self.core = Core(True, self) self.core.commandFinished.connect(self.onCommandFinished) vbox = QVBoxLayout() vbox.setSpacing(4) vbox.setContentsMargins(5, 5, 5, 5) # command output area vbox.addWidget(self.core.outputLog, 1) ## status and progress labels self.stbar = ThgStatusBar() self.stbar.setSizeGripEnabled(False) self.core.setStbar(self.stbar) vbox.addWidget(self.stbar) # bottom buttons buttons = QDialogButtonBox() self.cancelBtn = buttons.addButton(QDialogButtonBox.Cancel) self.cancelBtn.clicked.connect(self.core.cancel) self.core.commandCanceling.connect(self.commandCanceling) self.closeBtn = buttons.addButton(QDialogButtonBox.Close) self.closeBtn.setHidden(True) self.closeBtn.clicked.connect(self.reject) self.detailBtn = buttons.addButton(_('Detail'), QDialogButtonBox.ResetRole) self.detailBtn.setAutoDefault(False) self.detailBtn.setCheckable(True) self.detailBtn.setChecked(True) self.detailBtn.toggled.connect(self.setShowOutput) vbox.addWidget(buttons) self.setLayout(vbox) self.setWindowTitle(_('TortoiseHg Command Dialog')) self.resize(540, 420) # start command self.core.run(cmdline) def setShowOutput(self, visible): """show/hide command output""" self.core.outputLog.setVisible(visible) self.detailBtn.setChecked(visible) # workaround to adjust only window height self.setMinimumWidth(self.width()) self.adjustSize() self.setMinimumWidth(0) ### Private Method ### def reject(self): if self.core.running(): ret = QMessageBox.question(self, _('Confirm Exit'), _('Mercurial command is still running.\n' 'Are you sure you want to terminate?'), QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if ret == QMessageBox.Yes: self.core.cancel() # don't close dialog return # close dialog if self.returnCode == 0: self.accept() # means command successfully finished else: super(Dialog, self).reject() @pyqtSlot() def commandCanceling(self): self.cancelBtn.setDisabled(True) @pyqtSlot(int) def onCommandFinished(self, ret): self.returnCode = ret self.cancelBtn.setHidden(True) self.closeBtn.setShown(True) self.closeBtn.setFocus()
class Widget(QWidget): """An embeddable widget for running Mercurial command""" commandStarted = pyqtSignal() commandFinished = pyqtSignal(int) commandCanceling = pyqtSignal() output = pyqtSignal(QString, QString) progress = pyqtSignal(QString, object, QString, QString, object) makeLogVisible = pyqtSignal(bool) def __init__(self, logWindow, statusBar, parent): super(Widget, self).__init__(parent) self.core = Core(logWindow, self) self.core.commandStarted.connect(self.commandStarted) self.core.commandFinished.connect(self.onCommandFinished) self.core.commandCanceling.connect(self.commandCanceling) self.core.output.connect(self.output) self.core.progress.connect(self.progress) if not logWindow: return vbox = QVBoxLayout() vbox.setSpacing(4) vbox.setContentsMargins(*(1,) * 4) self.setLayout(vbox) # command output area self.core.outputLog.setHidden(True) self.layout().addWidget(self.core.outputLog, 1) if statusBar: ## status and progress labels self.stbar = ThgStatusBar() self.stbar.setSizeGripEnabled(False) self.core.setStbar(self.stbar) self.layout().addWidget(self.stbar) ### Public Methods ### def run(self, cmdline, *args, **opts): self.core.run(cmdline, *args, **opts) def cancel(self): self.core.cancel() def setShowOutput(self, visible): if hasattr(self.core, "outputLog"): self.core.outputLog.setShown(visible) def outputShown(self): if hasattr(self.core, "outputLog"): return self.core.outputLog.isVisible() else: return False ### Signal Handler ### @pyqtSlot(int) def onCommandFinished(self, ret): if ret == -1: self.makeLogVisible.emit(True) self.setShowOutput(True) self.commandFinished.emit(ret)
class Widget(QWidget): """An embeddable widget for running Mercurial command""" commandStarted = pyqtSignal() commandFinished = pyqtSignal(int) commandCanceling = pyqtSignal() output = pyqtSignal(QString, QString) progress = pyqtSignal(QString, object, QString, QString, object) makeLogVisible = pyqtSignal(bool) def __init__(self, logWindow, statusBar, parent): super(Widget, self).__init__(parent) self.core = Core(logWindow, self) self.core.commandStarted.connect(self.commandStarted) self.core.commandFinished.connect(self.onCommandFinished) self.core.commandCanceling.connect(self.commandCanceling) self.core.output.connect(self.output) self.core.progress.connect(self.progress) if not logWindow: return vbox = QVBoxLayout() vbox.setSpacing(4) vbox.setContentsMargins(*(1,)*4) self.setLayout(vbox) # command output area self.core.outputLog.setHidden(True) self.layout().addWidget(self.core.outputLog, 1) if statusBar: ## status and progress labels self.stbar = ThgStatusBar() self.stbar.setSizeGripEnabled(False) self.core.setStbar(self.stbar) self.layout().addWidget(self.stbar) ### Public Methods ### def run(self, cmdline, *args, **opts): self.core.run(cmdline, *args, **opts) def cancel(self): self.core.cancel() def setShowOutput(self, visible): if hasattr(self.core, 'outputLog'): self.core.outputLog.setShown(visible) def outputShown(self): if hasattr(self.core, 'outputLog'): return self.core.outputLog.isVisible() else: return False ### Signal Handler ### @pyqtSlot(int) def onCommandFinished(self, ret): if ret == -1: self.makeLogVisible.emit(True) self.setShowOutput(True) self.commandFinished.emit(ret)