qdbusviewer: Restore the window size and state on startup
authorAlexander Volkov <a.volkov@rusbitech.ru>
Mon, 22 Sep 2014 12:12:45 +0000 (16:12 +0400)
committerAlexander Volkov <a.volkov@rusbitech.ru>
Fri, 12 Dec 2014 09:36:44 +0000 (10:36 +0100)
Save the window size, maximization state and state of splitters
on exit and restore these settings on startup.

Change-Id: Ibe26b09cc97ffc2fef17e6e8e2b804324dae7002
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
src/qdbus/qdbusviewer/main.cpp
src/qdbus/qdbusviewer/mainwindow.cpp
src/qdbus/qdbusviewer/mainwindow.h
src/qdbus/qdbusviewer/qdbusviewer.cpp
src/qdbus/qdbusviewer/qdbusviewer.h

index 2de08ad..9a2b7ba 100644 (file)
 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
+
+    QCoreApplication::setOrganizationName(QStringLiteral("QtProject"));
+    QCoreApplication::setApplicationName(QStringLiteral("QDBusViewer"));
+
     MainWindow mw;
 #ifndef Q_OS_MAC
     app.setWindowIcon(QIcon(QLatin1String(":/qt-project.org/qdbusviewer/images/qdbusviewer.png")));
index 48feacd..1676f69 100644 (file)
@@ -51,6 +51,7 @@
 #include <QtWidgets/QMessageBox>
 
 #include <QtDBus/QDBusConnection>
+#include <QtCore/QSettings>
 
 MainWindow::MainWindow(QWidget *parent)
     : QMainWindow(parent)
@@ -72,10 +73,17 @@ MainWindow::MainWindow(QWidget *parent)
     tabWidget = new QTabWidget;
     setCentralWidget(tabWidget);
 
-    QDBusViewer *sessionBusViewer = new QDBusViewer(QDBusConnection::sessionBus());
-    QDBusViewer *systemBusViewer = new QDBusViewer(QDBusConnection::systemBus());
+    sessionBusViewer = new QDBusViewer(QDBusConnection::sessionBus());
+    systemBusViewer = new QDBusViewer(QDBusConnection::systemBus());
     tabWidget->addTab(sessionBusViewer, tr("Session Bus"));
     tabWidget->addTab(systemBusViewer, tr("System Bus"));
+
+    restoreSettings();
+}
+
+MainWindow::~MainWindow()
+{
+    saveSettings();
 }
 
 void MainWindow::addCustomBusTab(const QString &busAddress)
@@ -99,3 +107,37 @@ void MainWindow::about()
     box.setWindowTitle(tr("D-Bus Viewer"));
     box.exec();
 }
+
+static inline QString windowGeometryKey() { return QStringLiteral("WindowGeometry"); }
+static inline QString sessionTabGroup() { return QStringLiteral("SessionTab"); }
+static inline QString systemTabGroup() { return QStringLiteral("SystemTab"); }
+
+void MainWindow::saveSettings()
+{
+    QSettings settings;
+
+    settings.setValue(windowGeometryKey(), saveGeometry());
+
+    settings.beginGroup(sessionTabGroup());
+    sessionBusViewer->saveState(&settings);
+    settings.endGroup();
+
+    settings.beginGroup(systemTabGroup());
+    systemBusViewer->saveState(&settings);
+    settings.endGroup();
+}
+
+void MainWindow::restoreSettings()
+{
+    QSettings settings;
+
+    restoreGeometry(settings.value(windowGeometryKey()).toByteArray());
+
+    settings.beginGroup(sessionTabGroup());
+    sessionBusViewer->restoreState(&settings);
+    settings.endGroup();
+
+    settings.beginGroup(systemTabGroup());
+    systemBusViewer->restoreState(&settings);
+    settings.endGroup();
+}
index d1802f4..70f1139 100644 (file)
 
 QT_FORWARD_DECLARE_CLASS(QTabWidget)
 
