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")));
#include <QtWidgets/QMessageBox>
#include <QtDBus/QDBusConnection>
+#include <QtCore/QSettings>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(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)
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();
+}
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);
void about();
private:
+ void saveSettings();
+ void restoreSettings();
+
QTabWidget *tabWidget;
+ QDBusViewer *sessionBusViewer;
+ QDBusViewer *systemBusViewer;
};
#endif // MAINWINDOW_H
#include <QtCore/QStringListModel>
#include <QtCore/QSortFilterProxyModel>
#include <QtCore/QMetaProperty>
+#include <QtCore/QSettings>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QListView>
#include <QtWidgets/QAction>
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;
}
+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'));
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
{
public:
QDBusViewer(const QDBusConnection &connection, QWidget *parent = 0);
+ void saveState(QSettings *settings) const;
+ void restoreState(const QSettings *settings);
+
public slots:
void refresh();
QLineEdit *serviceFilterLine;
QListView *servicesView;
QTextBrowser *log;
+ QSplitter *topSplitter;
+ QSplitter *splitter;
QRegExp objectPathRegExp;
};