Sun, 05 Feb 2017 14:16:53 +0100
Enhanced the Mercurial log browser window by saving and restoring the internal state (geometry and the three splitters).
--- 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>