From e228ec73b4deb817fb1b3b3952aacd8ecbcac0a9 Mon Sep 17 00:00:00 2001 From: sunwen Date: Mon, 13 May 2024 18:08:18 +0800 Subject: [PATCH] Add UsctStateManager and add DmsState in GUI. --- src/components/WarningMessageWidget.cpp | 22 ++++---- src/device/UsctStateManager.cpp | 70 +++++++++++++++++++++++++ src/device/UsctStateManager.h | 42 +++++++++++++++ src/event/EventCenter.h | 1 + src/forms/TopBarWidget.cpp | 7 +++ src/stylesheet/Dark2.css | 1 - 6 files changed, 131 insertions(+), 12 deletions(-) create mode 100644 src/device/UsctStateManager.cpp create mode 100644 src/device/UsctStateManager.h diff --git a/src/components/WarningMessageWidget.cpp b/src/components/WarningMessageWidget.cpp index 0c0f162..1c6558e 100644 --- a/src/components/WarningMessageWidget.cpp +++ b/src/components/WarningMessageWidget.cpp @@ -98,8 +98,9 @@ WarningMessageWidget::WarningMessageWidget(QWidget *parent):QWidget(parent) clearBtn->setObjectName("WarningPanelBtn"); hl->addWidget(clearBtn); connect(clearBtn, &QToolButton::clicked, this, &WarningMessageWidget::clearWarning); - connect(EventCenter::Default(),&EventCenter::WarningMessageRaise,this,&WarningMessageWidget::addWarningProxySlot,Qt::QueuedConnection); - connect(EventCenter::Default(),&EventCenter::ErrorStateUnactive,this,&WarningMessageWidget::unactiveErrorProxySlot,Qt::QueuedConnection); + connect(EventCenter::Default(),&EventCenter::WarningMessageRaise,this,&WarningMessageWidget::addWarningProxySlot); + connect(EventCenter::Default(),&EventCenter::ErrorStateUnactive,this,&WarningMessageWidget::unactiveErrorProxySlot); + connect(EventCenter::Default(),&EventCenter::ErrorStateActive,this,&WarningMessageWidget::activeErrorProxySlot); connect(EventCenter::Default(), &EventCenter::ReloadLanguage, this, &WarningMessageWidget::reloadLanguage); @@ -137,7 +138,6 @@ void WarningMessageWidget::addWarningProxySlot(QObject*, QObject* aData) } QString str = *((QString*)aData); - delete (QString*)aData; activeError(601, "TestError"); addWarning(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"), str); } @@ -149,18 +149,19 @@ void WarningMessageWidget::activeErrorProxySlot(QObject*, QObject* aData) return; } //TODO: real active error logic - QString str = "Test Error"; - activeError(601, str); + QPair state = *(QPair*)aData; + activeError(state.first, state.second); } void WarningMessageWidget::unactiveErrorProxySlot(QObject*, QObject* aData) { //TODO: real unactive error logic - // if (!aData){ - // qDebug()<<"unactiveErrorProxy with null aData"; - // return; - // } - unactiveError(601); + if (!aData){ + qDebug()<<"unactiveErrorProxy with null aData"; + return; + }; + int stateCode = *(int*)aData; + unactiveError(stateCode); } void WarningMessageWidget::reloadLanguage() @@ -233,4 +234,3 @@ void WarningMessageWidget::showEvent(QShowEvent* aEvent) showAnimation->start(); QWidget::showEvent(aEvent); } - \ No newline at end of file diff --git a/src/device/UsctStateManager.cpp b/src/device/UsctStateManager.cpp new file mode 100644 index 0000000..be042ca --- /dev/null +++ b/src/device/UsctStateManager.cpp @@ -0,0 +1,70 @@ +#include "UsctStateManager.h" + +#include "event/EventCenter.h" + +UsctStateManager* UsctStateManager::getInstance() +{ + static UsctStateManager instance; + return &instance; +} + +UsctStateManager::UsctStateManager(QObject* aParent) + : QObject (aParent) + , mState() +{ + mState.insert(DmsState, true); + mState.insert(DmsConnectionState, true); + mState.insert(ReconState, true); + mState.insert(ReconMppsState, true); + mState.insert(ReconPacsState, true); + mState.insert(ReconConnectionState, true); + mState.insert(ReconEmptyScanState, true); + mState.insert(ReconDBState, true); +} + +void UsctStateManager::setState(int aStateCode, bool aState) +{ + bool stateTemp = mState[aStateCode]; + mState[aStateCode] = aState; + if(stateTemp != aState) + { + bool UsctState = getUsctState(); + EventCenter::Default()->triggerEvent(UsctStateUpdated, nullptr, (QObject*)&UsctState); + } + mState[aStateCode] = aState; + if(aState) + { + int msg = aStateCode; + EventCenter::Default()->triggerEvent(ErrorStateUnactive, nullptr, (QObject*)&msg); + } + { + QPair msg(QPair(aStateCode, getStateErrorMessage(aStateCode))); + EventCenter::Default()->triggerEvent(ErrorStateActive, nullptr, (QObject*)&msg); + } +} + +bool UsctStateManager::getUsctState() +{ + bool result = true; + QMap::const_iterator it; + for (it = mState.constBegin(); it != mState.constEnd(); ++it) + { + result = result & it.value(); + } + return result; +} + +QString UsctStateManager::getStateErrorMessage(int aStateCode) +{ + switch (aStateCode) + { + case DmsState : return "Dms Error"; + case DmsConnectionState : return "Dms Connection Error"; + case ReconState : return "Recon Fatal Error"; + case ReconMppsState : return "Recon Mpps Connection Error"; + case ReconPacsState : return "Recon Pacs Connection Error"; + case ReconEmptyScanState : return "Recon Empty Scan Data Error"; + case ReconDBState : return "Recon Database Connection Error"; + default: return "Unknow Error"; + } +} diff --git a/src/device/UsctStateManager.h b/src/device/UsctStateManager.h new file mode 100644 index 0000000..b1f5757 --- /dev/null +++ b/src/device/UsctStateManager.h @@ -0,0 +1,42 @@ +#ifndef USCTSTATEMANAGER_H +#define USCTSTATEMANAGER_H + +#include +#include + +enum UsctState +{ + DmsState = 0, //Dms是否有致命错误,false代表存在致命错误 + DmsConnectionState, + ReconState, //Recon是否有致命错误,false代表存在致命错误 + ReconMppsState, + ReconPacsState, + ReconConnectionState, + ReconEmptyScanState, + ReconDBState +}; + +class UsctStateManager : public QObject +{ + Q_OBJECT +public: + static UsctStateManager* getInstance(); + + bool getUsctState(); + void setState(int aStateCode, bool aState); + +private: + QString getStateErrorMessage(int aStateCode); + + +private: + UsctStateManager(QObject* aParent = nullptr); + UsctStateManager(const UsctStateManager&); + UsctStateManager& operator=(const UsctStateManager&); + +private: + QMap mState; + +}; + +#endif // USCTSTATEMANAGER_H diff --git a/src/event/EventCenter.h b/src/event/EventCenter.h index 2c7cb12..574300f 100644 --- a/src/event/EventCenter.h +++ b/src/event/EventCenter.h @@ -44,6 +44,7 @@ ADD_EVENT_VALUE(StartScanProcess)\ ADD_EVENT_VALUE(CurrentUserNameChanged)\ ADD_EVENT_VALUE(EmptyScanFinished)\ ADD_EVENT_VALUE(UserVerificationSuccess)\ +ADD_EVENT_VALUE(UsctStateUpdated)\ diff --git a/src/forms/TopBarWidget.cpp b/src/forms/TopBarWidget.cpp index 16e9f37..d65fc53 100644 --- a/src/forms/TopBarWidget.cpp +++ b/src/forms/TopBarWidget.cpp @@ -61,10 +61,17 @@ TopBarWidget::TopBarWidget(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, }); auto readyIcon = new QToolButton(this); + readyIcon->setIcon(QIcon(":/icons/dicom/echo_suc.png")); readyIcon->setObjectName("ready"); connect(readyIcon, &QToolButton::clicked,[=](){ emit warnBtnClicked(); }); + connect(EventCenter::Default(), &EventCenter::UsctStateUpdated,[readyIcon](QObject*, QObject* msg) + { + bool state = *(bool*)msg; + QIcon icon(state ? ":/icons/dicom/echo_suc.png" :":/icons/dicom/echo_fail.png" ); + readyIcon->setIcon(icon); + }); auto lockIcon = new QLabel(this); lockIcon->setText(""); diff --git a/src/stylesheet/Dark2.css b/src/stylesheet/Dark2.css index b62db41..900719c 100644 --- a/src/stylesheet/Dark2.css +++ b/src/stylesheet/Dark2.css @@ -450,7 +450,6 @@ QToolButton#ready { min-height: 28px; max-height: 28px; background: transparent; - qproperty-icon:url(":/icons/dicom/echo_suc.png"); qproperty-toolButtonStyle:ToolButtonTextBesideIcon; qproperty-iconSize:26px 26px; }