+class QDBusViewer;
+
 class MainWindow : public QMainWindow
 {
     Q_OBJECT
 public:
     explicit MainWindow(QWidget *parent = 0);
+    ~MainWindow();
 
     void addCustomBusTab(const QString &bus);
 
@@ -58,7 +61,12 @@ private slots:
     void about();
 
 private:
+    void saveSettings();
+    void restoreSettings();
+
     QTabWidget *tabWidget;
+    QDBusViewer *sessionBusViewer;
+    QDBusViewer *systemBusViewer;
 };
 
 #endif // MAINWINDOW_H
index 0a37b09..d4c70a7 100644 (file)
@@ -40,6 +40,7 @@
 #include <QtCore/QStringListModel>
 #include <QtCore/QSortFilterProxyModel>
 #include <QtCore/QMetaProperty>
+#include <QtCore/QSettings>
 #include <QtWidgets/QLineEdit>
 #include <QtWidgets/QListView>
 #include <QtWidgets/QAction>
@@ -103,13 +104,13 @@ QDBusViewer::QDBusViewer(const QDBusConnection &connection, QWidget *parent)  :
     connect(refreshShortcut, SIGNAL(activated()), this, SLOT(refreshChildren()));
 
     QVBoxLayout *layout = new QVBoxLayout(this);
-    QSplitter *topSplitter = new QSplitter(Qt::Vertical, this);
+    topSplitter = new QSplitter(Qt::Vertical, this);
     layout->addWidget(topSplitter);
 
     log = new LogViewer;
     connect(log, SIGNAL(anchorClicked(QUrl)), this, SLOT(anchorClicked(QUrl)));
 
-    QSplitter *splitter = new QSplitter(topSplitter);
+    splitter = new QSplitter(topSplitter);
     splitter->addWidget(servicesView);
 
     QWidget *servicesWidget = new QWidget;
@@ -146,6 +147,21 @@ QDBusViewer::QDBusViewer(const QDBusConnection &connection, QWidget *parent)  :
 
 }
 
+static inline QString topSplitterStateKey() { return QStringLiteral("topSplitterState"); }
+static inline QString splitterStateKey() { return QStringLiteral("splitterState"); }
+
+void QDBusViewer::saveState(QSettings *settings) const
+{
+    settings->setValue(topSplitterStateKey(), topSplitter->saveState());
+    settings->setValue(splitterStateKey(), splitter->saveState());
+}
+
+void QDBusViewer::restoreState(const QSettings *settings)
+{
+    topSplitter->restoreState(settings->value(topSplitterStateKey()).toByteArray());
+    splitter->restoreState(settings->value(splitterStateKey()).toByteArray());
+}
+
 void QDBusViewer::logMessage(const QString &msg)
 {
     log->append(msg + QLatin1Char('\n'));
index 2f50893..5456b71 100644 (file)
@@ -46,6 +46,8 @@ QT_FORWARD_DECLARE_CLASS(QListView)
 QT_FORWARD_DECLARE_CLASS(QTextBrowser)
 QT_FORWARD_DECLARE_CLASS(QDomDocument)
 QT_FORWARD_DECLARE_CLASS(QDomElement)
+QT_FORWARD_DECLARE_CLASS(QSplitter)
+QT_FORWARD_DECLARE_CLASS(QSettings)
 
 struct BusSignature
 {
@@ -59,6 +61,9 @@ class QDBusViewer: public QWidget
 public:
     QDBusViewer(const QDBusConnection &connection, QWidget *parent = 0);
 
+    void saveState(QSettings *settings) const;
+    void restoreState(const QSettings *settings);
+
 public slots:
     void refresh();
 
@@ -94,6 +99,8 @@ private:
     QLineEdit *serviceFilterLine;
     QListView *servicesView;
     QTextBrowser *log;
+    QSplitter *topSplitter;
+    QSplitter *splitter;
     QRegExp objectPathRegExp;
 };