def __init__(self, parent): super(RejectBrowser, self).__init__(parent) self.setFrameStyle(0) self.setReadOnly(True) self.setUtf8(True) self.installEventFilter(qscilib.KeyPressInterceptor(self)) self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.menuRequested) self.setCaretLineVisible(False) self.setMarginType(1, qsci.SymbolMargin) self.setMarginLineNumbers(1, False) self.setMarginWidth(1, QFontMetrics(self.font()).width('XX')) self.setMarginSensitivity(1, True) self.addedMark = self.markerDefine(qsci.Plus, -1) self.removedMark = self.markerDefine(qsci.Minus, -1) self.addedColor = self.markerDefine(qsci.Background, -1) self.removedColor = self.markerDefine(qsci.Background, -1) self.setMarkerBackgroundColor(QColor('lightgreen'), self.addedColor) self.setMarkerBackgroundColor(QColor('cyan'), self.removedColor) mask = (1 << self.addedMark) | (1 << self.removedMark) | \ (1 << self.addedColor) | (1 << self.removedColor) self.setMarginMarkerMask(1, mask) lexer = lexers.get_diff_lexer(self) self.setLexer(lexer)
def __init__(self, parent): super(RejectBrowser, self).__init__(parent) self.setFrameStyle(0) self.setReadOnly(True) self.setUtf8(True) self.installEventFilter(qscilib.KeyPressInterceptor(self)) self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.menuRequested) self.setCaretLineVisible(False) self.setMarginType(1, qsci.SymbolMargin) self.setMarginLineNumbers(1, False) self.setMarginWidth(1, QFontMetrics(self.font()).width("XX")) self.setMarginSensitivity(1, True) self.addedMark = self.markerDefine(qsci.Plus, -1) self.removedMark = self.markerDefine(qsci.Minus, -1) self.addedColor = self.markerDefine(qsci.Background, -1) self.removedColor = self.markerDefine(qsci.Background, -1) self.setMarkerBackgroundColor(QColor("lightgreen"), self.addedColor) self.setMarkerBackgroundColor(QColor("cyan"), self.removedColor) mask = (1 << self.addedMark) | (1 << self.removedMark) | (1 << self.addedColor) | (1 << self.removedColor) self.setMarginMarkerMask(1, mask) lexer = lexers.get_diff_lexer(self) self.setLexer(lexer)
def initqsci(w): w.setUtf8(True) w.setReadOnly(True) w.setMarginWidth(1, 0) # hide area for line numbers self.lexer = lex = lexers.get_diff_lexer(self) fh = qtlib.getfont('fontdiff') fh.changed.connect(self.forwardFont) lex.setFont(fh.font()) w.setLexer(lex)
def displayFile(self, filename=None, status=None): if isinstance(filename, (unicode, QString)): filename = hglib.fromunicode(filename) status = hglib.fromunicode(status) if filename and self._filename == filename: # Get the last visible line to restore it after reloading the editor lastCursorPosition = self.sci.getCursorPosition() lastScrollPosition = self.sci.firstVisibleLine() else: lastCursorPosition = (0, 0) lastScrollPosition = 0 self._filename, self._status = filename, status self.clearMarkup() self._diffs = [] if filename is None: self.restrictModes(False, False, False) return if self._ctx2: ctx2 = self._ctx2 elif self._parent == 0 or len(self._ctx.parents()) == 1: ctx2 = self._ctx.p1() else: ctx2 = self._ctx.p2() fd = filedata.FileData(self._ctx, ctx2, filename, status) if fd.elabel: self.extralabel.setText(fd.elabel) self.extralabel.show() else: self.extralabel.hide() self.filenamelabel.setText(fd.flabel) if not fd.isValid(): self.sci.setText(fd.error) self.sci.setLexer(None) self.sci.setFont(qtlib.getfont("fontlog").font()) self.sci.setMarginWidth(1, 0) self.blk.setVisible(False) self.restrictModes(False, False, False) return candiff = bool(fd.diff) canfile = bool(fd.contents or fd.ucontents) canann = bool(fd.contents) and type(self._ctx.rev()) is int if not candiff or not canfile: self.restrictModes(candiff, canfile, canann) else: self.actionDiffMode.setEnabled(True) self.actionFileMode.setEnabled(True) self.actionAnnMode.setEnabled(True) if self._lostMode: self._mode = self._lostMode if self._lostMode == DiffMode: self.actionDiffMode.trigger() elif self._lostMode == FileMode: self.actionFileMode.trigger() elif self._lostMode == AnnMode: self.actionAnnMode.trigger() self._lostMode = None self.blk.setVisible(self._mode != DiffMode) self.sci.setAnnotationEnabled(self._mode == AnnMode) if self._mode == DiffMode: self.sci.setMarginWidth(1, 0) lexer = lexers.get_diff_lexer(self) self.sci.setLexer(lexer) if lexer is None: self.sci.setFont(qtlib.getfont("fontlog").font()) # trim first three lines, for example: # diff -r f6bfc41af6d7 -r c1b18806486d tortoisehg/hgqt/thgrepo.py # --- a/tortoisehg/hgqt/thgrepo.py # +++ b/tortoisehg/hgqt/thgrepo.py if fd.diff: out = fd.diff.split("\n", 3) if len(out) == 4: self.sci.setText(hglib.tounicode(out[3])) else: # there was an error or rename without diffs self.sci.setText(hglib.tounicode(fd.diff)) elif fd.ucontents: # subrepo summary and perhaps other data self.sci.setText(fd.ucontents) self.sci.setLexer(None) self.sci.setFont(qtlib.getfont("fontlog").font()) self.sci.setMarginWidth(1, 0) self.blk.setVisible(False) return elif fd.contents: lexer = lexers.get_lexer(filename, fd.contents, self) self.sci.setLexer(lexer) if lexer is None: self.sci.setFont(qtlib.getfont("fontlog").font()) self.sci.setText(hglib.tounicode(fd.contents)) self.blk.setVisible(True) self.sci._updatemarginwidth() if self._mode == AnnMode: self.sci._updateannotation(self._ctx, filename) else: return # Recover the last cursor/scroll position self.sci.setCursorPosition(*lastCursorPosition) # Make sure that lastScrollPosition never exceeds the amount of # lines on the editor lastScrollPosition = min(lastScrollPosition, self.sci.lines() - 1) self.sci.verticalScrollBar().setValue(lastScrollPosition) self.highlightText(*self._lastSearch) uf = hglib.tounicode(filename) uc = hglib.tounicode(fd.contents) or "" self.fileDisplayed.emit(uf, uc) if self._mode != DiffMode: self.blk.setVisible(True) self.blk.syncPageStep() if fd.contents and fd.olddata: if self.timer.isActive(): self.timer.stop() self._fd = fd self.timer.start() self.actionNextDiff.setEnabled(bool(self._diffs)) self.actionPrevDiff.setEnabled(bool(self._diffs)) lexer = self.sci.lexer() if lexer: font = self.sci.lexer().font(0) else: font = self.sci.font() fm = QFontMetrics(font) self.maxWidth = fm.maxWidth() lines = unicode(self.sci.text()).splitlines() if lines: # assume that the longest line has the largest width; # fm.width() is too slow to apply to each line. try: longestline = max(lines, key=len) except TypeError: # Python<2.5 has no key support longestline = max((len(l), l) for l in lines)[1] self.maxWidth += fm.width(longestline) self.updateScrollBar()
def displayFile(self, filename=None, status=None): if isinstance(filename, (unicode, QString)): filename = hglib.fromunicode(filename) status = hglib.fromunicode(status) if filename and self._filename == filename: # Get the last visible line to restore it after reloading the editor lastCursorPosition = self.sci.getCursorPosition() lastScrollPosition = self.sci.firstVisibleLine() else: lastCursorPosition = (0, 0) lastScrollPosition = 0 self._filename, self._status = filename, status self.clearMarkup() self._diffs = [] if filename is None: self.restrictModes(False, False, False) return if self._ctx2: ctx2 = self._ctx2 elif self._parent == 0 or len(self._ctx.parents()) == 1: ctx2 = self._ctx.p1() else: ctx2 = self._ctx.p2() fd = filedata.FileData(self._ctx, ctx2, filename, status) if fd.elabel: self.extralabel.setText(fd.elabel) self.extralabel.show() else: self.extralabel.hide() self.filenamelabel.setText(fd.flabel) if not fd.isValid(): self.sci.setText(fd.error) self.sci.setLexer(None) self.sci.setFont(qtlib.getfont('fontlog').font()) self.sci.setMarginWidth(1, 0) self.blk.setVisible(False) self.restrictModes(False, False, False) return candiff = bool(fd.diff) canfile = bool(fd.contents or fd.ucontents) canann = bool(fd.contents) and type(self._ctx.rev()) is int if not candiff or not canfile: self.restrictModes(candiff, canfile, canann) else: self.actionDiffMode.setEnabled(True) self.actionFileMode.setEnabled(True) self.actionAnnMode.setEnabled(True) if self._lostMode: self._mode = self._lostMode if self._lostMode == DiffMode: self.actionDiffMode.trigger() elif self._lostMode == FileMode: self.actionFileMode.trigger() elif self._lostMode == AnnMode: self.actionAnnMode.trigger() self._lostMode = None self.blk.setVisible(self._mode != DiffMode) self.sci.setAnnotationEnabled(self._mode == AnnMode) if self._mode == DiffMode: self.sci.setMarginWidth(1, 0) lexer = lexers.get_diff_lexer(self) self.sci.setLexer(lexer) if lexer is None: self.sci.setFont(qtlib.getfont('fontlog').font()) # trim first three lines, for example: # diff -r f6bfc41af6d7 -r c1b18806486d tortoisehg/hgqt/thgrepo.py # --- a/tortoisehg/hgqt/thgrepo.py # +++ b/tortoisehg/hgqt/thgrepo.py if fd.diff: out = fd.diff.split('\n', 3) if len(out) == 4: self.sci.setText(hglib.tounicode(out[3])) else: # there was an error or rename without diffs self.sci.setText(hglib.tounicode(fd.diff)) elif fd.ucontents: # subrepo summary and perhaps other data self.sci.setText(fd.ucontents) self.sci.setLexer(None) self.sci.setFont(qtlib.getfont('fontlog').font()) self.sci.setMarginWidth(1, 0) self.blk.setVisible(False) return elif fd.contents: lexer = lexers.get_lexer(filename, fd.contents, self) self.sci.setLexer(lexer) if lexer is None: self.sci.setFont(qtlib.getfont('fontlog').font()) self.sci.setText(hglib.tounicode(fd.contents)) self.blk.setVisible(True) self.sci._updatemarginwidth() if self._mode == AnnMode: self.sci._updateannotation(self._ctx, filename) else: return # Recover the last cursor/scroll position self.sci.setCursorPosition(*lastCursorPosition) # Make sure that lastScrollPosition never exceeds the amount of # lines on the editor lastScrollPosition = min(lastScrollPosition, self.sci.lines() - 1) self.sci.verticalScrollBar().setValue(lastScrollPosition) self.highlightText(*self._lastSearch) uf = hglib.tounicode(filename) uc = hglib.tounicode(fd.contents) or '' self.fileDisplayed.emit(uf, uc) if self._mode != DiffMode: self.blk.setVisible(True) self.blk.syncPageStep() if fd.contents and fd.olddata: if self.timer.isActive(): self.timer.stop() self._fd = fd self.timer.start() self.actionNextDiff.setEnabled(bool(self._diffs)) self.actionPrevDiff.setEnabled(bool(self._diffs)) lexer = self.sci.lexer() if lexer: font = self.sci.lexer().font(0) else: font = self.sci.font() fm = QFontMetrics(font) self.maxWidth = fm.maxWidth() lines = unicode(self.sci.text()).splitlines() if lines: # assume that the longest line has the largest width; # fm.width() is too slow to apply to each line. try: longestline = max(lines, key=len) except TypeError: # Python<2.5 has no key support longestline = max((len(l), l) for l in lines)[1] self.maxWidth += fm.width(longestline) self.updateScrollBar()
def __init__(self, parent): QFrame.__init__(self, parent) self.curchunks = [] self.countselected = 0 self._ctx = None self._lastfile = 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) 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) 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.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.selected = self.sci.markerDefine(qsci.Plus, -1) self.unselected = self.sci.markerDefine(qsci.Minus, -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.layout().addWidget(self.sci, 1) lexer = lexers.get_diff_lexer(self) self.sci.setLexer(lexer) self.clearDisplay()
def __init__(self, parent): QFrame.__init__(self, parent) self.curchunks = [] self.countselected = 0 self._ctx = None self._lastfile = 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) 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) 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.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.selected = self.sci.markerDefine(qsci.Plus, -1) self.unselected = self.sci.markerDefine(qsci.Minus, -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.layout().addWidget(self.sci, 1) lexer = lexers.get_diff_lexer(self) self.sci.setLexer(lexer) self.clearDisplay()