diff options
author | Andre Hartmann <aha_1980@gmx.de> | 2016-04-28 09:02:51 +0200 |
---|---|---|
committer | André Hartmann <aha_1980@gmx.de> | 2016-05-03 10:25:21 +0000 |
commit | 9e3af4a3a828a0c632ef07969005f46fd30bee63 (patch) | |
tree | d4882451dc676f6a3cb50f611fce53b1e6a5ba83 /examples/serialbus | |
parent | f183c72e5bd0bd253073783992d9bf860e0087ad (diff) |
CAN-Example: Change SettingsDialog to ConnectDialog
This simplifies the handling and makes it more like
how other CAN monitors behave.
* After startup, the connect dialog is shown
* If the dialog is accepted, the selected device
is connected instantly
* To interrupt a connection, the disconnect action
can be used
* To connect again, the action connect can be used
Change-Id: I47db596658e90cc0393981fba135cd6d89191f1a
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Diffstat (limited to 'examples/serialbus')
-rw-r--r-- | examples/serialbus/can/can.pro | 6 | ||||
-rw-r--r-- | examples/serialbus/can/can.qrc | 1 | ||||
-rw-r--r-- | examples/serialbus/can/connectdialog.cpp (renamed from examples/serialbus/can/settingsdialog.cpp) | 82 | ||||
-rw-r--r-- | examples/serialbus/can/connectdialog.h (renamed from examples/serialbus/can/settingsdialog.h) | 21 | ||||
-rw-r--r-- | examples/serialbus/can/connectdialog.ui (renamed from examples/serialbus/can/settingsdialog.ui) | 43 | ||||
-rw-r--r-- | examples/serialbus/can/images/settings.png | bin | 16039 -> 0 bytes | |||
-rw-r--r-- | examples/serialbus/can/mainwindow.cpp | 19 | ||||
-rw-r--r-- | examples/serialbus/can/mainwindow.h | 4 | ||||
-rw-r--r-- | examples/serialbus/can/mainwindow.ui | 19 |
9 files changed, 118 insertions, 77 deletions
diff --git a/examples/serialbus/can/can.pro b/examples/serialbus/can/can.pro index bf22fc5..aa2234f 100644 --- a/examples/serialbus/can/can.pro +++ b/examples/serialbus/can/can.pro @@ -5,13 +5,13 @@ TEMPLATE = app SOURCES += main.cpp \ mainwindow.cpp \ - settingsdialog.cpp + connectdialog.cpp HEADERS += mainwindow.h \ - settingsdialog.h + connectdialog.h FORMS += mainwindow.ui \ - settingsdialog.ui + connectdialog.ui RESOURCES += can.qrc diff --git a/examples/serialbus/can/can.qrc b/examples/serialbus/can/can.qrc index 0b49879..1b8d697 100644 --- a/examples/serialbus/can/can.qrc +++ b/examples/serialbus/can/can.qrc @@ -3,7 +3,6 @@ <file>images/connect.png</file> <file>images/disconnect.png</file> <file>images/application-exit.png</file> - <file>images/settings.png</file> <file>images/clear.png</file> </qresource> </RCC> diff --git a/examples/serialbus/can/settingsdialog.cpp b/examples/serialbus/can/connectdialog.cpp index d61f4c6..7495832 100644 --- a/examples/serialbus/can/settingsdialog.cpp +++ b/examples/serialbus/can/connectdialog.cpp @@ -38,15 +38,15 @@ ** ****************************************************************************/ -#include "settingsdialog.h" -#include "ui_settingsdialog.h" +#include "connectdialog.h" +#include "ui_connectdialog.h" #include <QCanBus> #include <QDebug> -SettingsDialog::SettingsDialog(QWidget *parent) : +ConnectDialog::ConnectDialog(QWidget *parent) : QDialog(parent), - m_ui(new Ui::SettingsDialog), + m_ui(new Ui::ConnectDialog), m_customSpeedValidator(0) { m_ui->setupUi(this); @@ -62,11 +62,15 @@ SettingsDialog::SettingsDialog(QWidget *parent) : m_ui->receiveOwnBox->addItem(tr("false"), QVariant(false)); m_ui->receiveOwnBox->addItem(tr("true"), QVariant(true)); - connect(m_ui->applyButton, &QPushButton::clicked, this, &SettingsDialog::apply); + m_ui->canFdBox->addItem(tr("false"), QVariant(false)); + m_ui->canFdBox->addItem(tr("true"), QVariant(true)); + + connect(m_ui->okButton, &QPushButton::clicked, this, &ConnectDialog::ok); + connect(m_ui->cancelButton, &QPushButton::clicked, this, &ConnectDialog::cancel); connect(m_ui->useConfigurationBox, &QCheckBox::clicked, m_ui->configurationBox, &QGroupBox::setEnabled); connect(m_ui->speedBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), - this, &SettingsDialog::checkCustomSpeedPolicy); + this, &ConnectDialog::checkCustomSpeedPolicy); m_ui->rawFilterEdit->hide(); m_ui->rawFilterLabel->hide(); @@ -77,17 +81,17 @@ SettingsDialog::SettingsDialog(QWidget *parent) : updateSettings(); } -SettingsDialog::~SettingsDialog() +ConnectDialog::~ConnectDialog() { delete m_ui; } -SettingsDialog::Settings SettingsDialog::settings() const +ConnectDialog::Settings ConnectDialog::settings() const { return m_currentSettings; } -void SettingsDialog::checkCustomSpeedPolicy(int idx) +void ConnectDialog::checkCustomSpeedPolicy(int idx) { const bool isCustomSpeed = !m_ui->speedBox->itemData(idx).isValid(); m_ui->speedBox->setEditable(isCustomSpeed); @@ -98,13 +102,61 @@ void SettingsDialog::checkCustomSpeedPolicy(int idx) } } -void SettingsDialog::apply() +void ConnectDialog::ok() { updateSettings(); - hide(); + accept(); +} + +void ConnectDialog::cancel() +{ + revertSettings(); + reject(); +} + +QString ConnectDialog::configurationValue(QCanBusDevice::ConfigurationKey key) +{ + QVariant result; + + foreach (const ConfigurationItem &item, m_currentSettings.configurations) { + if (item.first == key) { + result = item.second; + break; + } + } + + if (result.isNull() && ( + key == QCanBusDevice::LoopbackKey || + key == QCanBusDevice::ReceiveOwnKey)) { + return tr("unspecified"); + } + + return result.toString(); +} + +void ConnectDialog::revertSettings() +{ + m_ui->backendListBox->setCurrentText(m_currentSettings.backendName); + m_ui->interfaceNameEdit->setText(m_currentSettings.deviceInterfaceName); + m_ui->useConfigurationBox->setChecked(m_currentSettings.useConfigurationEnabled); + + QString value = configurationValue(QCanBusDevice::LoopbackKey); + m_ui->loopbackBox->setCurrentText(value); + + value = configurationValue(QCanBusDevice::ReceiveOwnKey); + m_ui->receiveOwnBox->setCurrentText(value); + + value = configurationValue(QCanBusDevice::ErrorFilterKey); + m_ui->errorFilterEdit->setText(value); + + value = configurationValue(QCanBusDevice::BitRateKey); + m_ui->speedBox->setCurrentText(value); + + value = configurationValue(QCanBusDevice::CanFdKey); + m_ui->canFdBox->setCurrentText(value); } -void SettingsDialog::updateSettings() +void ConnectDialog::updateSettings() { m_currentSettings.backendName = m_ui->backendListBox->currentText(); m_currentSettings.deviceInterfaceName = m_ui->interfaceNameEdit->text(); @@ -164,18 +216,18 @@ void SettingsDialog::updateSettings() // process CAN FD setting ConfigurationItem fdItem; fdItem.first = QCanBusDevice::CanFdKey; - fdItem.second = QVariant(m_ui->canFdBox->currentIndex() == 1); // 0 -> no, 1 - yes + fdItem.second = m_ui->canFdBox->currentData(); m_currentSettings.configurations.append(fdItem); } } -void SettingsDialog::fillBackends() +void ConnectDialog::fillBackends() { foreach (const QByteArray &backend, QCanBus::instance()->plugins()) m_ui->backendListBox->addItem(backend); } -void SettingsDialog::fillSpeeds() +void ConnectDialog::fillSpeeds() { m_ui->speedBox->addItem(QStringLiteral("10000"), 10000); m_ui->speedBox->addItem(QStringLiteral("20000"), 20000); diff --git a/examples/serialbus/can/settingsdialog.h b/examples/serialbus/can/connectdialog.h index 2b51f09..7a46c86 100644 --- a/examples/serialbus/can/settingsdialog.h +++ b/examples/serialbus/can/connectdialog.h @@ -38,8 +38,8 @@ ** ****************************************************************************/ -#ifndef SETTINGSDIALOG_H -#define SETTINGSDIALOG_H +#ifndef CONNECTDIALOG_H +#define CONNECTDIALOG_H #include <QCanBusDevice> @@ -48,14 +48,14 @@ QT_BEGIN_NAMESPACE namespace Ui { -class SettingsDialog; +class ConnectDialog; } class QIntValidator; QT_END_NAMESPACE -class SettingsDialog : public QDialog +class ConnectDialog : public QDialog { Q_OBJECT @@ -69,24 +69,27 @@ public: bool useConfigurationEnabled; }; - explicit SettingsDialog(QWidget *parent = nullptr); - ~SettingsDialog(); + explicit ConnectDialog(QWidget *parent = nullptr); + ~ConnectDialog(); Settings settings() const; private slots: void checkCustomSpeedPolicy(int idx); - void apply(); + void ok(); + void cancel(); private: + QString configurationValue(QCanBusDevice::ConfigurationKey key); + void revertSettings(); void updateSettings(); void fillBackends(); void fillSpeeds(); private: - Ui::SettingsDialog *m_ui; + Ui::ConnectDialog *m_ui; QIntValidator *m_customSpeedValidator; Settings m_currentSettings; }; -#endif // SETTINGSDIALOG_H +#endif // CONNECTDIALOG_H diff --git a/examples/serialbus/can/settingsdialog.ui b/examples/serialbus/can/connectdialog.ui index 37491a2..5f35b14 100644 --- a/examples/serialbus/can/settingsdialog.ui +++ b/examples/serialbus/can/connectdialog.ui @@ -1,17 +1,17 @@ <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> - <class>SettingsDialog</class> - <widget class="QDialog" name="SettingsDialog"> + <class>ConnectDialog</class> + <widget class="QDialog" name="ConnectDialog"> <property name="geometry"> <rect> <x>0</x> <y>0</y> - <width>406</width> - <height>254</height> + <width>441</width> + <height>281</height> </rect> </property> <property name="windowTitle"> - <string>Settings</string> + <string>Connect</string> </property> <layout class="QGridLayout" name="gridLayout_2"> <item row="4" column="0" colspan="2"> @@ -30,9 +30,25 @@ </spacer> </item> <item> - <widget class="QPushButton" name="applyButton"> + <widget class="QPushButton" name="cancelButton"> <property name="text"> - <string>Apply</string> + <string>Cancel</string> + </property> + <property name="autoDefault"> + <bool>false</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="okButton"> + <property name="text"> + <string>OK</string> + </property> + <property name="autoDefault"> + <bool>false</bool> + </property> + <property name="default"> + <bool>true</bool> </property> </widget> </item> @@ -128,18 +144,7 @@ </widget> </item> <item row="5" column="1"> - <widget class="QComboBox" name="canFdBox"> - <item> - <property name="text"> - <string>no</string> - </property> - </item> - <item> - <property name="text"> - <string>yes</string> - </property> - </item> - </widget> + <widget class="QComboBox" name="canFdBox"/> </item> </layout> </widget> diff --git a/examples/serialbus/can/images/settings.png b/examples/serialbus/can/images/settings.png Binary files differdeleted file mode 100644 index 3d1042e..0000000 --- a/examples/serialbus/can/images/settings.png +++ /dev/null diff --git a/examples/serialbus/can/mainwindow.cpp b/examples/serialbus/can/mainwindow.cpp index 07ef95b..4ac7ca7 100644 --- a/examples/serialbus/can/mainwindow.cpp +++ b/examples/serialbus/can/mainwindow.cpp @@ -40,10 +40,11 @@ #include "mainwindow.h" #include "ui_mainwindow.h" -#include "settingsdialog.h" +#include "connectdialog.h" #include <QCanBusFrame> #include <QCanBus> +#include <QTimer> #include <QtCore/qbytearray.h> #include <QtCore/qvariant.h> @@ -56,7 +57,7 @@ MainWindow::MainWindow(QWidget *parent) : { m_ui->setupUi(this); - m_settings = new SettingsDialog; + m_connectDialog = new ConnectDialog; m_status = new QLabel; m_ui->statusBar->addWidget(m_status); @@ -64,6 +65,7 @@ MainWindow::MainWindow(QWidget *parent) : m_ui->sendMessagesBox->setEnabled(false); initActionsConnections(); + QTimer::singleShot(50, m_connectDialog, &ConnectDialog::show); connect(m_ui->sendButton, &QPushButton::clicked, this, &MainWindow::sendMessage); } @@ -72,7 +74,7 @@ MainWindow::~MainWindow() { delete m_canDevice; - delete m_settings; + delete m_connectDialog; delete m_ui; } @@ -86,12 +88,11 @@ void MainWindow::initActionsConnections() m_ui->actionConnect->setEnabled(true); m_ui->actionDisconnect->setEnabled(false); m_ui->actionQuit->setEnabled(true); - m_ui->actionConfigure->setEnabled(true); - connect(m_ui->actionConnect, &QAction::triggered, this, &MainWindow::connectDevice); + connect(m_ui->actionConnect, &QAction::triggered, m_connectDialog, &ConnectDialog::show); + connect(m_connectDialog, &QDialog::accepted, this, &MainWindow::connectDevice); connect(m_ui->actionDisconnect, &QAction::triggered, this, &MainWindow::disconnectDevice); connect(m_ui->actionQuit, &QAction::triggered, this, &QWidget::close); - connect(m_ui->actionConfigure, &QAction::triggered, m_settings, &SettingsDialog::show); connect(m_ui->actionAboutQt, &QAction::triggered, qApp, &QApplication::aboutQt); } @@ -111,7 +112,7 @@ void MainWindow::receiveError(QCanBusDevice::CanBusError error) const void MainWindow::connectDevice() { - const SettingsDialog::Settings p = m_settings->settings(); + const ConnectDialog::Settings p = m_connectDialog->settings(); m_canDevice = QCanBus::instance()->createDevice(p.backendName.toLocal8Bit(), p.deviceInterfaceName); if (!m_canDevice) { @@ -127,7 +128,7 @@ void MainWindow::connectDevice() this, &MainWindow::framesWritten); if (p.useConfigurationEnabled) { - foreach (const SettingsDialog::ConfigurationItem &item, p.configurations) + foreach (const ConnectDialog::ConfigurationItem &item, p.configurations) m_canDevice->setConfigurationParameter(item.first, item.second); } @@ -139,7 +140,6 @@ void MainWindow::connectDevice() } else { m_ui->actionConnect->setEnabled(false); m_ui->actionDisconnect->setEnabled(true); - m_ui->actionConfigure->setEnabled(false); m_ui->sendMessagesBox->setEnabled(true); @@ -159,7 +159,6 @@ void MainWindow::disconnectDevice() m_ui->actionConnect->setEnabled(true); m_ui->actionDisconnect->setEnabled(false); - m_ui->actionConfigure->setEnabled(true); m_ui->sendMessagesBox->setEnabled(false); diff --git a/examples/serialbus/can/mainwindow.h b/examples/serialbus/can/mainwindow.h index 8e1b142..aff6c94 100644 --- a/examples/serialbus/can/mainwindow.h +++ b/examples/serialbus/can/mainwindow.h @@ -45,7 +45,7 @@ #include <QMainWindow> -class SettingsDialog; +class ConnectDialog; QT_BEGIN_NAMESPACE @@ -81,7 +81,7 @@ private: Ui::MainWindow *m_ui; QLabel *m_status; - SettingsDialog *m_settings; + ConnectDialog *m_connectDialog; QCanBusDevice *m_canDevice; }; diff --git a/examples/serialbus/can/mainwindow.ui b/examples/serialbus/can/mainwindow.ui index cd3eec7..9700024 100644 --- a/examples/serialbus/can/mainwindow.ui +++ b/examples/serialbus/can/mainwindow.ui @@ -161,7 +161,7 @@ Otherwise, the standard format with 11 bit idenfier is used.</string> <x>0</x> <y>0</y> <width>551</width> - <height>23</height> + <height>25</height> </rect> </property> <widget class="QMenu" name="menuCalls"> @@ -173,12 +173,6 @@ Otherwise, the standard format with 11 bit idenfier is used.</string> <addaction name="separator"/> <addaction name="actionQuit"/> </widget> - <widget class="QMenu" name="menuTools"> - <property name="title"> - <string>Too&ls</string> - </property> - <addaction name="actionConfigure"/> - </widget> <widget class="QMenu" name="menuHelp"> <property name="title"> <string>Help</string> @@ -186,7 +180,6 @@ Otherwise, the standard format with 11 bit idenfier is used.</string> <addaction name="actionAboutQt"/> </widget> <addaction name="menuCalls"/> - <addaction name="menuTools"/> <addaction name="menuHelp"/> </widget> <widget class="QToolBar" name="mainToolBar"> @@ -198,7 +191,6 @@ Otherwise, the standard format with 11 bit idenfier is used.</string> </attribute> <addaction name="actionConnect"/> <addaction name="actionDisconnect"/> - <addaction name="actionConfigure"/> </widget> <widget class="QStatusBar" name="statusBar"/> <action name="actionConnect"> @@ -228,15 +220,6 @@ Otherwise, the standard format with 11 bit idenfier is used.</string> <string>&Quit</string> </property> </action> - <action name="actionConfigure"> - <property name="icon"> - <iconset resource="can.qrc"> - <normaloff>:/images/settings.png</normaloff>:/images/settings.png</iconset> - </property> - <property name="text"> - <string>&Configure</string> - </property> - </action> <action name="actionAboutQt"> <property name="text"> <string>&About Qt</string> |