From 07e000f01e2eb85deeb7bd0de5dc90cf5d9d08c9 Mon Sep 17 00:00:00 2001 From: Kiara Navarro Date: Thu, 14 Oct 2021 22:13:35 -0300 Subject: [PATCH 1/2] gui: implement status bar based upon device state When device has not been connected for the first time, status bar doesn't any information. This implementation tries to encapsulate changes required on several widgets associated with status bar based upon device state whether this has been connected or not. --- Software/PC_Application/appwindow.cpp | 87 ++++++++++++++++++--------- Software/PC_Application/appwindow.h | 10 +++ 2 files changed, 67 insertions(+), 30 deletions(-) diff --git a/Software/PC_Application/appwindow.cpp b/Software/PC_Application/appwindow.cpp index 918093f..0142cbf 100644 --- a/Software/PC_Application/appwindow.cpp +++ b/Software/PC_Application/appwindow.cpp @@ -101,30 +101,12 @@ AppWindow::AppWindow(QWidget *parent) } ui->setupUi(this); - ui->statusbar->addWidget(&lConnectionStatus); - auto div1 = new QFrame; - div1->setFrameShape(QFrame::VLine); - ui->statusbar->addWidget(div1); - ui->statusbar->addWidget(&lDeviceInfo); - ui->statusbar->addWidget(new QLabel, 1); - lADCOverload.setStyleSheet("color : red"); - lADCOverload.setText("ADC overload"); - lADCOverload.setVisible(false); - ui->statusbar->addWidget(&lADCOverload); - - lUnlevel.setStyleSheet("color : red"); - lUnlevel.setText("Unlevel"); - lUnlevel.setVisible(false); - ui->statusbar->addWidget(&lUnlevel); - - lUnlock.setStyleSheet("color : red"); - lUnlock.setText("Unlock"); - lUnlock.setVisible(false); - ui->statusbar->addWidget(&lUnlock); - //ui->statusbar->setStyleSheet("QStatusBar::item { border: 1px solid black; };"); + SetupStatusBar(); + UpdateStatusBar(Disconnected); CreateToolbars(); + auto logDock = new QDockWidget("Device Log"); logDock->setWidget(&deviceLog); logDock->setObjectName("Log Dock"); @@ -288,16 +270,11 @@ bool AppWindow::ConnectToDevice(QString serial) try { qDebug() << "Attempting to connect to device..."; device = new Device(serial); - lConnectionStatus.setText("Connected to " + device->serial()); - qInfo() << "Connected to" << device->serial(); - lDeviceInfo.setText(device->getLastDeviceInfoString()); + UpdateStatusBar(AppWindow::DeviceStatusBar::Connected); connect(device, &Device::LogLineReceived, &deviceLog, &DeviceLog::addLine); connect(device, &Device::ConnectionLost, this, &AppWindow::DeviceConnectionLost); connect(device, &Device::DeviceInfoUpdated, [this]() { - lDeviceInfo.setText(device->getLastDeviceInfoString()); - lADCOverload.setVisible(device->Info().ADC_overload); - lUnlevel.setVisible(device->Info().unlevel); - lUnlock.setVisible(!device->Info().LO1_locked || !device->Info().source_locked); + UpdateStatusBar(AppWindow::DeviceStatusBar::Updated); }); connect(device, &Device::NeedsFirmwareUpdate, this, &AppWindow::DeviceNeedsUpdate); ui->actionDisconnect->setEnabled(true); @@ -343,8 +320,7 @@ void AppWindow::DisconnectDevice() if(deviceActionGroup->checkedAction()) { deviceActionGroup->checkedAction()->setChecked(false); } - lConnectionStatus.setText("No device connected"); - lDeviceInfo.setText("No device information available yet"); + UpdateStatusBar(AppWindow::DeviceStatusBar::Disconnected); Mode::getActiveMode()->deviceDisconnected(); qDebug() << "Disconnected device"; } @@ -961,3 +937,54 @@ const QString& AppWindow::getAppGitHash() const { return appGitHash; } + +void AppWindow::SetupStatusBar() +{ + ui->statusbar->addWidget(&lConnectionStatus); + auto div1 = new QFrame; + div1->setFrameShape(QFrame::VLine); + ui->statusbar->addWidget(div1); + ui->statusbar->addWidget(&lDeviceInfo); + ui->statusbar->addWidget(new QLabel, 1); + + lADCOverload.setStyleSheet("color : red"); + lADCOverload.setText("ADC overload"); + lADCOverload.setVisible(false); + ui->statusbar->addWidget(&lADCOverload); + + lUnlevel.setStyleSheet("color : red"); + lUnlevel.setText("Unlevel"); + lUnlevel.setVisible(false); + ui->statusbar->addWidget(&lUnlevel); + + lUnlock.setStyleSheet("color : red"); + lUnlock.setText("Unlock"); + lUnlock.setVisible(false); + ui->statusbar->addWidget(&lUnlock); + //ui->statusbar->setStyleSheet("QStatusBar::item { border: 1px solid black; };"); +} + +void AppWindow::UpdateStatusBar(DeviceStatusBar status) +{ + switch(status) { + case Connected: + lConnectionStatus.setText("Connected to " + device->serial()); + qInfo() << "Connected to" << device->serial(); + lDeviceInfo.setText(device->getLastDeviceInfoString()); + break; + case Disconnected: + lConnectionStatus.setText("No device connected"); + lDeviceInfo.setText("No device information available yet"); + break; + case Updated: + lDeviceInfo.setText(device->getLastDeviceInfoString()); + lADCOverload.setVisible(device->Info().ADC_overload); + lUnlevel.setVisible(device->Info().unlevel); + lUnlock.setVisible(!device->Info().LO1_locked || !device->Info().source_locked); + break; + default: + // invalid status + break; + } + +} diff --git a/Software/PC_Application/appwindow.h b/Software/PC_Application/appwindow.h index 9b27ea1..96a3052 100644 --- a/Software/PC_Application/appwindow.h +++ b/Software/PC_Application/appwindow.h @@ -61,7 +61,17 @@ private slots: nlohmann::json SaveSetup(); void LoadSetup(nlohmann::json j); private: + + enum DeviceStatusBar { + Connected, + Updated, + Disconnected, + }; + void DeviceConnectionLost(); + + void SetupStatusBar(); + void UpdateStatusBar(DeviceStatusBar status); void CreateToolbars(); void SetupSCPI(); void StartTCPServer(int port); From c1bdc3aa890c36fac37a3c3661a0c7b0cd7bfaa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4berich?= Date: Sun, 17 Oct 2021 20:57:23 +0200 Subject: [PATCH 2/2] use enum class for DeviceStatusBar --- Software/PC_Application/appwindow.cpp | 10 +++++----- Software/PC_Application/appwindow.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Software/PC_Application/appwindow.cpp b/Software/PC_Application/appwindow.cpp index 0142cbf..c63ec15 100644 --- a/Software/PC_Application/appwindow.cpp +++ b/Software/PC_Application/appwindow.cpp @@ -103,7 +103,7 @@ AppWindow::AppWindow(QWidget *parent) ui->setupUi(this); SetupStatusBar(); - UpdateStatusBar(Disconnected); + UpdateStatusBar(DeviceStatusBar::Disconnected); CreateToolbars(); @@ -320,7 +320,7 @@ void AppWindow::DisconnectDevice() if(deviceActionGroup->checkedAction()) { deviceActionGroup->checkedAction()->setChecked(false); } - UpdateStatusBar(AppWindow::DeviceStatusBar::Disconnected); + UpdateStatusBar(DeviceStatusBar::Disconnected); Mode::getActiveMode()->deviceDisconnected(); qDebug() << "Disconnected device"; } @@ -967,16 +967,16 @@ void AppWindow::SetupStatusBar() void AppWindow::UpdateStatusBar(DeviceStatusBar status) { switch(status) { - case Connected: + case DeviceStatusBar::Connected: lConnectionStatus.setText("Connected to " + device->serial()); qInfo() << "Connected to" << device->serial(); lDeviceInfo.setText(device->getLastDeviceInfoString()); break; - case Disconnected: + case DeviceStatusBar::Disconnected: lConnectionStatus.setText("No device connected"); lDeviceInfo.setText("No device information available yet"); break; - case Updated: + case DeviceStatusBar::Updated: lDeviceInfo.setText(device->getLastDeviceInfoString()); lADCOverload.setVisible(device->Info().ADC_overload); lUnlevel.setVisible(device->Info().unlevel); diff --git a/Software/PC_Application/appwindow.h b/Software/PC_Application/appwindow.h index 96a3052..f011243 100644 --- a/Software/PC_Application/appwindow.h +++ b/Software/PC_Application/appwindow.h @@ -62,7 +62,7 @@ private slots: void LoadSetup(nlohmann::json j); private: - enum DeviceStatusBar { + enum class DeviceStatusBar { Connected, Updated, Disconnected,