Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py

branch
Py2 comp.
changeset 3484
645c12de6b0c
parent 3178
f25fc1364c88
parent 3359
6b6c224d67d6
child 3591
2f2a4a76dd22
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("^"):

eric ide

mercurial