def __init__(self, repo, patches, parent): super(QDeleteDialog, self).__init__(parent) self.setWindowTitle(_('Patch remove - %s') % repo.displayname) self.setWindowIcon(qtlib.geticon('hg-qdelete')) f = self.windowFlags() self.setWindowFlags(f & ~Qt.WindowContextHelpButtonHint) self.repo = repo self.patches = patches self.setLayout(QVBoxLayout()) msg = _('Remove patches from queue?') patchesu = u'<li>'.join([hglib.tounicode(p) for p in patches]) lbl = QLabel(u'<b>%s<ul><li>%s</ul></b>' % (msg, patchesu)) self.layout().addWidget(lbl) self.keepchk = QCheckBox(_('Keep patch files')) self.keepchk.setChecked(True) self.layout().addWidget(self.keepchk) self.cmd = cmdui.Runner(False, self) self.cmd.output.connect(self.output) self.cmd.makeLogVisible.connect(self.makeLogVisible) BB = QDialogButtonBox bbox = QDialogButtonBox(BB.Ok | BB.Cancel) bbox.accepted.connect(self.accept) bbox.rejected.connect(self.reject) self.layout().addWidget(bbox) self.bbox = bbox
def linkActivated(self, cmd): if cmd == 'commit': dlg = commit.CommitDialog(self.repo, [], {}, self) dlg.finished.connect(dlg.deleteLater) dlg.exec_() self.checkStatus() elif cmd == 'discard': labels = [(QMessageBox.Yes, _('&Discard')), (QMessageBox.No, _('Cancel'))] if not qtlib.QuestionMsgBox( _('Confirm Discard'), _('Discard outstanding changes to working directory?'), labels=labels, parent=self): return def finished(ret): self.repo.decrementBusyCount() if ret == 0: self.checkStatus() cmdline = [ 'update', '--clean', '--repository', self.repo.root, '--rev', '.' ] self.runner = cmdui.Runner(False, self) self.runner.commandFinished.connect(finished) self.repo.incrementBusyCount() self.runner.run(cmdline)
def accept(self): if not self.isValid(): return if not self.password and not self.passwordPrompt(): return self.qui.progress_bar.show() self.qui.progress_label.setText("Posting Review...") self.qui.progress_label.show() def cmdargs(opts): args = [] for k, v in opts.iteritems(): if isinstance(v, bool): if v: args.append('--%s' % k.replace('_', '-')) else: for e in isinstance(v, basestring) and [v] or v: args += ['--%s' % k.replace('_', '-'), e] return args hglib.loadextension(self.ui, 'reviewboard') opts = self.postReviewOpts() revstr = str(self.selectedRevs.pop()) self.qui.post_review_button.setEnabled(False) self.qui.close_button.setEnabled(False) self.cmd = cmdui.Runner(False, self) self.cmd.setTitle(_('Review Board')) self.cmd.commandFinished.connect(self.onCompletion) self.cmd.run(['postreview'] + cmdargs(opts) + [revstr])
def __init__(self, repo, patchname, parent): super(QRenameDialog, self).__init__(parent) self.setWindowTitle(_('Patch rename - %s') % repo.displayname) f = self.windowFlags() self.setWindowFlags(f & ~Qt.WindowContextHelpButtonHint) self.setMinimumWidth(400) self.repo = repo self.oldpatchname = patchname self.newpatchname = '' self.setLayout(QVBoxLayout()) lbl = QLabel( _('Rename patch <b>%s</b> to:') % hglib.tounicode(self.oldpatchname)) self.layout().addWidget(lbl) self.le = QLineEdit(hglib.tounicode(self.oldpatchname)) self.layout().addWidget(self.le) self.cmd = cmdui.Runner(True, self) self.cmd.output.connect(self.output) self.cmd.makeLogVisible.connect(self.makeLogVisible) self.cmd.commandFinished.connect(self.onCommandFinished) BB = QDialogButtonBox bbox = QDialogButtonBox(BB.Ok | BB.Cancel) bbox.accepted.connect(self.accept) bbox.rejected.connect(self.reject) self.layout().addWidget(bbox) self.bbox = bbox self.focus = self.le
def __init__(self, repo, cmdline): QWidget.__init__(self) self.files = cmdline[1:] os.chdir(repo.root) self.cmd = cmdui.Runner(True, self) self.cmd.commandFinished.connect(self.commandFinished) self.cmd.run(cmdline) self.hide()
def __init__(self, repoagent, cmdline): QObject.__init__(self) self.files = cmdline[1:] repo = repoagent.rawRepo() os.chdir(repo.root) self.cmd = cmdui.Runner(True, None) # parent must be QWidget or None self.cmd.commandFinished.connect(self.commandFinished) self.cmd.run(cmdline)
def onLinkActivated(self, cmd): cmd = hglib.fromunicode(cmd) repo = self.repo if cmd == 'commit': from tortoisehg.hgqt import commit dlg = commit.CommitDialog(repo, [], {}, self) dlg.finished.connect(dlg.deleteLater) dlg.exec_() self.refresh() elif cmd == 'shelve': from tortoisehg.hgqt import shelve dlg = shelve.ShelveDialog(repo, self.wizard()) dlg.finished.connect(dlg.deleteLater) dlg.exec_() self.refresh() elif cmd.startswith('discard'): if cmd != 'discard:noconfirm': labels = [(QMessageBox.Yes, _('&Discard')), (QMessageBox.No, _('Cancel'))] if not qtlib.QuestionMsgBox( _('Confirm Discard'), _('Discard outstanding changes to working directory?'), labels=labels, parent=self): return def finished(ret): repo.decrementBusyCount() self.refresh() cmdline = [ 'update', '--clean', '--repository', repo.root, '--rev', '.' ] self.runner = cmdui.Runner(True, self) self.runner.commandFinished.connect(finished) repo.incrementBusyCount() self.runner.run(cmdline) elif cmd == 'view': dlg = status.StatusDialog(repo, [], {}, self) dlg.exec_() self.refresh() elif cmd == 'skip': self.wizard().next() else: raise 'unknown command: %s' % cmd
def __init__(self, repo, pending, url, parent): QDialog.__init__(self, parent) self.repo = repo self.url = url self.pending = pending # dict of changelist -> hash tuple layout = QVBoxLayout() self.setLayout(layout) clcombo = QComboBox() layout.addWidget(clcombo) self.cslist = cslist.ChangesetList(self.repo) layout.addWidget(self.cslist) self.cmd = cmdui.Runner(False, self) self.cmd.commandFinished.connect(self.commandFinished) self.cmd.output.connect(self.output) self.cmd.makeLogVisible.connect(self.makeLogVisible) BB = QDialogButtonBox bb = QDialogButtonBox(BB.Ok | BB.Cancel | BB.Discard) bb.rejected.connect(self.reject) bb.button(BB.Discard).setText('Revert') bb.button(BB.Discard).setAutoDefault(False) bb.button(BB.Discard).clicked.connect(self.revert) bb.button(BB.Discard).setEnabled(False) bb.button(BB.Ok).setText('Submit') bb.button(BB.Ok).setAutoDefault(True) bb.button(BB.Ok).clicked.connect(self.submit) bb.button(BB.Ok).setEnabled(False) layout.addWidget(bb) self.bb = bb clcombo.activated[QString].connect(self.p4clActivated) for changelist in self.pending: clcombo.addItem(hglib.tounicode(changelist)) self.p4clActivated(clcombo.currentText()) self.setWindowTitle( _('Pending Perforce Changelists - %s') % repo.displayname) self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint)
def __init__(self, repo, rev, parent=None): super(SignDialog, self).__init__(parent) self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint) self.repo = repo self.rev = rev # base layout box base = QVBoxLayout() base.setSpacing(0) base.setContentsMargins(*(0, ) * 4) base.setSizeConstraint(QLayout.SetFixedSize) self.setLayout(base) box = QVBoxLayout() box.setSpacing(8) box.setContentsMargins(*(8, ) * 4) self.layout().addLayout(box) ## main layout grid form = QFormLayout(fieldGrowthPolicy=QFormLayout.AllNonFixedFieldsGrow) box.addLayout(form) form.addRow(_('Revision:'), QLabel('%d (%s)' % (rev, repo[rev]))) ### key line edit key = repo.ui.config("gpg", "key", None) self.keyLineEdit = QLineEdit() if key: self.keyLineEdit.setText(key) form.addRow(_('Key:'), self.keyLineEdit) ### options expander = qtlib.ExpanderLabel(_('Options'), False) expander.expanded.connect(self.show_options) box.addWidget(expander) optbox = QVBoxLayout() optbox.setSpacing(6) box.addLayout(optbox) hbox = QHBoxLayout() hbox.setSpacing(0) optbox.addLayout(hbox) self.localCheckBox = QCheckBox(_('Local sign')) self.localCheckBox.toggled.connect(self.updateStates) optbox.addWidget(self.localCheckBox) self.replaceCheckBox = QCheckBox( _('Sign even if the sigfile is ' 'modified (-f/--force)')) self.replaceCheckBox.toggled.connect(self.updateStates) optbox.addWidget(self.replaceCheckBox) self.nocommitCheckBox = QCheckBox(_('No commit')) self.nocommitCheckBox.toggled.connect(self.updateStates) optbox.addWidget(self.nocommitCheckBox) self.customCheckBox = QCheckBox(_('Use custom commit message:')) self.customCheckBox.toggled.connect(self.customMessageToggle) optbox.addWidget(self.customCheckBox) self.customTextLineEdit = QLineEdit() optbox.addWidget(self.customTextLineEdit) ## bottom buttons BB = QDialogButtonBox bbox = QDialogButtonBox() self.signBtn = bbox.addButton(_('&Sign'), BB.ActionRole) bbox.addButton(BB.Close) bbox.rejected.connect(self.reject) box.addWidget(bbox) self.signBtn.clicked.connect(self.onSign) ## horizontal separator self.sep = QFrame() self.sep.setFrameShadow(QFrame.Sunken) self.sep.setFrameShape(QFrame.HLine) self.layout().addWidget(self.sep) ## status line self.status = qtlib.StatusLabel() self.status.setContentsMargins(4, 2, 4, 4) self.layout().addWidget(self.status) self.cmd = cmdui.Runner(False, self) self.cmd.output.connect(self.output) self.cmd.makeLogVisible.connect(self.makeLogVisible) self.cmd.commandFinished.connect(self.commandFinished) # prepare to show self.setWindowTitle(_('Sign - %s') % repo.displayname) self.setWindowIcon(qtlib.geticon('hg-sign')) self.clear_status() self.show_options(False) self.customMessageToggle(False) self.keyLineEdit.setFocus()
def __init__(self, repoagent, rev, parent=None): super(BookmarkDialog, self).__init__(parent) self.setWindowFlags(self.windowFlags() & \ ~Qt.WindowContextHelpButtonHint) self._repoagent = repoagent repo = repoagent.rawRepo() self.rev = rev self.node = repo[rev].node() # base layout box base = QVBoxLayout() base.setSpacing(0) base.setContentsMargins(*(0, ) * 4) base.setSizeConstraint(QLayout.SetFixedSize) self.setLayout(base) box = QVBoxLayout() box.setSpacing(8) box.setContentsMargins(*(8, ) * 4) self.layout().addLayout(box) ## main layout grid form = QFormLayout(fieldGrowthPolicy=QFormLayout.AllNonFixedFieldsGrow) box.addLayout(form) form.addRow(_('Revision:'), QLabel('%d (%s)' % (rev, repo[rev]))) ### bookmark combo self.bookmarkCombo = QComboBox() self.bookmarkCombo.setEditable(True) self.bookmarkCombo.currentIndexChanged.connect( self.bookmarkTextChanged) self.bookmarkCombo.editTextChanged.connect(self.bookmarkTextChanged) qtlib.allowCaseChangingInput(self.bookmarkCombo) form.addRow(_('Bookmark:'), self.bookmarkCombo) ### Rename input self.newNameEdit = QLineEdit() self.newNameEdit.textEdited.connect(self.bookmarkTextChanged) form.addRow(_('New Name:'), self.newNameEdit) ### Activate checkbox self.activateCheckBox = QCheckBox() if self.node == self.repo['.'].node(): self.activateCheckBox.setChecked(True) else: self.activateCheckBox.setChecked(False) self.activateCheckBox.setEnabled(False) form.addRow(_('Activate:'), self.activateCheckBox) ## bottom buttons BB = QDialogButtonBox bbox = QDialogButtonBox() self.addBtn = bbox.addButton(_('&Add'), BB.ActionRole) self.renameBtn = bbox.addButton(_('Re&name'), BB.ActionRole) self.removeBtn = bbox.addButton(_('&Remove'), BB.ActionRole) self.moveBtn = bbox.addButton(_('&Move'), BB.ActionRole) bbox.addButton(BB.Close) bbox.rejected.connect(self.reject) box.addWidget(bbox) self.addBtn.clicked.connect(self.add_bookmark) self.renameBtn.clicked.connect(self.rename_bookmark) self.removeBtn.clicked.connect(self.remove_bookmark) self.moveBtn.clicked.connect(self.move_bookmark) ## horizontal separator self.sep = QFrame() self.sep.setFrameShadow(QFrame.Sunken) self.sep.setFrameShape(QFrame.HLine) self.layout().addWidget(self.sep) ## status line self.status = qtlib.StatusLabel() self.status.setContentsMargins(4, 2, 4, 4) self.layout().addWidget(self.status) # dialog setting self.setWindowTitle(_('Bookmark - %s') % self.repo.displayname) self.setWindowIcon(qtlib.geticon('hg-bookmarks')) self.cmd = cmdui.Runner(False, self) self.cmd.output.connect(self.output) self.cmd.makeLogVisible.connect(self.makeLogVisible) self.cmd.commandFinished.connect(self.commandFinished) # prepare to show self.clear_status() self.refresh() self._repoagent.repositoryChanged.connect(self.refresh) self.bookmarkCombo.setFocus() self.bookmarkTextChanged()
def __init__(self, repo, tag='', rev='tip', parent=None, opts={}): super(TagDialog, self).__init__(parent) self.setWindowFlags(self.windowFlags() & \ ~Qt.WindowContextHelpButtonHint) self.repo = repo self.setWindowTitle(_('Tag - %s') % repo.displayname) self.setWindowIcon(qtlib.geticon('hg-tag')) # base layout box base = QVBoxLayout() base.setSpacing(0) base.setContentsMargins(*(0, ) * 4) base.setSizeConstraint(QLayout.SetFixedSize) self.setLayout(base) # main layout box box = QVBoxLayout() box.setSpacing(8) box.setContentsMargins(*(8, ) * 4) self.layout().addLayout(box) form = QFormLayout(fieldGrowthPolicy=QFormLayout.AllNonFixedFieldsGrow) box.addLayout(form) ctx = repo[rev] form.addRow(_('Revision:'), QLabel('%d (%s)' % (ctx.rev(), ctx))) self.rev = ctx.rev() ### tag combo self.tagCombo = QComboBox() self.tagCombo.setEditable(True) self.tagCombo.setEditText(hglib.tounicode(tag)) self.tagCombo.currentIndexChanged.connect(self.updateStates) self.tagCombo.editTextChanged.connect(self.updateStates) form.addRow(_('Tag:'), self.tagCombo) self.tagRevLabel = QLabel('') form.addRow(_('Tagged:'), self.tagRevLabel) ### options expander = qtlib.ExpanderLabel(_('Options'), False) expander.expanded.connect(self.show_options) box.addWidget(expander) optbox = QVBoxLayout() optbox.setSpacing(6) box.addLayout(optbox) hbox = QHBoxLayout() hbox.setSpacing(0) optbox.addLayout(hbox) self.localCheckBox = QCheckBox(_('Local tag')) self.localCheckBox.toggled.connect(self.updateStates) self.replaceCheckBox = QCheckBox( _('Replace existing tag (-f/--force)')) self.replaceCheckBox.toggled.connect(self.updateStates) optbox.addWidget(self.localCheckBox) optbox.addWidget(self.replaceCheckBox) self.englishCheckBox = QCheckBox(_('Use English commit message')) engmsg = repo.ui.configbool('tortoisehg', 'engmsg', False) self.englishCheckBox.setChecked(engmsg) optbox.addWidget(self.englishCheckBox) self.customCheckBox = QCheckBox(_('Use custom commit message:')) self.customCheckBox.toggled.connect(self.customMessageToggle) self.customTextLineEdit = QLineEdit() optbox.addWidget(self.customCheckBox) optbox.addWidget(self.customTextLineEdit) ## bottom buttons BB = QDialogButtonBox bbox = QDialogButtonBox(BB.Close) bbox.rejected.connect(self.reject) self.addBtn = bbox.addButton(_('&Add'), BB.ActionRole) self.removeBtn = bbox.addButton(_('&Remove'), BB.ActionRole) box.addWidget(bbox) self.addBtn.clicked.connect(self.onAddTag) self.removeBtn.clicked.connect(self.onRemoveTag) ## horizontal separator self.sep = QFrame() self.sep.setFrameShadow(QFrame.Sunken) self.sep.setFrameShape(QFrame.HLine) base.addWidget(self.sep) ## status line self.status = qtlib.StatusLabel() self.status.setContentsMargins(4, 2, 4, 4) base.addWidget(self.status) self.cmd = cmdui.Runner(False, self) self.cmd.output.connect(self.output) self.cmd.makeLogVisible.connect(self.makeLogVisible) self.cmd.commandFinished.connect(self.onCommandFinished) repo.repositoryChanged.connect(self.refresh) self.customTextLineEdit.setDisabled(True) self.replaceCheckBox.setChecked(bool(opts.get('force'))) self.localCheckBox.setChecked(bool(opts.get('local'))) if not opts.get('local') and opts.get('message'): msg = hglib.tounicode(opts['message']) self.customCheckBox.setChecked(True) self.customTextLineEdit.setText(msg) self.clear_statue() self.show_options(False) self.tagCombo.setFocus() self.refresh()
def __init__(self, repoagent, parent, **opts): QWidget.__init__(self, parent) self._repoagent = repoagent repo = repoagent.rawRepo() self.opts = opts self.refreshing = False self.finishfunc = None layout = QVBoxLayout() layout.setSpacing(4) self.setLayout(layout) b = QPushButton(_('QRefresh')) f = b.font() f.setWeight(QFont.Bold) b.setFont(f) self.qnewOrRefreshBtn = b self.qqueueBtn = QPushButton(_('Queues')) # top toolbar tbarhbox = QHBoxLayout() tbarhbox.setSpacing(5) self.layout().addLayout(tbarhbox, 0) self.revisionOrCommitBtn = QPushButton() self.queueCombo = QComboBox() self.queueCombo.activated['QString'].connect(self.qqueueActivate) self.optionsBtn = QPushButton(_('Options')) self.msgSelectCombo = PatchMessageCombo(self) tbarhbox.addWidget(self.revisionOrCommitBtn) tbarhbox.addWidget(self.queueCombo) tbarhbox.addWidget(self.optionsBtn) tbarhbox.addWidget(self.qqueueBtn) tbarhbox.addWidget(self.msgSelectCombo, 1) tbarhbox.addWidget(self.qnewOrRefreshBtn) # main area consists of a two-way horizontal splitter self.splitter = splitter = QSplitter() self.layout().addWidget(splitter, 1) splitter.setOrientation(Qt.Horizontal) splitter.setChildrenCollapsible(True) splitter.setObjectName('splitter') self.filesFrame = QFrame(splitter) # Files Frame layout = QVBoxLayout() layout.setSpacing(5) layout.setContentsMargins(0, 0, 0, 0) self.filesFrame.setLayout(layout) mtbarhbox = QHBoxLayout() mtbarhbox.setSpacing(8) layout.addLayout(mtbarhbox, 0) mtbarhbox.setContentsMargins(0, 0, 0, 0) self.newCheckBox = QCheckBox(_('New Patch')) self.patchNameLE = mqutil.getPatchNameLineEdit() mtbarhbox.addWidget(self.newCheckBox) mtbarhbox.addWidget(self.patchNameLE, 1) self.messageEditor = messageentry.MessageEntry(self) self.messageEditor.installEventFilter( qscilib.KeyPressInterceptor(self)) self.messageEditor.refresh(repo) self.stwidget = status.StatusWidget(repoagent, None, opts, self) self.stwidget.runCustomCommandRequested.connect( self.runCustomCommandRequested) self.fileview = self.stwidget.fileview self.fileview.showMessage.connect(self.showMessage) self.fileview.setContext(repo[None]) self.fileview.shelveToolExited.connect(self.reload) layout.addWidget(self.stwidget) # Message and diff vb2 = QVBoxLayout() vb2.setSpacing(0) vb2.setContentsMargins(0, 0, 0, 0) w = QWidget() w.setLayout(vb2) splitter.addWidget(w) self.vsplitter = vsplitter = QSplitter() vsplitter.setOrientation(Qt.Vertical) vb2.addWidget(vsplitter) vsplitter.addWidget(self.messageEditor) vsplitter.addWidget(self.stwidget.docf) # Command runner and connections... self.cmd = cmdui.Runner(not parent, self) self.cmd.output.connect(self.output) self.cmd.makeLogVisible.connect(self.makeLogVisible) self.cmd.progress.connect(self.progress) self.cmd.commandFinished.connect(self.onCommandFinished) self.qqueueBtn.clicked.connect(self.launchQQueueTool) self.optionsBtn.clicked.connect(self.launchOptionsDialog) self.revisionOrCommitBtn.clicked.connect(self.qinitOrCommit) self.msgSelectCombo.activated.connect(self.onMessageSelected) self.newCheckBox.toggled.connect(self.onNewModeToggled) self.qnewOrRefreshBtn.clicked.connect(self.onQNewOrQRefresh) QShortcut(QKeySequence('Ctrl+Return'), self, self.onQNewOrQRefresh) QShortcut(QKeySequence('Ctrl+Enter'), self, self.onQNewOrQRefresh) self._repoagent.configChanged.connect(self.onConfigChanged) self._repoagent.repositoryChanged.connect(self.reload) self.setAcceptDrops(True) if parent: self.layout().setContentsMargins(2, 2, 2, 2) else: self.layout().setContentsMargins(0, 0, 0, 0) self.setWindowTitle(_('TortoiseHg Patch Queue')) self.statusbar = cmdui.ThgStatusBar(self) self.layout().addWidget(self.statusbar) self.progress.connect(self.statusbar.progress) self.showMessage.connect(self.statusbar.showMessage) qtlib.newshortcutsforstdkey(QKeySequence.Refresh, self, self.reload) self.resize(850, 550) self.loadConfigs() QTimer.singleShot(0, self.reload)
def __init__(self, parent, **opts): QDockWidget.__init__(self, parent) self._repoagent = None self.opts = opts self.refreshing = False self.finishfunc = None self.setFeatures(QDockWidget.DockWidgetClosable | QDockWidget.DockWidgetMovable | QDockWidget.DockWidgetFloatable) self.setWindowTitle(_('Patch Queue')) w = QWidget() mainlayout = QVBoxLayout() mainlayout.setContentsMargins(0, 0, 0, 0) w.setLayout(mainlayout) self.setWidget(w) # top toolbar w = QWidget() tbarhbox = QHBoxLayout() tbarhbox.setContentsMargins(0, 0, 0, 0) w.setLayout(tbarhbox) mainlayout.addWidget(w) self.qpushAllAct = a = QAction(geticon('hg-qpush-all'), _('Push all', 'MQ QPush'), self) a.setToolTip(_('Apply all patches')) self.qpushAct = a = QAction(geticon('hg-qpush'), _('Push', 'MQ QPush'), self) a.setToolTip(_('Apply one patch')) self.setGuardsAct = a = QAction(geticon('hg-qguard'), _('Guards'), self) a.setToolTip(_('Configure guards for selected patch')) self.qreorderAct = a = QAction(geticon('hg-qreorder'), _('Reorder patches'), self) a.setToolTip(_('Reorder patches')) self.qdeleteAct = a = QAction(geticon('hg-qdelete'), _('Delete'), self) a.setToolTip(_('Delete selected patches')) self.qpopAct = a = QAction(geticon('hg-qpop'), _('Pop'), self) a.setToolTip(_('Unapply one patch')) self.qpopAllAct = a = QAction(geticon('hg-qpop-all'), _('Pop all'), self) a.setToolTip(_('Unapply all patches')) self.qtbar = tbar = QToolBar(_('Patch Queue Actions Toolbar')) tbar.setIconSize(QSize(18, 18)) tbarhbox.addWidget(tbar) tbar.addAction(self.qpushAct) tbar.addAction(self.qpushAllAct) tbar.addSeparator() tbar.addAction(self.qpopAct) tbar.addAction(self.qpopAllAct) tbar.addSeparator() tbar.addAction(self.qreorderAct) tbar.addSeparator() tbar.addAction(self.qdeleteAct) tbar.addSeparator() tbar.addAction(self.setGuardsAct) self.queueFrame = w = QFrame() mainlayout.addWidget(w) # Patch Queue Frame layout = QVBoxLayout() layout.setSpacing(5) layout.setContentsMargins(0, 0, 0, 0) self.queueFrame.setLayout(layout) self.queueListWidget = QListWidget(self) layout.addWidget(self.queueListWidget, 1) bbarhbox = QHBoxLayout() bbarhbox.setSpacing(5) layout.addLayout(bbarhbox) self.guardSelBtn = QPushButton() bbarhbox.addWidget(self.guardSelBtn) # Command runner and connections... self.cmd = cmdui.Runner(not parent, self) self.cmd.output.connect(self.output) self.cmd.makeLogVisible.connect(self.makeLogVisible) self.cmd.progress.connect(self.progress) self.cmd.commandFinished.connect(self.onCommandFinished) self.queueListWidget.currentRowChanged.connect(self.onPatchSelected) self.queueListWidget.itemActivated.connect(self.onGotoPatch) self.queueListWidget.itemChanged.connect(self.onRenamePatch) self.qpushAllAct.triggered.connect(self.onPushAll) self.qpushAct.triggered.connect(self.onPush) self.qreorderAct.triggered.connect(self.onQreorder) self.qpopAllAct.triggered.connect(self.onPopAll) self.qpopAct.triggered.connect(self.onPop) self.setGuardsAct.triggered.connect(self.onGuardConfigure) self.qdeleteAct.triggered.connect(self.onDelete) self.setAcceptDrops(True) self.layout().setContentsMargins(2, 2, 2, 2) QTimer.singleShot(0, self.reload)
def __init__(self, repoagent, patches, parent): super(QFoldDialog, self).__init__(parent) self._repoagent = repoagent repo = repoagent.rawRepo() self.setWindowTitle(_('Patch fold - %s') % repo.displayname) self.setWindowIcon(qtlib.geticon('hg-qfold')) f = self.windowFlags() self.setWindowFlags(f & ~Qt.WindowContextHelpButtonHint | Qt.WindowMaximizeButtonHint) self.setLayout(QVBoxLayout()) mlbl = QLabel(_('New patch message:')) self.layout().addWidget(mlbl) self.msgte = messageentry.MessageEntry(self) self.msgte.installEventFilter(qscilib.KeyPressInterceptor(self)) self.layout().addWidget(self.msgte) self.keepchk = QCheckBox(_('Keep patch files')) self.keepchk.setChecked(True) self.layout().addWidget(self.keepchk) q = self.repo.mq q.parseseries() self.patches = [p for p in q.series if p in patches] class PatchListWidget(QListWidget): def __init__(self, parent): QListWidget.__init__(self, parent) self.setCurrentRow(0) def focusInEvent(self, event): i = self.item(self.currentRow()) if i: self.parent().parent().showSummary(i) QListWidget.focusInEvent(self, event) def dropEvent(self, event): QListWidget.dropEvent(self, event) spp = self.parent().parent() spp.msgte.setText(spp.composeMsg(self.getPatchList())) def getPatchList(self): return [hglib.fromunicode(self.item(i).text()) \ for i in xrange(0, self.count())] ugb = QGroupBox(_('Patches to fold')) ugb.setLayout(QVBoxLayout()) ugb.layout().setContentsMargins(*(0, ) * 4) self.ulw = PatchListWidget(self) self.ulw.setDragDropMode(QListView.InternalMove) ugb.layout().addWidget(self.ulw) self.ulw.currentItemChanged.connect( lambda: self.showSummary(self.ulw.item(self.ulw.currentRow()))) self.layout().addWidget(ugb) for p in self.patches: item = QListWidgetItem(hglib.tounicode(p)) item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsDragEnabled) self.ulw.addItem(item) slbl = QLabel(_('Summary:')) self.layout().addWidget(slbl) self.summ = QTextEdit() self.summ.setFont(qtlib.getfont('fontcomment').font()) self.summ.setMaximumHeight(80) self.summ.setReadOnly(True) self.summ.setFocusPolicy(Qt.NoFocus) self.layout().addWidget(self.summ) self.cmd = cmdui.Runner(False, self) self.cmd.output.connect(self.output) self.cmd.makeLogVisible.connect(self.makeLogVisible) BB = QDialogButtonBox bbox = QDialogButtonBox(BB.Ok | BB.Cancel) bbox.accepted.connect(self.accept) bbox.rejected.connect(self.reject) self.layout().addWidget(bbox) self.bbox = bbox self._repoagent.configChanged.connect(self.configChanged) self._readsettings() self.msgte.setText(self.composeMsg(self.patches)) self.msgte.refresh(self.repo)
def __init__(self, repo, command, pats, parent): QDialog.__init__(self, parent) self.setWindowFlags(Qt.Window) self.pats = pats self.repo = repo os.chdir(repo.root) # Handle rm alias if command == 'rm': command = 'remove' self.command = command self.setWindowTitle(_('%s - hg %s') % (repo.displayname, command)) self.setWindowIcon(qtlib.geticon(ICONS[command])) layout = QVBoxLayout() layout.setMargin(0) self.setLayout(layout) toplayout = QVBoxLayout() toplayout.setContentsMargins(5, 5, 5, 0) layout.addLayout(toplayout) hbox = QHBoxLayout() lbl = QLabel(LABELS[command][0]) slbl = QLabel() hbox.addWidget(lbl) hbox.addStretch(1) hbox.addWidget(slbl) self.status_label = slbl toplayout.addLayout(hbox) types = { 'add' : 'I?', 'forget' : 'MAR!C', 'revert' : 'MAR!', 'remove' : 'MAR!CI?', } filetypes = types[self.command] checktypes = { 'add' : '?', 'forget' : '', 'revert' : 'MAR!', 'remove' : '', } defcheck = checktypes[self.command] opts = {} for s, val in status.statusTypes.iteritems(): opts[val.name] = s in filetypes opts['checkall'] = True # pre-check all matching files stwidget = status.StatusWidget(repo, pats, opts, self, defcheck=defcheck) toplayout.addWidget(stwidget, 1) hbox = QHBoxLayout() if self.command == 'revert': ## no backup checkbox chk = QCheckBox(_('Do not save backup files (*.orig)')) elif self.command == 'remove': ## force checkbox chk = QCheckBox(_('Force removal of modified files (--force)')) else: chk = None if chk: self.chk = chk hbox.addWidget(chk) self.statusbar = cmdui.ThgStatusBar(self) stwidget.showMessage.connect(self.statusbar.showMessage) self.cmd = cmd = cmdui.Runner(True, self) cmd.commandStarted.connect(self.commandStarted) cmd.commandFinished.connect(self.commandFinished) cmd.progress.connect(self.statusbar.progress) BB = QDialogButtonBox bb = QDialogButtonBox(BB.Ok|BB.Close) bb.accepted.connect(self.accept) bb.rejected.connect(self.reject) bb.button(BB.Ok).setDefault(True) bb.button(BB.Ok).setText(LABELS[command][1]) hbox.addStretch() hbox.addWidget(bb) toplayout.addLayout(hbox) self.bb = bb if self.command == 'add': if 'largefiles' in self.repo.extensions(): self.addLfilesButton = QPushButton(_('Add &Largefiles')) else: self.addLfilesButton = None if self.addLfilesButton: self.addLfilesButton.clicked.connect(self.addLfiles) bb.addButton(self.addLfilesButton, BB.ActionRole) layout.addWidget(self.statusbar) s = QSettings() stwidget.loadSettings(s, 'quickop') self.restoreGeometry(s.value('quickop/geom').toByteArray()) if hasattr(self, 'chk'): if self.command == 'revert': self.chk.setChecked(s.value('quickop/nobackup', True).toBool()) elif self.command == 'remove': self.chk.setChecked(s.value('quickop/forceremove', False).toBool()) self.stwidget = stwidget self.stwidget.refreshWctx() QShortcut(QKeySequence('Ctrl+Return'), self, self.accept) QShortcut(QKeySequence('Ctrl+Enter'), self, self.accept) qtlib.newshortcutsforstdkey(QKeySequence.Refresh, self, self.stwidget.refreshWctx) QShortcut(QKeySequence('Escape'), self, self.reject)
def __init__(self, repoagent, embedded=False, parent=None): super(QQueueDialog, self).__init__(parent) self.setWindowIcon(qtlib.geticon('thg-mq')) self.setWindowTitle(_('Manage MQ patch queues')) self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint) self._repoagent = repoagent repoagent.repositoryChanged.connect(self.reload) self.needsRefresh = False layout = QVBoxLayout() layout.setMargin(4) self.setLayout(layout) hbr = QHBoxLayout() hbr.setMargin(2) layout.addLayout(hbr) rlbl = QLabel(_('Repository:')) hbr.addWidget(rlbl) rle = QLineEdit() hbr.addWidget(rle) rle.setFont(qtlib.getfont('fontlist').font()) rle.setText(self.repo.displayname) rle.setReadOnly(True) rle.setFocusPolicy(Qt.NoFocus) topsep = qtlib.LabeledSeparator('') layout.addWidget(topsep) hbl = QHBoxLayout() hbl.setMargin(2) layout.addLayout(hbl) qvb = QVBoxLayout() hbl.addLayout(qvb) qlbl = QLabel(_('Patch queues:')) qvb.addWidget(qlbl) ql = QListWidget(self) qvb.addWidget(ql) ql.currentRowChanged.connect(self.updateUI) vbb = QVBoxLayout() vbb.setMargin(2) qvb.addLayout(vbb) hqbtntop = QHBoxLayout() vbb.addLayout(hqbtntop) hqbtnmid = QHBoxLayout() vbb.addLayout(hqbtnmid) hqbtnbot = QHBoxLayout() vbb.addLayout(hqbtnbot) btrel = QPushButton(_('Reload')) btrel.clicked.connect(self.reload) hqbtntop.addWidget(btrel) btact = QPushButton(_('Activate')) btact.clicked.connect(self.qqueueActivate) hqbtntop.addWidget(btact) btadd = QPushButton(_('Add')) btadd.clicked.connect(self.qqueueAdd) hqbtnmid.addWidget(btadd) btren = QPushButton(_('Rename')) btren.clicked.connect(self.qqueueRename) hqbtnmid.addWidget(btren) btdel = QPushButton(_('Delete')) btdel.clicked.connect(self.qqueueDelete) hqbtnbot.addWidget(btdel) btpur = QPushButton(_('Purge')) btpur.clicked.connect(self.qqueuePurge) hqbtnbot.addWidget(btpur) pvb = QVBoxLayout() hbl.addLayout(pvb) plbl = QLabel(_('Patches:')) pvb.addWidget(plbl) pl = QListWidget(self) pvb.addWidget(pl) botsep = qtlib.LabeledSeparator('') layout.addWidget(botsep) cmd = cmdui.Runner(not embedded, self) cmd.setTitle(_('QQueue')) cmd.output.connect(self.output) cmd.makeLogVisible.connect(self.makeLogVisible) cmd.commandFinished.connect(self.qqcmdFinished) BB = QDialogButtonBox bb = QDialogButtonBox(BB.Close) bb.button(BB.Close).clicked.connect(self.close) layout.addWidget(bb) self.setLayout(layout) self.ql = ql self.pl = pl self.btrel = btrel self.btact = btact self.btadd = btadd self.btren = btren self.btdel = btdel self.btpur = btpur self.bb = bb self.cmd = cmd self.itemfont = None self.itemfontbold = None self._readsettings() self.reload() self.ql.setFocus()
def __init__(self, repo, parent=None, logwidget=None): QWidget.__init__(self, parent) # Set up variables and connect signals self.repo = repo self.pbranch = extensions.find('pbranch') # Unfortunately global instead of repo-specific self.show_internal_branches = False repo.configChanged.connect(self.configChanged) repo.repositoryChanged.connect(self.repositoryChanged) repo.workingBranchChanged.connect(self.workingBranchChanged) # Build child widgets def BuildChildWidgets(): vbox = QVBoxLayout() vbox.setContentsMargins(0, 0, 0, 0) self.setLayout(vbox) vbox.addWidget(Toolbar(), 1) vbox.addWidget(BelowToolbar(), 1) def Toolbar(): tb = QToolBar(_("Patch Branch Toolbar"), self) tb.setEnabled(True) tb.setObjectName("toolBar_patchbranch") tb.setFloatable(False) self.actionPMerge = a = QWidgetAction(self) a.setIcon(geticon("hg-merge")) a.setToolTip(_('Merge all pending dependencies')) tb.addAction(self.actionPMerge) self.actionPMerge.triggered.connect(self.pmerge_clicked) self.actionBackport = a = QWidgetAction(self) a.setIcon(geticon("go-previous")) a.setToolTip(_('Backout current patch branch')) #tb.addAction(self.actionBackport) #self.actionBackport.triggered.connect(self.pbackout_clicked) self.actionReapply = a = QWidgetAction(self) a.setIcon(geticon("go-next")) a.setToolTip(_('Backport part of a changeset to a dependency')) #tb.addAction(self.actionReapply) #self.actionReapply.triggered.connect(self.reapply_clicked) self.actionPNew = a = QWidgetAction(self) a.setIcon(geticon("fileadd")) #STOCK_NEW a.setToolTip(_('Start a new patch branch')) tb.addAction(self.actionPNew) self.actionPNew.triggered.connect(self.pnew_clicked) self.actionEditPGraph = a = QWidgetAction(self) a.setIcon(geticon("edit-file")) #STOCK_EDIT a.setToolTip(_('Edit patch dependency graph')) tb.addAction(self.actionEditPGraph) self.actionEditPGraph.triggered.connect(self.edit_pgraph_clicked) return tb def BelowToolbar(): w = QSplitter(self) w.addWidget(PatchList()) w.addWidget(PatchDiff()) return w def PatchList(): self.patchlistmodel = PatchBranchModel(self.compute_model(), self.repo.changectx('.').branch(), self) self.patchlist = QTableView(self) self.patchlist.setModel(self.patchlistmodel) self.patchlist.setShowGrid(False) self.patchlist.verticalHeader().setDefaultSectionSize(20) self.patchlist.horizontalHeader().setHighlightSections(False) self.patchlist.setSelectionBehavior(QAbstractItemView.SelectRows) self.patchlist.clicked.connect(self.patchBranchSelected) return self.patchlist def PatchDiff(): # pdiff view to the right of pgraph self.patchDiffStack = QStackedWidget() self.patchDiffStack.addWidget(PatchDiffMessage()) self.patchDiffStack.addWidget(PatchDiffDetails()) return self.patchDiffStack def PatchDiffMessage(): # message if no patch is selected self.patchDiffMessage = QLabel() self.patchDiffMessage.setAlignment(Qt.AlignCenter) return self.patchDiffMessage def PatchDiffDetails(): # pdiff view of selected patc self.patchdiff = revdetails.RevDetailsWidget(self.repo, self) return self.patchdiff BuildChildWidgets() # Command output self.runner = cmdui.Runner(False, self) self.runner.output.connect(self.output) self.runner.progress.connect(self.progress) self.runner.makeLogVisible.connect(self.makeLogVisible) self.runner.commandFinished.connect(self.commandFinished)