Changeset eea6d46db008…
Parent dbf9bd4d899d…
by
Changes to 3 files · Browse files at eea6d46db008 Showing diff from parent dbf9bd4d899d Diff from another changeset...
@@ -153,7 +153,6 @@ vbox.addWidget(self.revpanel, 0)
self.textView = HgFileView(self.repo, self)
- self.textView.forceMode('file')
self.textView.revisionSelected.connect(self.goto)
vbox.addWidget(self.textView, 1)
|
|
|
@@ -35,6 +35,10 @@
qsci = Qsci.QsciScintilla
+DiffMode = 1
+FileMode = 2
+AnnMode = 3
+
class HgFileView(QFrame):
"""file diff and content viewer"""
@@ -142,15 +146,18 @@ _('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'),
_('View change in context, annotate with '
'revision number'),
self)
self.actionAnnMode.setCheckable(True)
+ self.actionAnnMode._mode = AnnMode
self.modeToggleGroup = QActionGroup(self)
self.modeToggleGroup.addAction(self.actionDiffMode)
@@ -167,8 +174,7 @@ 'Previous diff (alt+up)', self)
self.actionPrevDiff.setShortcut('Alt+Up')
self.actionPrevDiff.triggered.connect(self.prevDiff)
-
- self.forceMode('diff')
+ self.setMode(self.actionDiffMode)
self.actionFind = self.searchbar.toggleViewAction()
self.actionFind.setIcon(qtlib.geticon('edit-find'))
@@ -218,36 +224,42 @@ @pyqtSlot(QAction)
def setMode(self, action):
'One of the mode toolbar buttons has been toggled'
-
- mode = {self.actionDiffMode.text():'diff',
- self.actionFileMode.text():'file',
- self.actionAnnMode.text() :'ann'}[action.text()]
- self.actionNextDiff.setEnabled(mode == 'file')
- self.actionPrevDiff.setEnabled(False)
- self.blk.setVisible(mode == 'file')
- self.sci.setAnnotationEnabled(mode == 'ann')
+ mode = action._mode
if mode != self._mode:
self._mode = mode
- if not self._lostMode:
- self.displayFile()
+ self.actionNextDiff.setEnabled(False)
+ self.actionPrevDiff.setEnabled(False)
+ self.blk.setVisible(mode == FileMode)
+ self.sci.setAnnotationEnabled(mode == AnnMode)
+ self.displayFile()
- def forceMode(self, mode):
- 'Force into file or diff mode, based on content constaints'
- assert mode in ('diff', 'file')
+ def restrictModes(self, candiff, canfile, canann):
+ 'Disable modes based on content constraints'
+ self.actionDiffMode.setEnabled(candiff)
+ self.actionFileMode.setEnabled(canfile)
+ self.actionAnnMode.setEnabled(canann)
+
+ # Switch mode if necessary
+ mode = self._mode
+ if not candiff and mode == DiffMode and canfile:
+ mode = FileMode
+ if not canfile and mode != DiffMode:
+ mode = DiffMode
if self._lostMode is None:
self._lostMode = self._mode
- self._mode = mode
- if mode == 'diff':
+ if self._mode != mode:
+ self.actionNextDiff.setEnabled(False)
+ self.actionPrevDiff.setEnabled(False)
+ self.blk.setVisible(mode == FileMode)
+ self.sci.setAnnotationEnabled(mode == AnnMode)
+ self._mode = mode
+
+ if self._mode == DiffMode:
self.actionDiffMode.setChecked(True)
+ elif self._mode == FileMode:
+ self.actionFileMode.setChecked(True)
else:
- self.actionFileMode.setChecked(True)
- self.actionDiffMode.setEnabled(False)
- self.actionFileMode.setEnabled(False)
- self.actionAnnMode.setEnabled(False)
- self.actionNextDiff.setEnabled(False)
- self.actionPrevDiff.setEnabled(False)
- self.blk.setVisible(mode == 'file')
- self.sci.setAnnotationEnabled(False)
+ self.actionAnnMode.setChecked(True)
def setContext(self, ctx):
self._ctx = ctx
@@ -256,10 +268,6 @@ self.actionAnnMode.setVisible(ctx.rev() != None)
self.actionShelf.setVisible(ctx.rev() == None)
- def displayDiff(self, rev):
- if rev != self._p_rev:
- self.displayFile(rev=rev)
-
def showLine(self, line):
if line < self.sci.lines():
self.sci.setCursorPosition(line, 0)
@@ -267,7 +275,8 @@ @pyqtSlot()
def clearDisplay(self):
self._filename = None
- self.forceMode('diff')
+ self.restrictModes(False, False, False)
+ self.sci.setMarginWidth(1, 0)
self.clearMarkup()
def clearMarkup(self):
@@ -285,14 +294,14 @@ self._filename, self._status = filename, status
if isinstance(filename, (unicode, QString)):
filename = hglib.fromunicode(filename)
- if rev is not None:
- self._p_rev = rev
self.clearMarkup()
if filename is None:
- self.forceMode('file')
+ self.restrictModes(False, False, False)
return
+ if rev is not None:
+ self._p_rev = rev
if self._p_rev is not None:
ctx2 = self.repo[self._p_rev]
else:
@@ -309,29 +318,32 @@
if not fd.isValid():
self.sci.setText(fd.error)
- self.forceMode('file')
+ self.restrictModes(False, False, False)
return
- if fd.diff and not fd.contents:
- self.forceMode('diff')
- elif fd.contents and not fd.diff:
- self.forceMode('file')
- elif not fd.contents and not fd.diff:
- self.forceMode('file')
+ candiff = bool(fd.diff)
+ canfile = bool(fd.contents)
+ canann = canfile 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:
- if self._lostMode == 'diff':
+ self._mode = self._lostMode
+ if self._lostMode == DiffMode:
self.actionDiffMode.trigger()
- elif self._lostMode == 'file':
+ elif self._lostMode == FileMode:
self.actionFileMode.trigger()
- elif self._lostMode == 'ann':
+ elif self._lostMode == AnnMode:
self.actionAnnMode.trigger()
self._lostMode = None
+ self.blk.setVisible(self._mode == FileMode)
+ self.sci.setAnnotationEnabled(self._mode == AnnMode)
- if self._mode == 'diff':
+ if self._mode == DiffMode:
self.sci.setMarginWidth(1, 0)
lexer = lexers.get_diff_lexer(self)
self.sci.setLexer(lexer)
@@ -339,15 +351,16 @@ # diff -r f6bfc41af6d7 -r c1b18806486d tortoisehg/hgqt/thgrepo.py
# --- a/tortoisehg/hgqt/thgrepo.py
# +++ b/tortoisehg/hgqt/thgrepo.py
- 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))
+ 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.contents is None:
return
- elif self._mode == 'ann':
+ elif self._mode == AnnMode:
self.sci.setSource(filename, self._ctx.rev())
else:
lexer = lexers.get_lexer(filename, fd.contents, self)
@@ -359,7 +372,7 @@ uf = hglib.tounicode(self._filename)
self.fileDisplayed.emit(uf, fd.contents or QString())
- if self._mode == 'file' and fd.contents and fd.olddata:
+ if self._mode == FileMode and fd.contents and fd.olddata:
# Update blk margin
if self.timer.isActive():
self.timer.stop()
@@ -392,7 +405,8 @@ @pyqtSlot(unicode, object)
@pyqtSlot(unicode, object, int)
def sourceChanged(self, path, rev, line=None):
- self.revisionSelected.emit(rev)
+ if rev != self._ctx.rev():
+ self.revisionSelected.emit(rev)
@pyqtSlot(unicode, object, int)
def editSelected(self, path, rev, line):
@@ -457,7 +471,7 @@ self.blk.setUpdatesEnabled(True)
def nextDiff(self):
- if self._mode == 'diff' or not self._diffs:
+ if self._mode == DiffMode or not self._diffs:
self.actionNextDiff.setEnabled(False)
self.actionPrevDiff.setEnabled(False)
return
@@ -474,7 +488,7 @@ self.actionPrevDiff.setEnabled(True)
def prevDiff(self):
- if self._mode == 'diff' or not self._diffs:
+ if self._mode == DiffMode or not self._diffs:
self.actionNextDiff.setEnabled(False)
self.actionPrevDiff.setEnabled(False)
return
@@ -544,6 +558,8 @@ return 'A'
if wfile in removed:
return 'R'
+ if wfile in ctx:
+ return 'C'
return None
repo = ctx._repo
|
@@ -25,7 +25,6 @@
# TODO
# Communicate status (MARC) from model to HgFileView
-# Allow manifest mode in HgFileView even when no diffs are available
class ManifestDialog(QMainWindow):
"""
@@ -346,21 +345,20 @@ @pyqtSlot(unicode, object, int)
def setSource(self, path, rev, line=None):
"""Change path and revision to show at once"""
- revchanged = self._rev != rev
- if revchanged:
+ if self._rev != rev:
self._rev = rev
self._setupmodel()
- self.setPath(path)
- ctx = self._repo[rev]
- if self.path in ctx:
- self._fileview.setContext(ctx)
- self._fileview.displayFile(path, rev)
- if line:
- self._fileview.showLine(int(line) - 1)
- else:
- self._fileview.clearDisplay()
- if revchanged:
self.revChanged.emit(rev)
+ elif path != self.path:
+ self.setPath(path)
+ ctx = self._repo[rev]
+ if self.path in ctx:
+ self._fileview.setContext(ctx)
+ self._fileview.displayFile(path)
+ if line:
+ self._fileview.showLine(int(line) - 1)
+ else:
+ self._fileview.clearDisplay()
@property
def path(self):
@@ -375,7 +373,7 @@ @pyqtSlot()
def _updatecontent(self):
self._fileview.setContext(self._repo[self._rev])
- self._fileview.displayFile(self.path, self._rev, 'C') # TODO
+ self._fileview.displayFile(self.path) # TODO, report status
@pyqtSlot()
def _emitPathChanged(self):
|
Loading...