Enhanced the Mercurial log browser window by saving and restoring the internal state (geometry and the three splitters).

Sun, 05 Feb 2017 14:16:53 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 05 Feb 2017 14:16:53 +0100
changeset 5488
d3729abac667
parent 5487
7ce9c29cd26f
child 5489
5c9a82215917

Enhanced the Mercurial log browser window by saving and restoring the internal state (geometry and the three splitters).

Plugins/PluginVcsMercurial.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.ui file | annotate | diff | comparison | revisions
--- a/Plugins/PluginVcsMercurial.py	Sun Feb 05 13:19:34 2017 +0100
+++ b/Plugins/PluginVcsMercurial.py	Sun Feb 05 14:16:53 2017 +0100
@@ -11,7 +11,7 @@
 
 import os
 
-from PyQt5.QtCore import QObject, QCoreApplication
+from PyQt5.QtCore import QObject, QCoreApplication, QByteArray
 
 from E5Gui.E5Application import e5App
 
@@ -176,6 +176,10 @@
             "EncodingMode": "strict",
             "ConsiderHidden": False,
             "LogMessageColumnWidth": 30,
+            "LogBrowserGeometry": QByteArray(),
+            "LogBrowserSplitterStates": [QByteArray(), QByteArray(),
+                                         QByteArray()],
+            # mainSplitter, detailsSplitter, diffSplitter
         }
         
         from VcsPlugins.vcsMercurial.ProjectHelper import HgProjectHelper
@@ -258,6 +262,18 @@
         elif key in ["Commits", "CommitAuthors"]:
             return Preferences.toList(Preferences.Prefs.settings.value(
                 "Mercurial/" + key))
+        elif key in ["LogBrowserGeometry"]:
+            v = Preferences.Prefs.settings.value("Mercurial/" + key)
+            if v is not None:
+                return v
+            else:
+                return self.__mercurialDefaults[key]
+        elif key in ["LogBrowserSplitterStates"]:
+            states = Preferences.Prefs.settings.value("Mercurial/" + key)
+            if states is not None:
+                return states
+            else:
+                return self.__mercurialDefaults[key]
         else:
             return Preferences.Prefs.settings.value(
                 "Mercurial/" + key, self.__mercurialDefaults[key])
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Sun Feb 05 13:19:34 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Sun Feb 05 14:16:53 2017 +0100
@@ -79,8 +79,6 @@
         self.diffSplitter.setStretchFactor(0, 1)
         self.diffSplitter.setStretchFactor(1, 2)
         
-        self.__position = QPoint()
-        
         if mode == "log":
             self.setWindowTitle(self.tr("Mercurial Log"))
         elif mode == "incoming":
@@ -368,7 +366,15 @@
                 QTimer.singleShot(2000, self.process.kill)
                 self.process.waitForFinished(3000)
         
-        self.__position = self.pos()
+        self.vcs.getPlugin().setPreferences(
+            "LogBrowserGeometry", self.saveGeometry())
+        self.vcs.getPlugin().setPreferences(
+            "LogBrowserSplitterStates", [
+                self.mainSplitter.saveState(),
+                self.detailsSplitter.saveState(),
+                self.diffSplitter.saveState(),
+            ]
+        )
         
         e.accept()
     
@@ -376,11 +382,34 @@
         """
         Public slot to show the dialog.
         """
-        if not self.__position.isNull():
-            self.move(self.__position)
+        self.__reloadGeometry()
+        self.__restoreSplitterStates()
         self.__resetUI()
         
         super(HgLogBrowserDialog, self).show()
+
+    def __reloadGeometry(self):
+        """
+        Private method to restore the geometry.
+        """
+        geom = self.vcs.getPlugin().getPreferences("LogBrowserGeometry")
+        if geom.isEmpty():
+            s = QSize(1000, 800)
+            self.resize(s)
+        else:
+            self.restoreGeometry(geom)
+    
+    def __restoreSplitterStates(self):
+        """
+        Private method to restore the state of the various splitters.
+        """
+        states = self.vcs.getPlugin().getPreferences(
+            "LogBrowserSplitterStates")
+        if len(states) == 3:
+            # we have three splitters
+            self.mainSplitter.restoreState(states[0])
+            self.detailsSplitter.restoreState(states[1])
+            self.diffSplitter.restoreState(states[2])
     
     def __resetUI(self):
         """
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.ui	Sun Feb 05 13:19:34 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.ui	Sun Feb 05 14:16:53 2017 +0100
@@ -171,7 +171,7 @@
      <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
-     <widget class="QWidget" name="">
+     <widget class="QWidget" name="layoutWidget">
       <layout class="QVBoxLayout" name="verticalLayout_2">
        <item>
         <widget class="QTreeWidget" name="logTree">
@@ -342,7 +342,7 @@
        </item>
       </layout>
      </widget>
-     <widget class="QSplitter" name="splitter_2">
+     <widget class="QSplitter" name="detailsSplitter">
       <property name="sizePolicy">
        <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
         <horstretch>0</horstretch>

eric ide

mercurial