1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
// Copyright (C) 2020 The Qt Company Ltd and/or its subsidiary(-ies).
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "mainwindow.h"
#include "qdbusviewer.h"
#include <QtWidgets/QApplication>
#include <QtWidgets/QTabWidget>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QMenu>
#include <QtGui/QAction>
#include <QtWidgets/QMessageBox>
#include <QtDBus/QDBusConnection>
#include <QtCore/QSettings>
using namespace Qt::StringLiterals;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, systemBusViewer(nullptr)
{
QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
QAction *quitAction = fileMenu->addAction(tr("&Quit"), this, &QWidget::close);
quitAction->setShortcut(QKeySequence::Quit);
quitAction->setMenuRole(QAction::QuitRole);
QMenu *helpMenu = menuBar()->addMenu(tr("&Help"));
QAction *aboutAction = helpMenu->addAction(tr("&About"));
aboutAction->setMenuRole(QAction::AboutRole);
QObject::connect(aboutAction, &QAction::triggered, this, &MainWindow::about);
QAction *aboutQtAction = helpMenu->addAction(tr("About &Qt"));
aboutQtAction->setMenuRole(QAction::AboutQtRole);
QObject::connect(aboutQtAction, &QAction::triggered, qApp, &QApplication::aboutQt);
tabWidget = new QTabWidget;
setCentralWidget(tabWidget);
sessionBusViewer = new QDBusViewer(QDBusConnection::sessionBus());
tabWidget->addTab(sessionBusViewer, tr("Session Bus"));
QDBusConnection connection = QDBusConnection::systemBus();
if (connection.isConnected()) {
systemBusViewer = new QDBusViewer(connection);
tabWidget->addTab(systemBusViewer, tr("System Bus"));
}
restoreSettings();
}
MainWindow::~MainWindow()
{
saveSettings();
}
void MainWindow::addCustomBusTab(const QString &busAddress)
{
QDBusConnection connection = QDBusConnection::connectToBus(busAddress, "QDBusViewer");
if (connection.isConnected()) {
QDBusViewer *customBusViewer = new QDBusViewer(connection);
tabWidget->addTab(customBusViewer, tr("Custom Bus"));
}
}
void MainWindow::about()
{
QMessageBox box(this);
box.setText(tr("<center><img src=\":/qt-project.org/qdbusviewer/images/qdbusviewer-128.png\">"
"<h3>%1</h3>"
"<p>Version %2</p></center>"
"<p>Copyright (C) The Qt Company Ltd. and other contributors.</p>")
.arg(tr("D-Bus Viewer"), QLatin1String(QT_VERSION_STR)));
box.setWindowTitle(tr("D-Bus Viewer"));
box.exec();
}
static inline QString windowGeometryKey()
{
return u"WindowGeometry"_s;
}
static inline QString sessionTabGroup()
{
return u"SessionTab"_s;
}
static inline QString systemTabGroup()
{
return u"SystemTab"_s;
}
void MainWindow::saveSettings()
{
QSettings settings;
settings.setValue(windowGeometryKey(), saveGeometry());
settings.beginGroup(sessionTabGroup());
sessionBusViewer->saveState(&settings);
settings.endGroup();
if (systemBusViewer) {
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();
if (systemBusViewer) {
settings.beginGroup(systemTabGroup());
systemBusViewer->restoreState(&settings);
settings.endGroup();
}
}
|