Changeset c0c9c00ece40…
Parent 72cf764bfbd4…
by
Changes to 4 files · Browse files at c0c9c00ece40 Showing diff from parent 72cf764bfbd4 Diff from another changeset...
|
|
@@ -0,0 +1,164 @@ + # Copyright (c) 2009-2010 LOGILAB S.A. (Paris, FRANCE).
+# http://www.logilab.fr/ -- mailto:contact@logilab.fr
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+from PyQt4 import QtCore, QtGui, Qsci
+Qt = QtCore.Qt
+connect = QtCore.QObject.connect
+SIGNAL = QtCore.SIGNAL
+
+from tortoisehg.hgqt import icon as geticon
+from tortoisehg.hgqt.filedialogs import FileLogDialog, FileDiffDialog
+
+
+class HgFileListView(QtGui.QTableView):
+ """
+ A QTableView for displaying a HgFileListModel
+ """
+ def __init__(self, parent=None):
+ QtGui.QTableView.__init__(self, parent)
+ self.setShowGrid(False)
+ self.horizontalHeader().hide()
+ self.verticalHeader().hide()
+ self.verticalHeader().setDefaultSectionSize(20)
+ self.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
+ self.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
+ self.setAlternatingRowColors(True)
+ self.setTextElideMode(Qt.ElideLeft)
+
+ self.horizontalHeader().setToolTip('Double click to toggle merge mode')
+
+ self.createActions()
+
+ connect(self.horizontalHeader(), SIGNAL('sectionDoubleClicked(int)'),
+ self.toggleFullFileList)
+ connect(self,
+ SIGNAL('doubleClicked (const QModelIndex &)'),
+ self.fileActivated)
+
+ connect(self.horizontalHeader(),
+ SIGNAL('sectionResized(int, int, int)'),
+ self.sectionResized)
+ self._diff_dialogs = {}
+ self._nav_dialogs = {}
+
+ def setModel(self, model):
+ QtGui.QTableView.setModel(self, model)
+ connect(model, SIGNAL('layoutChanged()'),
+ self.fileSelected)
+ connect(self.selectionModel(),
+ SIGNAL('currentRowChanged (const QModelIndex & , const QModelIndex & )'),
+ self.fileSelected)
+ self.horizontalHeader().setResizeMode(1, QtGui.QHeaderView.Stretch)
+
+ def currentFile(self):
+ index = self.currentIndex()
+ return self.model().fileFromIndex(index)
+
+ def fileSelected(self, index=None, *args):
+ if index is None:
+ index = self.currentIndex()
+ sel_file = self.model().fileFromIndex(index)
+ from_rev = self.model().revFromIndex(index)
+ self.emit(SIGNAL('fileSelected'), sel_file, from_rev)
+
+ def selectFile(self, filename):
+ self.setCurrentIndex(self.model().indexFromFile(filename))
+
+ def fileActivated(self, index, alternate=False):
+ sel_file = self.model().fileFromIndex(index)
+ if alternate:
+ self.navigate(sel_file)
+ else:
+ self.diffNavigate(sel_file)
+
+ def toggleFullFileList(self, *args):
+ self.model().toggleFullFileList()
+
+ def navigate(self, filename=None):
+ self._navigate(filename, FileLogDialog, self._nav_dialogs)
+
+ def diffNavigate(self, filename=None):
+ self._navigate(filename, FileDiffDialog, self._diff_dialogs)
+
+ def _navigate(self, filename, dlgclass, dlgdict):
+ if filename is None:
+ filename = self.currentFile()
+ model = self.model()
+ if filename is not None and len(model.repo.file(filename))>0:
+ if filename not in dlgdict:
+ dlg = dlgclass(model.repo, filename,
+ repoviewer=self.window())
+ dlgdict[filename] = dlg
+
+ dlg.setWindowTitle('Hg file log viewer')
+ dlg = dlgdict[filename]
+ dlg.goto(model.current_ctx.rev())
+ dlg.show()
+ dlg.raise_()
+ dlg.activateWindow()
+
+ def _action_defs(self):
+ a = [("navigate", self.tr("Navigate"), None ,
+ self.tr('Navigate the revision tree of this file'), None, self.navigate),
+ ("diffnavigate", self.tr("Diff-mode navigate"), None,
+ self.tr('Navigate the revision tree of this file in diff mode'), None, self.diffNavigate),
+ ]
+ return a
+
+ def createActions(self):
+ self._actions = {}
+ for name, desc, icon, tip, key, cb in self._action_defs():
+ act = QtGui.QAction(desc, self)
+ if icon:
+ act.setIcon(geticon(icon))
+ if tip:
+ act.setStatusTip(tip)
+ if key:
+ act.setShortcut(key)
+ if cb:
+ connect(act, SIGNAL('triggered()'), cb)
+ self._actions[name] = act
+ self.addAction(act)
+
+ def contextMenuEvent(self, event):
+ menu = QtGui.QMenu(self)
+ for act in ['navigate', 'diffnavigate']:
+ if act:
+ menu.addAction(self._actions[act])
+ else:
+ menu.addSeparator()
+ menu.exec_(event.globalPos())
+
+ def resizeEvent(self, event):
+ vp_width = self.viewport().width()
+ col_widths = [self.columnWidth(i) \
+ for i in range(1, self.model().columnCount())]
+ col_width = vp_width - sum(col_widths)
+ col_width = max(col_width, 50)
+ self.setColumnWidth(0, col_width)
+ QtGui.QTableView.resizeEvent(self, event)
+
+ def sectionResized(self, idx, oldsize, newsize):
+ if idx == 1:
+ self.model().setDiffWidth(newsize)
+
+ def nextFile(self):
+ row = self.currentIndex().row()
+ self.setCurrentIndex(self.model().index(min(row+1,
+ self.model().rowCount() - 1), 0))
+ def prevFile(self):
+ row = self.currentIndex().row()
+ self.setCurrentIndex(self.model().index(max(row - 1, 0), 0))
|
|
@@ -16,11 +16,8 @@ """
Qt4 high level widgets for hg repo changelogs and filelogs
"""
-import sys
import difflib
-from mercurial.node import hex, short as short_hex, bin as short_bin
-from mercurial import util
try:
from mercurial.error import LookupError
except ImportError:
@@ -30,17 +27,11 @@Qt = QtCore.Qt
connect = QtCore.QObject.connect
SIGNAL = QtCore.SIGNAL
-nullvariant = QtCore.QVariant()
from tortoisehg.util.util import exec_flag_changed, isbfile, bfilepath
-from tortoisehg.hgqt.decorators import timeit
from tortoisehg.hgqt.config import HgConfig
-from tortoisehg.hgqt import icon as geticon
-from tortoisehg.hgqt.filedialogs import FileLogDialog, FileDiffDialog
-from tortoisehg.hgqt.manifestdialog import ManifestDialog
-from tortoisehg.hgqt.quickbar import QuickBar
from tortoisehg.hgqt.lexers import get_lexer
from tortoisehg.hgqt.blockmatcher import BlockList
@@ -479,144 +470,3 @@ # ok, let's enable GUI refresh for code viewers and diff-block displayers
self.sci.setUpdatesEnabled(True)
self.blk.setUpdatesEnabled(True)
-
-
-class HgFileListView(QtGui.QTableView):
- """
- A QTableView for displaying a HgFileListModel
- """
- def __init__(self, parent=None):
- QtGui.QTableView.__init__(self, parent)
- self.setShowGrid(False)
- self.horizontalHeader().hide()
- self.verticalHeader().hide()
- self.verticalHeader().setDefaultSectionSize(20)
- self.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
- self.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
- self.setAlternatingRowColors(True)
- self.setTextElideMode(Qt.ElideLeft)
-
- self.horizontalHeader().setToolTip('Double click to toggle merge mode')
-
- self.createActions()
-
- connect(self.horizontalHeader(), SIGNAL('sectionDoubleClicked(int)'),
- self.toggleFullFileList)
- connect(self,
- SIGNAL('doubleClicked (const QModelIndex &)'),
- self.fileActivated)
-
- connect(self.horizontalHeader(),
- SIGNAL('sectionResized(int, int, int)'),
- self.sectionResized)
- self._diff_dialogs = {}
- self._nav_dialogs = {}
-
- def setModel(self, model):
- QtGui.QTableView.setModel(self, model)
- connect(model, SIGNAL('layoutChanged()'),
- self.fileSelected)
- connect(self.selectionModel(),
- SIGNAL('currentRowChanged (const QModelIndex & , const QModelIndex & )'),
- self.fileSelected)
- self.horizontalHeader().setResizeMode(1, QtGui.QHeaderView.Stretch)
-
- def currentFile(self):
- index = self.currentIndex()
- return self.model().fileFromIndex(index)
-
- def fileSelected(self, index=None, *args):
- if index is None:
- index = self.currentIndex()
- sel_file = self.model().fileFromIndex(index)
- from_rev = self.model().revFromIndex(index)
- self.emit(SIGNAL('fileSelected'), sel_file, from_rev)
-
- def selectFile(self, filename):
- self.setCurrentIndex(self.model().indexFromFile(filename))
-
- def fileActivated(self, index, alternate=False):
- sel_file = self.model().fileFromIndex(index)
- if alternate:
- self.navigate(sel_file)
- else:
- self.diffNavigate(sel_file)
-
- def toggleFullFileList(self, *args):
- self.model().toggleFullFileList()
-
- def navigate(self, filename=None):
- self._navigate(filename, FileLogDialog, self._nav_dialogs)
-
- def diffNavigate(self, filename=None):
- self._navigate(filename, FileDiffDialog, self._diff_dialogs)
-
- def _navigate(self, filename, dlgclass, dlgdict):
- if filename is None:
- filename = self.currentFile()
- model = self.model()
- if filename is not None and len(model.repo.file(filename))>0:
- if filename not in dlgdict:
- dlg = dlgclass(model.repo, filename,
- repoviewer=self.window())
- dlgdict[filename] = dlg
-
- dlg.setWindowTitle('Hg file log viewer')
- dlg = dlgdict[filename]
- dlg.goto(model.current_ctx.rev())
- dlg.show()
- dlg.raise_()
- dlg.activateWindow()
-
- def _action_defs(self):
- a = [("navigate", self.tr("Navigate"), None ,
- self.tr('Navigate the revision tree of this file'), None, self.navigate),
- ("diffnavigate", self.tr("Diff-mode navigate"), None,
- self.tr('Navigate the revision tree of this file in diff mode'), None, self.diffNavigate),
- ]
- return a
-
- def createActions(self):
- self._actions = {}
- for name, desc, icon, tip, key, cb in self._action_defs():
- act = QtGui.QAction(desc, self)
- if icon:
- act.setIcon(geticon(icon))
- if tip:
- act.setStatusTip(tip)
- if key:
- act.setShortcut(key)
- if cb:
- connect(act, SIGNAL('triggered()'), cb)
- self._actions[name] = act
- self.addAction(act)
-
- def contextMenuEvent(self, event):
- menu = QtGui.QMenu(self)
- for act in ['navigate', 'diffnavigate']:
- if act:
- menu.addAction(self._actions[act])
- else:
- menu.addSeparator()
- menu.exec_(event.globalPos())
-
- def resizeEvent(self, event):
- vp_width = self.viewport().width()
- col_widths = [self.columnWidth(i) \
- for i in range(1, self.model().columnCount())]
- col_width = vp_width - sum(col_widths)
- col_width = max(col_width, 50)
- self.setColumnWidth(0, col_width)
- QtGui.QTableView.resizeEvent(self, event)
-
- def sectionResized(self, idx, oldsize, newsize):
- if idx == 1:
- self.model().setDiffWidth(newsize)
-
- def nextFile(self):
- row = self.currentIndex().row()
- self.setCurrentIndex(self.model().index(min(row+1,
- self.model().rowCount() - 1), 0))
- def prevFile(self):
- row = self.currentIndex().row()
- self.setCurrentIndex(self.model().index(max(row - 1, 0), 0))
|
@@ -239,7 +239,7 @@ <customwidget>
<class>HgFileListView</class>
<extends>QTableView</extends>
- <header>fileview.h</header>
+ <header>filelistview.h</header>
</customwidget>
<customwidget>
<class>HgFileView</class>
|
@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'C:\Users\adi\hgrepos\thg-qt\tortoisehg\hgqt\workbench.ui'
#
-# Created: Sun May 02 12:03:11 2010
+# Created: Sun May 02 14:21:29 2010
# by: PyQt4 UI code generator 4.7.3
#
# WARNING! All changes made in this file will be lost!
@@ -141,6 +141,7 @@ self.actionDisplayAllBranches.setText(QtGui.QApplication.translate("MainWindow", "displayAllBranches", None, QtGui.QApplication.UnicodeUTF8))
self.actionHelp.setText(QtGui.QApplication.translate("MainWindow", "Help", None, QtGui.QApplication.UnicodeUTF8))
-from fileview import HgFileView, HgFileListView
+from filelistview import HgFileListView
+from fileview import HgFileView
from repoview import HgRepoView, RevDisplay
import workbench_rc
|
Loading...