diff -r 96232974dcdb -r 645c12de6b0c Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py --- a/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py Sun Mar 30 22:00:14 2014 +0200 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py Thu Apr 03 23:05:31 2014 +0200 @@ -9,14 +9,15 @@ from __future__ import unicode_literals try: - str = unicode # __IGNORE_WARNING__ -except (NameError): + str = unicode +except NameError: pass import os -from PyQt4.QtCore import QTimer, QDate, QProcess, QRegExp, Qt, pyqtSlot -from PyQt4.QtGui import QCursor, QHeaderView, QLineEdit, QDialog, \ +from PyQt4.QtCore import QTimer, QDate, QProcess, QRegExp, Qt, pyqtSlot, \ + QPoint +from PyQt4.QtGui import QCursor, QHeaderView, QLineEdit, QWidget, \ QApplication, QDialogButtonBox, QTreeWidgetItem from E5Gui import E5MessageBox @@ -26,46 +27,35 @@ import Preferences -class SvnLogBrowserDialog(QDialog, Ui_SvnLogBrowserDialog): +class SvnLogBrowserDialog(QWidget, Ui_SvnLogBrowserDialog): """ Class implementing a dialog to browse the log history. """ - def __init__(self, vcs, isFile=False, parent=None): + def __init__(self, vcs, parent=None): """ Constructor @param vcs reference to the vcs object - @param isFile flag indicating log for a file is to be shown (boolean) @param parent parent widget (QWidget) """ super(SvnLogBrowserDialog, self).__init__(parent) self.setupUi(self) + self.__position = QPoint() + self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) self.filesTree.headerItem().setText(self.filesTree.columnCount(), "") self.filesTree.header().setSortIndicator(0, Qt.AscendingOrder) - self.sbsCheckBox.setEnabled(isFile) - self.sbsCheckBox.setVisible(isFile) - self.vcs = vcs - self.__maxDate = QDate() - self.__minDate = QDate() - self.__filterLogsEnabled = True + self.__initData() self.fromDate.setDisplayFormat("yyyy-MM-dd") self.toDate.setDisplayFormat("yyyy-MM-dd") - self.fromDate.setDate(QDate.currentDate()) - self.toDate.setDate(QDate.currentDate()) - self.fieldCombo.setCurrentIndex( - self.fieldCombo.findText(self.trUtf8("Message"))) - self.limitSpinBox.setValue( - self.vcs.getPlugin().getPreferences("LogLimit")) - self.stopCheckBox.setChecked( - self.vcs.getPlugin().getPreferences("StopLogOnCopy")) + self.__resetUI() self.__messageRole = Qt.UserRole self.__changesRole = Qt.UserRole + 1 @@ -95,11 +85,19 @@ # three blanks followed by A or D or M followed by path self.flags = { - 'A': self.trUtf8('Added'), - 'D': self.trUtf8('Deleted'), - 'M': self.trUtf8('Modified'), - 'R': self.trUtf8('Replaced'), + 'A': self.tr('Added'), + 'D': self.tr('Deleted'), + 'M': self.tr('Modified'), + 'R': self.tr('Replaced'), } + + def __initData(self): + """ + Private method to (re-)initialize some data. + """ + self.__maxDate = QDate() + self.__minDate = QDate() + self.__filterLogsEnabled = True self.buf = [] # buffer for stdout self.diff = None @@ -118,8 +116,38 @@ QTimer.singleShot(2000, self.process.kill) self.process.waitForFinished(3000) + self.__position = self.pos() + e.accept() + def show(self): + """ + Public slot to show the dialog. + """ + if not self.__position.isNull(): + self.move(self.__position) + self.__resetUI() + + super(SvnLogBrowserDialog, self).show() + + def __resetUI(self): + """ + Private method to reset the user interface. + """ + self.fromDate.setDate(QDate.currentDate()) + self.toDate.setDate(QDate.currentDate()) + self.fieldCombo.setCurrentIndex(self.fieldCombo.findText( + self.tr("Message"))) + self.limitSpinBox.setValue(self.vcs.getPlugin().getPreferences( + "LogLimit")) + self.stopCheckBox.setChecked(self.vcs.getPlugin().getPreferences( + "StopLogOnCopy")) + + self.logTree.clear() + + self.nextButton.setEnabled(True) + self.limitSpinBox.setEnabled(True) + def __resizeColumnsLog(self): """ Private method to resize the log tree columns. @@ -258,21 +286,28 @@ self.inputGroup.hide() E5MessageBox.critical( self, - self.trUtf8('Process Generation Error'), - self.trUtf8( + self.tr('Process Generation Error'), + self.tr( 'The process {0} could not be started. ' 'Ensure, that it is in the search path.' ).format('svn')) - def start(self, fn): + def start(self, fn, isFile=False): """ Public slot to start the svn log command. @param fn filename to show the log for (string) + @keyparam isFile flag indicating log for a file is to be shown + (boolean) """ + self.sbsCheckBox.setEnabled(isFile) + self.sbsCheckBox.setVisible(isFile) + self.errorGroup.hide() QApplication.processEvents() + self.__initData() + self.filename = fn self.dname, self.fname = self.vcs.splitPath(fn) @@ -463,18 +498,20 @@ @param current reference to the new current item (QTreeWidgetItem) @param previous reference to the old current item (QTreeWidgetItem) """ - self.messageEdit.clear() - for line in current.data(0, self.__messageRole): - self.messageEdit.append(line.strip()) - - self.filesTree.clear() - changes = current.data(0, self.__changesRole) - if len(changes) > 0: - for change in changes: - self.__generateFileItem( - change["action"], change["path"], change["copyfrom_path"], - change["copyfrom_revision"]) - self.__resizeColumnsFiles() + if current is not None: + self.messageEdit.clear() + for line in current.data(0, self.__messageRole): + self.messageEdit.append(line.strip()) + + self.filesTree.clear() + changes = current.data(0, self.__changesRole) + if len(changes) > 0: + for change in changes: + self.__generateFileItem( + change["action"], change["path"], + change["copyfrom_path"], + change["copyfrom_revision"]) + self.__resizeColumnsFiles() self.__resortFiles() self.diffPreviousButton.setEnabled( @@ -576,10 +613,10 @@ from_ = self.fromDate.date().toString("yyyy-MM-dd") to_ = self.toDate.date().addDays(1).toString("yyyy-MM-dd") txt = self.fieldCombo.currentText() - if txt == self.trUtf8("Author"): + if txt == self.tr("Author"): fieldIndex = 1 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) - elif txt == self.trUtf8("Revision"): + elif txt == self.tr("Revision"): fieldIndex = 0 txt = self.rxEdit.text() if txt.startswith("^"):