def __init__(self, repoagent, pats, opts, parent=None): QDialog.__init__(self, parent) self.setWindowIcon(qtlib.geticon('hg-status')) layout = QVBoxLayout() layout.setContentsMargins(0, 0, 0, 0) self.setLayout(layout) toplayout = QVBoxLayout() toplayout.setContentsMargins(10, 10, 10, 0) self.stwidget = StatusWidget(repoagent, pats, opts, self, checkable=False) toplayout.addWidget(self.stwidget, 1) layout.addLayout(toplayout) self.statusbar = cmdui.ThgStatusBar(self) layout.addWidget(self.statusbar) self.stwidget.showMessage.connect(self.statusbar.showMessage) self.stwidget.progress.connect(self.statusbar.progress) self.stwidget.titleTextChanged.connect(self.setWindowTitle) self.stwidget.linkActivated.connect(self.linkActivated) self._subdialogs = qtlib.DialogKeeper(StatusDialog._createSubDialog, parent=self) self.setWindowTitle(self.stwidget.getTitle()) self.setWindowFlags(Qt.Window) self.loadSettings() qtlib.newshortcutsforstdkey(QKeySequence.Refresh, self, self.stwidget.refreshWctx) QTimer.singleShot(0, self.stwidget.refreshWctx)
def __init__(self, repoagent, pats, opts, parent=None): QDialog.__init__(self, parent) self.setWindowIcon(qtlib.geticon('hg-status')) self._repoagent = repoagent layout = QVBoxLayout() layout.setContentsMargins(0, 0, 0, 0) self.setLayout(layout) toplayout = QVBoxLayout() toplayout.setContentsMargins(10, 10, 10, 0) self.stwidget = StatusWidget(repoagent, pats, opts, self, checkable=False) toplayout.addWidget(self.stwidget, 1) layout.addLayout(toplayout) self.statusbar = cmdui.ThgStatusBar(self) layout.addWidget(self.statusbar) self.stwidget.showMessage.connect(self.statusbar.showMessage) self.stwidget.progress.connect(self.statusbar.progress) self.stwidget.titleTextChanged.connect(self.setWindowTitle) self.stwidget.linkActivated.connect(self.linkActivated) self._subdialogs = qtlib.DialogKeeper(StatusDialog._createSubDialog, parent=self) self.setWindowTitle(self.stwidget.getTitle()) self.setWindowFlags(Qt.Window) self.loadSettings() qtlib.newshortcutsforstdkey(QKeySequence.Refresh, self, self.stwidget.refreshWctx) QTimer.singleShot(0, self.stwidget.refreshWctx)
def __init__(self, repoagent, rev='.', parent=None): QDialog.__init__(self, parent) self.setWindowFlags(Qt.Window) self.setWindowIcon(qtlib.geticon('hg-log')) layout = QVBoxLayout() layout.setMargin(0) self.setLayout(layout) toplayout = QVBoxLayout() toplayout.setContentsMargins(5, 5, 5, 0) layout.addLayout(toplayout) revdetails = RevDetailsWidget(repoagent, parent, rev=rev) toplayout.addWidget(revdetails, 1) self.statusbar = cmdui.ThgStatusBar(self) revdetails.showMessage.connect(self.statusbar.showMessage) revdetails.linkActivated.connect(self.linkActivated) layout.addWidget(self.statusbar) s = QSettings() self.restoreGeometry(s.value('revdetails/geom').toByteArray()) revdetails.loadSettings(s) repoagent.repositoryChanged.connect(self.refresh) self.revdetails = revdetails self.setRev(rev) qtlib.newshortcutsforstdkey(QKeySequence.Refresh, self, self.refresh)
def fileEditor(filename, **opts): 'Open a simple modal file editing dialog' dialog = QDialog() dialog.setWindowFlags(dialog.windowFlags() & ~Qt.WindowContextHelpButtonHint | Qt.WindowMaximizeButtonHint) dialog.setWindowTitle(filename) dialog.setLayout(QVBoxLayout()) editor = Scintilla() editor.setBraceMatching(QsciScintilla.SloppyBraceMatch) editor.installEventFilter(KeyPressInterceptor(dialog)) editor.setMarginLineNumbers(1, True) editor.setMarginWidth(1, '000') editor.setLexer(QsciLexerProperties()) if opts.get('foldable'): editor.setFolding(QsciScintilla.BoxedTreeFoldStyle) dialog.layout().addWidget(editor) searchbar = SearchToolBar(dialog, hidable=True) searchbar.searchRequested.connect(editor.find) searchbar.conditionChanged.connect(editor.highlightText) searchbar.hide() def showsearchbar(): text = editor.selectedText() if text: searchbar.setPattern(text) searchbar.show() searchbar.setFocus(Qt.OtherFocusReason) qtlib.newshortcutsforstdkey(QKeySequence.Find, dialog, showsearchbar) dialog.layout().addWidget(searchbar) BB = QDialogButtonBox bb = QDialogButtonBox(BB.Save|BB.Cancel) bb.accepted.connect(dialog.accept) bb.rejected.connect(dialog.reject) dialog.layout().addWidget(bb) s = QSettings() geomname = 'editor-geom' desktopgeom = qApp.desktop().availableGeometry() dialog.resize(desktopgeom.size() * 0.5) dialog.restoreGeometry(s.value(geomname).toByteArray()) ret = QDialog.Rejected try: f = QFile(filename) f.open(QIODevice.ReadOnly) editor.read(f) editor.setModified(False) ret = dialog.exec_() if ret == QDialog.Accepted: f = QFile(filename) f.open(QIODevice.WriteOnly) editor.write(f) s.setValue(geomname, dialog.saveGeometry()) except EnvironmentError, e: qtlib.WarningMsgBox(_('Unable to read/write config file'), hglib.tounicode(str(e)), parent=dialog)
def fileEditor(filename, **opts): 'Open a simple modal file editing dialog' dialog = QDialog() dialog.setWindowFlags(dialog.windowFlags() & ~Qt.WindowContextHelpButtonHint | Qt.WindowMaximizeButtonHint) dialog.setWindowTitle(filename) dialog.setLayout(QVBoxLayout()) editor = Scintilla() editor.setBraceMatching(QsciScintilla.SloppyBraceMatch) editor.installEventFilter(KeyPressInterceptor(dialog)) editor.setMarginLineNumbers(1, True) editor.setMarginWidth(1, '000') editor.setLexer(QsciLexerProperties()) if opts.get('foldable'): editor.setFolding(QsciScintilla.BoxedTreeFoldStyle) dialog.layout().addWidget(editor) searchbar = SearchToolBar(dialog, hidable=True) searchbar.searchRequested.connect(editor.find) searchbar.conditionChanged.connect(editor.highlightText) searchbar.hide() def showsearchbar(): searchbar.show() searchbar.setFocus(Qt.OtherFocusReason) qtlib.newshortcutsforstdkey(QKeySequence.Find, dialog, showsearchbar) dialog.layout().addWidget(searchbar) BB = QDialogButtonBox bb = QDialogButtonBox(BB.Save|BB.Cancel) bb.accepted.connect(dialog.accept) bb.rejected.connect(dialog.reject) dialog.layout().addWidget(bb) s = QSettings() geomname = 'editor-geom' desktopgeom = qApp.desktop().availableGeometry() dialog.resize(desktopgeom.size() * 0.5) dialog.restoreGeometry(s.value(geomname).toByteArray()) ret = QDialog.Rejected try: f = QFile(filename) f.open(QIODevice.ReadOnly) editor.read(f) editor.setModified(False) ret = dialog.exec_() if ret == QDialog.Accepted: f = QFile(filename) f.open(QIODevice.WriteOnly) editor.write(f) s.setValue(geomname, dialog.saveGeometry()) except EnvironmentError, e: qtlib.WarningMsgBox(_('Unable to read/write config file'), hglib.tounicode(str(e)), parent=dialog)
def fileEditor(filename, **opts): 'Open a simple modal file editing dialog' dialog = QDialog() dialog.setWindowFlags(dialog.windowFlags() & ~Qt.WindowContextHelpButtonHint | Qt.WindowMaximizeButtonHint) dialog.setWindowTitle(filename) dialog.setLayout(QVBoxLayout()) editor = Scintilla() editor.setBraceMatching(QsciScintilla.SloppyBraceMatch) editor.installEventFilter(KeyPressInterceptor(dialog)) editor.setMarginLineNumbers(1, True) editor.setMarginWidth(1, '000') editor.setLexer(QsciLexerProperties()) if opts.get('foldable'): editor.setFolding(QsciScintilla.BoxedTreeFoldStyle) dialog.layout().addWidget(editor) searchbar = SearchToolBar(dialog) searchbar.searchRequested.connect(editor.find) searchbar.conditionChanged.connect(editor.highlightText) searchbar.hide() def showsearchbar(): text = editor.selectedText() if text: searchbar.setPattern(text) searchbar.show() searchbar.setFocus(Qt.OtherFocusReason) qtlib.newshortcutsforstdkey(QKeySequence.Find, dialog, showsearchbar) dialog.addActions(searchbar.editorActions()) dialog.layout().addWidget(searchbar) BB = QDialogButtonBox bb = QDialogButtonBox(BB.Save|BB.Cancel) bb.accepted.connect(dialog.accept) bb.rejected.connect(dialog.reject) dialog.layout().addWidget(bb) s = QSettings() geomname = 'editor-geom' desktopgeom = qApp.desktop().availableGeometry() dialog.resize(desktopgeom.size() * 0.5) dialog.restoreGeometry(s.value(geomname).toByteArray()) if not readFile(editor, filename): return QDialog.Rejected ret = dialog.exec_() if ret != QDialog.Accepted: return ret if not writeFile(editor, filename): return QDialog.Rejected s.setValue(geomname, dialog.saveGeometry()) return ret
def __init__(self, path, parent): super(RejectsDialog, self).__init__(parent) self.setWindowTitle(_('Merge rejected patch chunks into %s') % hglib.tounicode(path)) self.setWindowFlags(Qt.Window) self.path = path self.setLayout(QVBoxLayout()) editor = qscilib.Scintilla() editor.setBraceMatching(qsci.SloppyBraceMatch) editor.setFolding(qsci.BoxedTreeFoldStyle) editor.installEventFilter(qscilib.KeyPressInterceptor(self)) editor.setContextMenuPolicy(Qt.CustomContextMenu) editor.customContextMenuRequested.connect(self.menuRequested) self.baseLineColor = editor.markerDefine(qsci.Background, -1) editor.setMarkerBackgroundColor(QColor('lightblue'), self.baseLineColor) self.layout().addWidget(editor, 3) searchbar = qscilib.SearchToolBar(self, hidable=True) searchbar.searchRequested.connect(editor.find) searchbar.conditionChanged.connect(editor.highlightText) searchbar.hide() def showsearchbar(): searchbar.show() searchbar.setFocus(Qt.OtherFocusReason) qtlib.newshortcutsforstdkey(QKeySequence.Find, self, showsearchbar) self.layout().addWidget(searchbar) hbox = QHBoxLayout() hbox.setContentsMargins(2, 2, 2, 2) self.layout().addLayout(hbox, 1) self.chunklist = QListWidget(self) self.updating = True self.chunklist.currentRowChanged.connect(self.showChunk) hbox.addWidget(self.chunklist, 1) bvbox = QVBoxLayout() bvbox.setContentsMargins(2, 2, 2, 2) self.resolved = tb = QToolButton() tb.setIcon(qtlib.geticon('thg-success')) tb.setToolTip(_('Mark this chunk as resolved, goto next unresolved')) tb.pressed.connect(self.resolveCurrentChunk) self.unresolved = tb = QToolButton() tb.setIcon(qtlib.geticon('thg-warning')) tb.setToolTip(_('Mark this chunk as unresolved')) tb.pressed.connect(self.unresolveCurrentChunk) bvbox.addStretch(1) bvbox.addWidget(self.resolved, 0) bvbox.addWidget(self.unresolved, 0) bvbox.addStretch(1) hbox.addLayout(bvbox, 0) self.editor = editor self.rejectbrowser = RejectBrowser(self) hbox.addWidget(self.rejectbrowser, 5) BB = QDialogButtonBox bb = QDialogButtonBox(BB.Save|BB.Cancel) bb.accepted.connect(self.accept) bb.rejected.connect(self.reject) self.layout().addWidget(bb) self.saveButton = bb.button(BB.Save) s = QSettings() self.restoreGeometry(s.value('rejects/geometry').toByteArray()) self.editor.loadSettings(s, 'rejects/editor') self.rejectbrowser.loadSettings(s, 'rejects/rejbrowse') f = QFile(hglib.tounicode(path)) if not f.open(QIODevice.ReadOnly): qtlib.ErrorMsgBox(_('Unable to merge rejects'), _("Can't read this file (maybe deleted)")) self.hide() QTimer.singleShot(0, self.reject) return earlybytes = f.read(4096) if '\0' in earlybytes: qtlib.ErrorMsgBox(_('Unable to merge rejects'), _('This appears to be a binary file')) self.hide() QTimer.singleShot(0, self.reject) return f.seek(0) editor.read(f) editor.setModified(False) lexer = lexers.getlexer(ui.ui(), path, earlybytes, self) editor.setLexer(lexer) editor.setMarginLineNumbers(1, True) editor.setMarginWidth(1, str(editor.lines())+'X') buf = cStringIO.StringIO() try: buf.write('diff -r aaaaaaaaaaaa -r bbbbbbbbbbb %s\n' % path) buf.write(open(path + '.rej', 'rb').read()) buf.seek(0) except IOError, e: pass
def __init__(self, parent): QFrame.__init__(self, parent) self.curchunks = [] self.countselected = 0 self._ctx = None self._lastfile = None self._status = None vbox = QVBoxLayout() vbox.setContentsMargins(0, 0, 0, 0) vbox.setSpacing(0) self.setLayout(vbox) self.labelhbox = hbox = QHBoxLayout() hbox.setContentsMargins(0, 0, 0, 0) hbox.setSpacing(2) self.layout().addLayout(hbox) self.filenamelabel = w = QLabel() self.filenamelabel.hide() hbox.addWidget(w) w.setWordWrap(True) f = w.textInteractionFlags() w.setTextInteractionFlags(f | Qt.TextSelectableByMouse) w.linkActivated.connect(self.linkActivated) self.searchbar = qscilib.SearchToolBar(hidable=True) self.searchbar.hide() self.searchbar.searchRequested.connect(self.find) self.searchbar.conditionChanged.connect(self.highlightText) guifont = qtlib.getfont('fontlist').font() self.sumlabel = QLabel() self.sumlabel.setFont(guifont) self.allbutton = QToolButton() self.allbutton.setFont(guifont) self.allbutton.setText(_('All', 'files')) self.allbutton.setShortcut(QKeySequence.SelectAll) self.allbutton.clicked.connect(self.selectAll) self.nonebutton = QToolButton() self.nonebutton.setFont(guifont) self.nonebutton.setText(_('None', 'files')) self.nonebutton.setShortcut(QKeySequence.New) self.nonebutton.clicked.connect(self.selectNone) self.actionFind = self.searchbar.toggleViewAction() self.actionFind.setIcon(qtlib.geticon('edit-find')) self.actionFind.setToolTip(_('Toggle display of text search bar')) qtlib.newshortcutsforstdkey(QKeySequence.Find, self, self.searchbar.show) self.diffToolbar = QToolBar(_('Diff Toolbar')) self.diffToolbar.setIconSize(QSize(16, 16)) self.diffToolbar.setStyleSheet(qtlib.tbstylesheet) self.diffToolbar.addAction(self.actionFind) hbox.addWidget(self.diffToolbar) hbox.addStretch(1) hbox.addWidget(self.sumlabel) hbox.addWidget(self.allbutton) hbox.addWidget(self.nonebutton) self.extralabel = w = QLabel() w.setWordWrap(True) w.linkActivated.connect(self.linkActivated) self.layout().addWidget(w) self.layout().addSpacing(2) w.hide() self._forceviewindicator = None self.sci = qscilib.Scintilla(self) self.sci.setReadOnly(True) self.sci.setUtf8(True) self.sci.installEventFilter(qscilib.KeyPressInterceptor(self)) self.sci.setContextMenuPolicy(Qt.CustomContextMenu) self.sci.customContextMenuRequested.connect(self.menuRequested) self.sci.setCaretLineVisible(False) self.sci.setMarginType(1, qsci.SymbolMargin) self.sci.setMarginLineNumbers(1, False) self.sci.setMarginWidth(1, QFontMetrics(self.font()).width('XX')) self.sci.setMarginSensitivity(1, True) self.sci.marginClicked.connect(self.marginClicked) self._checkedpix = qtlib.getcheckboxpixmap(QStyle.State_On, Qt.gray, self) self.selected = self.sci.markerDefine(self._checkedpix, -1) self._uncheckedpix = qtlib.getcheckboxpixmap(QStyle.State_Off, Qt.gray, self) self.unselected = self.sci.markerDefine(self._uncheckedpix, -1) self.vertical = self.sci.markerDefine(qsci.VerticalLine, -1) self.divider = self.sci.markerDefine(qsci.Background, -1) self.selcolor = self.sci.markerDefine(qsci.Background, -1) self.sci.setMarkerBackgroundColor(QColor('#BBFFFF'), self.selcolor) self.sci.setMarkerBackgroundColor(QColor('#AAAAAA'), self.divider) mask = (1 << self.selected) | (1 << self.unselected) | \ (1 << self.vertical) | (1 << self.selcolor) | (1 << self.divider) self.sci.setMarginMarkerMask(1, mask) self.blksearch = blockmatcher.BlockList(self) self.blksearch.linkScrollBar(self.sci.verticalScrollBar()) self.blksearch.setVisible(False) hbox = QHBoxLayout() hbox.addWidget(self.sci) hbox.addWidget(self.blksearch) lexer = lexers.difflexer(self) self.sci.setLexer(lexer) self.layout().addLayout(hbox) self.layout().addWidget(self.searchbar) self.clearDisplay()
def __init__(self, repo, parent): QFrame.__init__(self, parent) framelayout = QVBoxLayout(self) framelayout.setContentsMargins(0, 0, 0, 0) l = QHBoxLayout() l.setContentsMargins(0, 0, 0, 0) l.setSpacing(0) self.repo = repo self._diffs = [] self.topLayout = QVBoxLayout() self.labelhbox = hbox = QHBoxLayout() hbox.setContentsMargins(0, 0, 0, 0) hbox.setSpacing(2) self.topLayout.addLayout(hbox) self.diffToolbar = QToolBar(_("Diff Toolbar")) self.diffToolbar.setIconSize(QSize(16, 16)) self.diffToolbar.setStyleSheet(qtlib.tbstylesheet) hbox.addWidget(self.diffToolbar) self.filenamelabel = w = QLabel() w.setWordWrap(True) f = w.textInteractionFlags() w.setTextInteractionFlags(f | Qt.TextSelectableByMouse) w.linkActivated.connect(self.linkActivated) hbox.addWidget(w, 1) self.extralabel = w = QLabel() w.setWordWrap(True) w.linkActivated.connect(self.linkActivated) self.topLayout.addWidget(w) w.hide() framelayout.addLayout(self.topLayout) framelayout.addLayout(l, 1) hbox = QHBoxLayout() hbox.setContentsMargins(0, 0, 0, 0) hbox.setSpacing(0) l.addLayout(hbox) self.blk = blockmatcher.BlockList(self) self.sci = AnnotateView(repo, self) hbox.addWidget(self.blk) hbox.addWidget(self.sci, 1) self.sci.showMessage.connect(self.showMessage) self.sci.setAnnotationEnabled(False) self.sci.setContextMenuPolicy(Qt.CustomContextMenu) self.sci.customContextMenuRequested.connect(self.menuRequest) self.blk.linkScrollBar(self.sci.verticalScrollBar()) self.blk.setVisible(False) self.sci.setReadOnly(True) self.sci.setUtf8(True) self.sci.installEventFilter(qscilib.KeyPressInterceptor(self)) self.sci.setCaretLineVisible(False) # define markers for colorize zones of diff self.markerplus = self.sci.markerDefine(qsci.Background) self.markerminus = self.sci.markerDefine(qsci.Background) self.markertriangle = self.sci.markerDefine(qsci.Background) self.sci.setMarkerBackgroundColor(QColor("#B0FFA0"), self.markerplus) self.sci.setMarkerBackgroundColor(QColor("#A0A0FF"), self.markerminus) self.sci.setMarkerBackgroundColor(QColor("#FFA0A0"), self.markertriangle) # hide margin 0 (markers) self.sci.setMarginType(0, qsci.SymbolMargin) self.sci.setMarginWidth(0, 0) self.searchbar = qscilib.SearchToolBar(hidable=True) self.searchbar.hide() self.searchbar.searchRequested.connect(self.find) self.searchbar.conditionChanged.connect(self.highlightText) self.layout().addWidget(self.searchbar) self._ctx = None self._filename = None self._status = None self._mode = None self._parent = 0 self._lostMode = None self._lastSearch = u"", False self.actionDiffMode = QAction(qtlib.geticon("view-diff"), _("View change as unified diff output"), self) self.actionDiffMode.setCheckable(True) self.actionDiffMode._mode = DiffMode self.actionFileMode = QAction(qtlib.geticon("view-file"), _("View change in context of file"), self) self.actionFileMode.setCheckable(True) self.actionFileMode._mode = FileMode self.actionAnnMode = QAction(qtlib.geticon("view-annotate"), _("annotate with revision numbers"), self) self.actionAnnMode.setCheckable(True) self.actionAnnMode._mode = AnnMode self.modeToggleGroup = QActionGroup(self) self.modeToggleGroup.addAction(self.actionDiffMode) self.modeToggleGroup.addAction(self.actionFileMode) self.modeToggleGroup.addAction(self.actionAnnMode) self.modeToggleGroup.triggered.connect(self.setMode) # Next/Prev diff (in full file mode) self.actionNextDiff = QAction(qtlib.geticon("go-down"), _("Next diff (alt+down)"), self) self.actionNextDiff.setShortcut("Alt+Down") self.actionNextDiff.triggered.connect(self.nextDiff) self.actionPrevDiff = QAction(qtlib.geticon("go-up"), _("Previous diff (alt+up)"), self) self.actionPrevDiff.setShortcut("Alt+Up") self.actionPrevDiff.triggered.connect(self.prevDiff) self.setMode(self.actionDiffMode) self.actionFirstParent = QAction("1", self) self.actionFirstParent.setCheckable(True) self.actionFirstParent.setChecked(True) self.actionFirstParent.setShortcut("CTRL+1") self.actionFirstParent.setToolTip(_("Show changes from first parent")) self.actionSecondParent = QAction("2", self) self.actionSecondParent.setCheckable(True) self.actionSecondParent.setShortcut("CTRL+2") self.actionSecondParent.setToolTip(_("Show changes from second parent")) self.parentToggleGroup = QActionGroup(self) self.parentToggleGroup.addAction(self.actionFirstParent) self.parentToggleGroup.addAction(self.actionSecondParent) self.parentToggleGroup.triggered.connect(self.setParent) self.actionFind = self.searchbar.toggleViewAction() self.actionFind.setIcon(qtlib.geticon("edit-find")) self.actionFind.setToolTip(_("Toggle display of text search bar")) qtlib.newshortcutsforstdkey(QKeySequence.Find, self, self.searchbar.show) self.actionShelf = QAction("Shelve", self) self.actionShelf.setIcon(qtlib.geticon("shelve")) self.actionShelf.setToolTip(_("Open shelve tool")) self.actionShelf.triggered.connect(self.launchShelve) tb = self.diffToolbar tb.addAction(self.actionFirstParent) tb.addAction(self.actionSecondParent) tb.addSeparator() tb.addAction(self.actionDiffMode) tb.addAction(self.actionFileMode) tb.addAction(self.actionAnnMode) tb.addSeparator() tb.addAction(self.actionNextDiff) tb.addAction(self.actionPrevDiff) tb.addSeparator() tb.addAction(self.actionFind) tb.addAction(self.actionShelf) self.timer = QTimer() self.timer.setSingleShot(False) self.timer.timeout.connect(self.timerBuildDiffMarkers)
def __init__(self, repo, parent): QFrame.__init__(self, parent) framelayout = QVBoxLayout(self) framelayout.setContentsMargins(0, 0, 0, 0) l = QHBoxLayout() l.setContentsMargins(0, 0, 0, 0) l.setSpacing(0) self.repo = repo self._diffs = [] self.topLayout = QVBoxLayout() self.labelhbox = hbox = QHBoxLayout() hbox.setContentsMargins(0, 0, 0, 0) hbox.setSpacing(2) self.topLayout.addLayout(hbox) self.diffToolbar = QToolBar(_('Diff Toolbar')) self.diffToolbar.setIconSize(QSize(16, 16)) self.diffToolbar.setStyleSheet(qtlib.tbstylesheet) hbox.addWidget(self.diffToolbar) self.filenamelabel = w = QLabel() w.setWordWrap(True) f = w.textInteractionFlags() w.setTextInteractionFlags(f | Qt.TextSelectableByMouse) w.linkActivated.connect(self.linkActivated) hbox.addWidget(w, 1) self.extralabel = w = QLabel() w.setWordWrap(True) w.linkActivated.connect(self.linkActivated) self.topLayout.addWidget(w) w.hide() framelayout.addLayout(self.topLayout) framelayout.addLayout(l, 1) hbox = QHBoxLayout() hbox.setContentsMargins(0, 0, 0, 0) hbox.setSpacing(0) l.addLayout(hbox) self.blk = blockmatcher.BlockList(self) self.sci = AnnotateView(repo, self) hbox.addWidget(self.blk) hbox.addWidget(self.sci, 1) self.sci.showMessage.connect(self.showMessage) self.sci.setAnnotationEnabled(False) self.sci.setContextMenuPolicy(Qt.CustomContextMenu) self.sci.customContextMenuRequested.connect(self.menuRequest) self.blk.linkScrollBar(self.sci.verticalScrollBar()) self.blk.setVisible(False) self.sci.setReadOnly(True) self.sci.setUtf8(True) self.sci.installEventFilter(qscilib.KeyPressInterceptor(self)) self.sci.setCaretLineVisible(False) # define markers for colorize zones of diff self.markerplus = self.sci.markerDefine(qsci.Background) self.markerminus = self.sci.markerDefine(qsci.Background) self.markertriangle = self.sci.markerDefine(qsci.Background) self.sci.setMarkerBackgroundColor(QColor('#B0FFA0'), self.markerplus) self.sci.setMarkerBackgroundColor(QColor('#A0A0FF'), self.markerminus) self.sci.setMarkerBackgroundColor(QColor('#FFA0A0'), self.markertriangle) # hide margin 0 (markers) self.sci.setMarginType(0, qsci.SymbolMargin) self.sci.setMarginWidth(0, 0) self.searchbar = qscilib.SearchToolBar(hidable=True) self.searchbar.hide() self.searchbar.searchRequested.connect(self.find) self.searchbar.conditionChanged.connect(self.highlightText) self.layout().addWidget(self.searchbar) self._ctx = None self._filename = None self._status = None self._mode = None self._parent = 0 self._lostMode = None self._lastSearch = u'', False self.actionDiffMode = QAction(qtlib.geticon('view-diff'), _('View change as unified diff output'), self) self.actionDiffMode.setCheckable(True) self.actionDiffMode._mode = DiffMode self.actionFileMode = QAction(qtlib.geticon('view-file'), _('View change in context of file'), self) self.actionFileMode.setCheckable(True) self.actionFileMode._mode = FileMode self.actionAnnMode = QAction(qtlib.geticon('view-annotate'), _('annotate with revision numbers'), self) self.actionAnnMode.setCheckable(True) self.actionAnnMode._mode = AnnMode self.modeToggleGroup = QActionGroup(self) self.modeToggleGroup.addAction(self.actionDiffMode) self.modeToggleGroup.addAction(self.actionFileMode) self.modeToggleGroup.addAction(self.actionAnnMode) self.modeToggleGroup.triggered.connect(self.setMode) # Next/Prev diff (in full file mode) self.actionNextDiff = QAction(qtlib.geticon('go-down'), _('Next diff (alt+down)'), self) self.actionNextDiff.setShortcut('Alt+Down') self.actionNextDiff.triggered.connect(self.nextDiff) self.actionPrevDiff = QAction(qtlib.geticon('go-up'), _('Previous diff (alt+up)'), self) self.actionPrevDiff.setShortcut('Alt+Up') self.actionPrevDiff.triggered.connect(self.prevDiff) self.setMode(self.actionDiffMode) self.actionFirstParent = QAction('1', self) self.actionFirstParent.setCheckable(True) self.actionFirstParent.setChecked(True) self.actionFirstParent.setShortcut('CTRL+1') self.actionFirstParent.setToolTip(_('Show changes from first parent')) self.actionSecondParent = QAction('2', self) self.actionSecondParent.setCheckable(True) self.actionSecondParent.setShortcut('CTRL+2') self.actionSecondParent.setToolTip( _('Show changes from second parent')) self.parentToggleGroup = QActionGroup(self) self.parentToggleGroup.addAction(self.actionFirstParent) self.parentToggleGroup.addAction(self.actionSecondParent) self.parentToggleGroup.triggered.connect(self.setParent) self.actionFind = self.searchbar.toggleViewAction() self.actionFind.setIcon(qtlib.geticon('edit-find')) self.actionFind.setToolTip(_('Toggle display of text search bar')) qtlib.newshortcutsforstdkey(QKeySequence.Find, self, self.searchbar.show) self.actionShelf = QAction('Shelve', self) self.actionShelf.setIcon(qtlib.geticon('shelve')) self.actionShelf.setToolTip(_('Open shelve tool')) self.actionShelf.triggered.connect(self.launchShelve) tb = self.diffToolbar tb.addAction(self.actionFirstParent) tb.addAction(self.actionSecondParent) tb.addSeparator() tb.addAction(self.actionDiffMode) tb.addAction(self.actionFileMode) tb.addAction(self.actionAnnMode) tb.addSeparator() tb.addAction(self.actionNextDiff) tb.addAction(self.actionPrevDiff) tb.addSeparator() tb.addAction(self.actionFind) tb.addAction(self.actionShelf) self.timer = QTimer() self.timer.setSingleShot(False) self.timer.timeout.connect(self.timerBuildDiffMarkers)
def __init__(self, repoagent, command, pats, parent): QDialog.__init__(self, parent) self.setWindowFlags(Qt.Window) self.pats = pats self._repoagent = repoagent self._cmdsession = cmdcore.nullCmdSession() self._cmddialog = cmdui.CmdSessionDialog(self) # Handle rm alias if command == 'rm': command = 'remove' self.command = command self.setWindowTitle(_('%s - hg %s') % (repoagent.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(repoagent, 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) 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, parent): QFrame.__init__(self, parent) self.curchunks = [] self.countselected = 0 self._ctx = None self._lastfile = None self._status = None vbox = QVBoxLayout() vbox.setContentsMargins(0,0,0,0) vbox.setSpacing(0) self.setLayout(vbox) self.labelhbox = hbox = QHBoxLayout() hbox.setContentsMargins(0,0,0,0) hbox.setSpacing(2) self.layout().addLayout(hbox) self.filenamelabel = w = QLabel() self.filenamelabel.hide() hbox.addWidget(w) w.setWordWrap(True) f = w.textInteractionFlags() w.setTextInteractionFlags(f | Qt.TextSelectableByMouse) w.linkActivated.connect(self.linkActivated) self.searchbar = qscilib.SearchToolBar(hidable=True) self.searchbar.hide() self.searchbar.searchRequested.connect(self.find) self.searchbar.conditionChanged.connect(self.highlightText) guifont = qtlib.getfont('fontlist').font() self.sumlabel = QLabel() self.sumlabel.setFont(guifont) self.allbutton = QToolButton() self.allbutton.setFont(guifont) self.allbutton.setText(_('All', 'files')) self.allbutton.setShortcut(QKeySequence.SelectAll) self.allbutton.clicked.connect(self.selectAll) self.nonebutton = QToolButton() self.nonebutton.setFont(guifont) self.nonebutton.setText(_('None', 'files')) self.nonebutton.setShortcut(QKeySequence.New) self.nonebutton.clicked.connect(self.selectNone) self.actionFind = self.searchbar.toggleViewAction() self.actionFind.setIcon(qtlib.geticon('edit-find')) self.actionFind.setToolTip(_('Toggle display of text search bar')) qtlib.newshortcutsforstdkey(QKeySequence.Find, self, self.searchbar.show) self.diffToolbar = QToolBar(_('Diff Toolbar')) self.diffToolbar.setIconSize(QSize(16, 16)) self.diffToolbar.setStyleSheet(qtlib.tbstylesheet) self.diffToolbar.addAction(self.actionFind) hbox.addWidget(self.diffToolbar) hbox.addStretch(1) hbox.addWidget(self.sumlabel) hbox.addWidget(self.allbutton) hbox.addWidget(self.nonebutton) self.extralabel = w = QLabel() w.setWordWrap(True) w.linkActivated.connect(self.linkActivated) self.layout().addWidget(w) self.layout().addSpacing(2) w.hide() self._forceviewindicator = None self.sci = qscilib.Scintilla(self) self.sci.setReadOnly(True) self.sci.setUtf8(True) self.sci.installEventFilter(qscilib.KeyPressInterceptor(self)) self.sci.setContextMenuPolicy(Qt.CustomContextMenu) self.sci.customContextMenuRequested.connect(self.menuRequested) self.sci.setCaretLineVisible(False) self.sci.setMarginType(1, qsci.SymbolMargin) self.sci.setMarginLineNumbers(1, False) self.sci.setMarginWidth(1, QFontMetrics(self.font()).width('XX')) self.sci.setMarginSensitivity(1, True) self.sci.marginClicked.connect(self.marginClicked) self._checkedpix = qtlib.getcheckboxpixmap(QStyle.State_On, Qt.gray, self) self.selected = self.sci.markerDefine(self._checkedpix, -1) self._uncheckedpix = qtlib.getcheckboxpixmap(QStyle.State_Off, Qt.gray, self) self.unselected = self.sci.markerDefine(self._uncheckedpix, -1) self.vertical = self.sci.markerDefine(qsci.VerticalLine, -1) self.divider = self.sci.markerDefine(qsci.Background, -1) self.selcolor = self.sci.markerDefine(qsci.Background, -1) self.sci.setMarkerBackgroundColor(QColor('#BBFFFF'), self.selcolor) self.sci.setMarkerBackgroundColor(QColor('#AAAAAA'), self.divider) mask = (1 << self.selected) | (1 << self.unselected) | \ (1 << self.vertical) | (1 << self.selcolor) | (1 << self.divider) self.sci.setMarginMarkerMask(1, mask) self.blksearch = blockmatcher.BlockList(self) self.blksearch.linkScrollBar(self.sci.verticalScrollBar()) self.blksearch.setVisible(False) hbox = QHBoxLayout() hbox.addWidget(self.sci) hbox.addWidget(self.blksearch) lexer = lexers.difflexer(self) self.sci.setLexer(lexer) self.layout().addLayout(hbox) self.layout().addWidget(self.searchbar) self.clearDisplay()
def __init__(self, ui, path, parent=None): super(RejectsDialog, self).__init__(parent) self.setWindowTitle(_('Merge rejected patch chunks into %s') % hglib.tounicode(path)) self.setWindowFlags(Qt.Window) self.path = path self.setLayout(QVBoxLayout()) editor = qscilib.Scintilla() editor.setBraceMatching(qsci.SloppyBraceMatch) editor.setFolding(qsci.BoxedTreeFoldStyle) editor.installEventFilter(qscilib.KeyPressInterceptor(self)) editor.setContextMenuPolicy(Qt.CustomContextMenu) editor.customContextMenuRequested.connect(self._onMenuRequested) self.baseLineColor = editor.markerDefine(qsci.Background, -1) editor.setMarkerBackgroundColor(QColor('lightblue'), self.baseLineColor) self.layout().addWidget(editor, 3) searchbar = qscilib.SearchToolBar(self) searchbar.searchRequested.connect(editor.find) searchbar.conditionChanged.connect(editor.highlightText) searchbar.hide() def showsearchbar(): searchbar.show() searchbar.setFocus(Qt.OtherFocusReason) qtlib.newshortcutsforstdkey(QKeySequence.Find, self, showsearchbar) self.addActions(searchbar.editorActions()) self.layout().addWidget(searchbar) hbox = QHBoxLayout() hbox.setContentsMargins(2, 2, 2, 2) self.layout().addLayout(hbox, 1) self.chunklist = QListWidget(self) self.updating = True self.chunklist.currentRowChanged.connect(self.showChunk) hbox.addWidget(self.chunklist, 1) bvbox = QVBoxLayout() bvbox.setContentsMargins(2, 2, 2, 2) self.resolved = tb = QToolButton() tb.setIcon(qtlib.geticon('thg-success')) tb.setToolTip(_('Mark this chunk as resolved, goto next unresolved')) tb.pressed.connect(self.resolveCurrentChunk) self.unresolved = tb = QToolButton() tb.setIcon(qtlib.geticon('thg-warning')) tb.setToolTip(_('Mark this chunk as unresolved')) tb.pressed.connect(self.unresolveCurrentChunk) bvbox.addStretch(1) bvbox.addWidget(self.resolved, 0) bvbox.addWidget(self.unresolved, 0) bvbox.addStretch(1) hbox.addLayout(bvbox, 0) self.editor = editor self.rejectbrowser = RejectBrowser(self) hbox.addWidget(self.rejectbrowser, 5) self.textencgroup = fileencoding.createActionGroup(self) self.textencgroup.triggered.connect(self._reloadFile) fileencoding.checkActionByName(self.textencgroup, fileencoding.contentencoding(ui)) BB = QDialogButtonBox bb = QDialogButtonBox(BB.Save|BB.Cancel) bb.accepted.connect(self.accept) bb.rejected.connect(self.reject) self.layout().addWidget(bb) self.saveButton = bb.button(BB.Save) s = QSettings() self.restoreGeometry(s.value('rejects/geometry').toByteArray()) self.editor.loadSettings(s, 'rejects/editor') self.rejectbrowser.loadSettings(s, 'rejects/rejbrowse') if not qscilib.readFile(editor, hglib.tounicode(path), self._textEncoding()): self.hide() QTimer.singleShot(0, self.reject) return earlybytes = hglib.fromunicode(editor.text(), 'replace')[:4096] lexer = lexers.getlexer(ui, path, earlybytes, self) editor.setLexer(lexer) if lexer is None: editor.setFont(qtlib.getfont('fontlog').font()) editor.setMarginLineNumbers(1, True) editor.setMarginWidth(1, str(editor.lines())+'X') buf = cStringIO.StringIO() try: buf.write('diff -r aaaaaaaaaaaa -r bbbbbbbbbbb %s\n' % path) buf.write(open(path + '.rej', 'rb').read()) buf.seek(0) except IOError, e: pass
def __init__(self, repoagent, parent): QFrame.__init__(self, parent) framelayout = QVBoxLayout(self) framelayout.setContentsMargins(0,0,0,0) l = QHBoxLayout() l.setContentsMargins(0,0,0,0) l.setSpacing(0) self._repoagent = repoagent repo = repoagent.rawRepo() # TODO: replace by repoagent if setRepo(bundlerepo) can be removed self.repo = repo self._diffs = [] self.changes = None self.changeselection = False self.chunkatline = {} self.excludemsg = _(' (excluded from the next commit)') self.topLayout = QVBoxLayout() self.labelhbox = hbox = QHBoxLayout() hbox.setContentsMargins(0,0,0,0) hbox.setSpacing(2) self.topLayout.addLayout(hbox) self.diffToolbar = QToolBar(_('Diff Toolbar')) self.diffToolbar.setIconSize(QSize(16,16)) self.diffToolbar.setStyleSheet(qtlib.tbstylesheet) hbox.addWidget(self.diffToolbar) self.filenamelabel = w = QLabel() w.setWordWrap(True) f = w.textInteractionFlags() w.setTextInteractionFlags(f | Qt.TextSelectableByMouse) w.linkActivated.connect(self.linkActivated) hbox.addWidget(w, 1) self.extralabel = w = QLabel() w.setWordWrap(True) w.linkActivated.connect(self.linkActivated) self.topLayout.addWidget(w) w.hide() framelayout.addLayout(self.topLayout) framelayout.addLayout(l, 1) hbox = QHBoxLayout() hbox.setContentsMargins(0, 0, 0, 0) hbox.setSpacing(0) l.addLayout(hbox) self.blk = blockmatcher.BlockList(self) self.blksearch = blockmatcher.BlockList(self) self.sci = AnnotateView(repoagent, self) self._forceviewindicator = None hbox.addWidget(self.blk) hbox.addWidget(self.sci, 1) hbox.addWidget(self.blksearch) self.sci.showMessage.connect(self.showMessage) self.sci.setAnnotationEnabled(False) self.sci.setContextMenuPolicy(Qt.CustomContextMenu) self.sci.customContextMenuRequested.connect(self.menuRequest) self.annmarginclicked = False self.sci.marginClicked.connect(self.marginClicked) self.blk.linkScrollBar(self.sci.verticalScrollBar()) self.blk.setVisible(False) self.blksearch.linkScrollBar(self.sci.verticalScrollBar()) self.blksearch.setVisible(False) self.sci.setReadOnly(True) self.sci.setUtf8(True) keys = set((Qt.Key_Space,)) self.sci.installEventFilter(qscilib.KeyPressInterceptor(self, keys)) self.sci.setCaretLineVisible(False) # define markers for colorize zones of diff self.markerplus = self.sci.markerDefine(qsci.Background) self.markerminus = self.sci.markerDefine(qsci.Background) self.markertriangle = self.sci.markerDefine(qsci.Background) self.sci.setMarkerBackgroundColor(QColor('#B0FFA0'), self.markerplus) self.sci.setMarkerBackgroundColor(QColor('#A0A0FF'), self.markerminus) self.sci.setMarkerBackgroundColor(QColor('#FFA0A0'), self.markertriangle) self._checkedpix = qtlib.getcheckboxpixmap(QStyle.State_On, QColor('#B0FFA0'), self) self.inclmarker = self.sci.markerDefine(self._checkedpix, -1) self._uncheckedpix = qtlib.getcheckboxpixmap(QStyle.State_Off, QColor('#B0FFA0'), self) self.exclmarker = self.sci.markerDefine(self._uncheckedpix, -1) self.exclcolor = self.sci.markerDefine(qsci.Background, -1) self.sci.setMarkerBackgroundColor(QColor('lightgrey'), self.exclcolor) self.sci.setMarkerForegroundColor(QColor('darkgrey'), self.exclcolor) mask = (1 << self.inclmarker) | (1 << self.exclmarker) | \ (1 << self.exclcolor) self.sci.setMarginType(4, qsci.SymbolMargin) self.sci.setMarginMarkerMask(4, mask) self.markexcluded = QSettings().value('changes-mark-excluded').toBool() self.excludeindicator = -1 self.updateChunkIndicatorMarks() self.sci.setIndicatorDrawUnder(True, self.excludeindicator) self.sci.setIndicatorForegroundColor(QColor('gray'), self.excludeindicator) # hide margin 0 (markers) self.sci.setMarginType(0, qsci.SymbolMargin) self.sci.setMarginWidth(0, 0) self.searchbar = qscilib.SearchToolBar(hidable=True) self.searchbar.hide() self.searchbar.searchRequested.connect(self.find) self.searchbar.conditionChanged.connect(self.highlightText) self.layout().addWidget(self.searchbar) self._ctx = None self._filename = None self._status = None self._mode = None self._parent = 0 self._lostMode = None self._lastSearch = u'', False self.actionDiffMode = QAction(qtlib.geticon('view-diff'), _('View change as unified diff output'), self) self.actionDiffMode.setCheckable(True) self.actionDiffMode._mode = DiffMode self.actionFileMode = QAction(qtlib.geticon('view-file'), _('View change in context of file'), self) self.actionFileMode.setCheckable(True) self.actionFileMode._mode = FileMode self.actionAnnMode = QAction(qtlib.geticon('view-annotate'), _('annotate with revision numbers'), self) self.actionAnnMode.setCheckable(True) self.actionAnnMode._mode = AnnMode self.modeToggleGroup = QActionGroup(self) self.modeToggleGroup.addAction(self.actionDiffMode) self.modeToggleGroup.addAction(self.actionFileMode) self.modeToggleGroup.addAction(self.actionAnnMode) self.modeToggleGroup.triggered.connect(self._setModeByAction) # Next/Prev diff (in full file mode) self.actionNextDiff = QAction(qtlib.geticon('go-down'), _('Next diff (alt+down)'), self) self.actionNextDiff.setShortcut('Alt+Down') self.actionNextDiff.triggered.connect(self.nextDiff) self.actionPrevDiff = QAction(qtlib.geticon('go-up'), _('Previous diff (alt+up)'), self) self.actionPrevDiff.setShortcut('Alt+Up') self.actionPrevDiff.triggered.connect(self.prevDiff) self._setModeByAction(self.actionDiffMode) self.actionFirstParent = QAction('1', self) self.actionFirstParent.setCheckable(True) self.actionFirstParent.setChecked(True) self.actionFirstParent.setShortcut('CTRL+1') self.actionFirstParent.setToolTip(_('Show changes from first parent')) self.actionSecondParent = QAction('2', self) self.actionSecondParent.setCheckable(True) self.actionSecondParent.setShortcut('CTRL+2') self.actionSecondParent.setToolTip(_('Show changes from second parent')) self.parentToggleGroup = QActionGroup(self) self.parentToggleGroup.addAction(self.actionFirstParent) self.parentToggleGroup.addAction(self.actionSecondParent) self.parentToggleGroup.triggered.connect(self.setParent) self.actionFind = self.searchbar.toggleViewAction() self.actionFind.setIcon(qtlib.geticon('edit-find')) self.actionFind.setToolTip(_('Toggle display of text search bar')) self.actionFind.triggered.connect(self.searchbarTriggered) qtlib.newshortcutsforstdkey(QKeySequence.Find, self, self.showsearchbar) self.actionShelf = QAction('Shelve', self) self.actionShelf.setIcon(qtlib.geticon('shelve')) self.actionShelf.setToolTip(_('Open shelve tool')) self.actionShelf.triggered.connect(self.launchShelve) tb = self.diffToolbar tb.addAction(self.actionFirstParent) tb.addAction(self.actionSecondParent) tb.addSeparator() tb.addAction(self.actionDiffMode) tb.addAction(self.actionFileMode) tb.addAction(self.actionAnnMode) tb.addSeparator() tb.addAction(self.actionNextDiff) tb.addAction(self.actionPrevDiff) tb.addSeparator() tb.addAction(self.actionFind) tb.addAction(self.actionShelf) self.timer = QTimer(self) self.timer.setSingleShot(False) self.timer.timeout.connect(self.timerBuildDiffMarkers)
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, 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, 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)