From abcdb457640832f2515bcbcb5a7688c34fbe19d8 Mon Sep 17 00:00:00 2001 From: chenhuijun Date: Wed, 31 Jul 2024 15:48:36 +0800 Subject: [PATCH] feat: Add CEchoTestDialog & its style --- src/dialogs/CEchoTestDialog.cpp | 135 ++++++++++++++++++++++++++++++++ src/dialogs/CEchoTestDialog.h | 39 +++++++++ src/stylesheet/Dark2.css | 14 ++++ 3 files changed, 188 insertions(+) create mode 100644 src/dialogs/CEchoTestDialog.cpp create mode 100644 src/dialogs/CEchoTestDialog.h diff --git a/src/dialogs/CEchoTestDialog.cpp b/src/dialogs/CEchoTestDialog.cpp new file mode 100644 index 0000000..6fd0541 --- /dev/null +++ b/src/dialogs/CEchoTestDialog.cpp @@ -0,0 +1,135 @@ +#include "CEchoTestDialog.h" +#include "action/ActionCreator.h" +#include "dicom/CEchoAction.h" +#include "components/LoadingWidget.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace +{ + const int ENDLINE_SPACE = 3; +} + + +CEchoTestDialog::CEchoTestDialog(QWidget* aParent, Qt::WindowFlags aFlags) + :GUIFormBaseDialog(aParent, aFlags) + ,mMessageLayout(new QGridLayout) + ,mLoadingWidget(nullptr) + ,mAction(new CEchoAction(this)) + ,mIndex(0) + ,mCurrentMessageLabel(nullptr) + ,mStarted(false) +{ + // setFocusPolicy(Qt::ClickFocus); + setButtonMode(DialogButtonMode::OkOnly); + // setSizePolicy(QSizePolicy::Fixed,QSizePolicy::MinimumExpanding); + setMinimumHeight(200); + setFixedWidth(800); + QRect screenRect = QGuiApplication::primaryScreen()->geometry(); + QPoint screenCenter = screenRect.center(); + QPoint dialogPos = screenCenter - QPoint(width() / 2, height()/ 2); + move(dialogPos); + + auto layout = new QVBoxLayout(mFormWidget); + //Title + QLabel* title = new QLabel(this); + title->setAlignment(Qt::AlignCenter); + title->setText(tr("Test DICOM Connection")); + title->setObjectName("title"); + layout->addWidget(title); + layout->addLayout(mMessageLayout); + layout->addSpacerItem(new QSpacerItem(2,2,QSizePolicy::Minimum,QSizePolicy::MinimumExpanding)); + connect(mAction, &CEchoAction::actionStepStart,this,&CEchoTestDialog::addActionMessage); + connect(mAction, &CEchoAction::actionStepCompleted,this,&CEchoTestDialog::updateCurrentActionResult); + connect(mAction, &CEchoAction::actionCompleted,this,&CEchoTestDialog::handleActionFinish); + mBtnOk->setEnabled(false); + QLabel* endline = new QLabel(this); + endline->setFixedHeight(ENDLINE_SPACE); + endline->setObjectName("endline"); + layout->addWidget(endline); +} + +CEchoTestDialog::~CEchoTestDialog() +{ + +} + +void CEchoTestDialog::setCEchoSettings(const QList& aCEchoSettings) +{ + if (mAction){ + for (const CEchoSetting& item : aCEchoSettings) + { + mAction->addCEchoActionItem(item); + } + } + setFixedHeight(200+ 30 *aCEchoSettings.length()); +} + +bool CEchoTestDialog::updateReferenceData() +{ + return true; +} + +void CEchoTestDialog::addActionMessage(const QString& aMessage) +{ + mCurrentMessageLabel = new QLabel(aMessage); + if (mCurrentMessageLabel!=nullptr){ + mCurrentMessageLabel->setObjectName("CEchoMessage"); + mLoadingWidget = new LoadingWidget(this); + mLoadingWidget->setFixedSize(24,24); + mLoadingWidget->setMaxDiameter(5); + mLoadingWidget->setMinDiameter(1); + mLoadingWidget->setCount(8); + mMessageLayout->addWidget(mLoadingWidget,mIndex,1, Qt::AlignRight); + mMessageLayout->addWidget(mCurrentMessageLabel,mIndex,0); + } +} + +void CEchoTestDialog::updateCurrentActionResult(const ActionResult& aResult) +{ + if (mLoadingWidget){ + delete mLoadingWidget; + } + QLabel * icon = new QLabel(this); + QPixmap pix(aResult.Code == ActionCode::Sucessed?":/icons/selected.png":":/icons/close_circle.png"); + icon->setPixmap(pix.scaledToHeight(24, Qt::TransformationMode::SmoothTransformation)); + mMessageLayout->addWidget(icon,mIndex,1, Qt::AlignRight); + if (mCurrentMessageLabel!=nullptr){ + if(aResult.Code != ActionCode::Sucessed)mCurrentMessageLabel->setStyleSheet("color:red"); + mCurrentMessageLabel->setText(aResult.Data.toString()); + } + mIndex++; +} + +void CEchoTestDialog::handleActionFinish(const ActionResult& aResult) +{ + + if (mCurrentMessageLabel!=nullptr){ + QLabel * icon = new QLabel(this); + QPixmap pix(aResult.Code == ActionCode::Sucessed?":/icons/selected.png":":/icons/close_circle.png"); + icon->setPixmap(pix.scaledToHeight(24, Qt::TransformationMode::SmoothTransformation)); + mMessageLayout->addWidget(icon,mIndex,1, Qt::AlignRight); + if(aResult.Code != ActionCode::Sucessed)mCurrentMessageLabel->setStyleSheet("color:red"); + mCurrentMessageLabel->setText(aResult.Data.toString()); + } + mIndex++; + mLoadingWidget->setVisible(false); + mBtnOk->setEnabled(true); +} + +void CEchoTestDialog::showEvent(QShowEvent *aEvent) +{ + QDialog::showEvent(aEvent); + if (mStarted) return; + mAction->execute(); + mStarted = true; +} + + diff --git a/src/dialogs/CEchoTestDialog.h b/src/dialogs/CEchoTestDialog.h new file mode 100644 index 0000000..1aeb209 --- /dev/null +++ b/src/dialogs/CEchoTestDialog.h @@ -0,0 +1,39 @@ +#ifndef BF46771C_39DB_408E_8297_B979E36AC297 +#define BF46771C_39DB_408E_8297_B979E36AC297 + +#include "GUIFormBaseDialog.h" +#include "dicom/CEchoSetting.h" +#include "dicom/CEchoAction.h" + + +class QGridLayout; +class LoadingWidget; +class QLabel; +class CEchoTestDialog :public GUIFormBaseDialog +{ + Q_OBJECT + +public: + explicit CEchoTestDialog(QWidget* aParent = nullptr, Qt::WindowFlags aFlags = Qt::WindowFlags()); + ~CEchoTestDialog() override; + void setCEchoSettings(const QList& aCEchoSettings); +protected: + bool updateReferenceData() override; + void showEvent(QShowEvent *aEvent) override; + +private: + void addActionMessage(const QString& aMessage); + void updateCurrentActionResult(const ActionResult& aResult); + void handleActionFinish(const ActionResult& aResult); + +private: + QGridLayout* mMessageLayout; + LoadingWidget* mLoadingWidget; + CEchoAction* mAction; + int mIndex; + QLabel* mCurrentMessageLabel; + bool mStarted; + +}; + +#endif /* BF46771C_39DB_408E_8297_B979E36AC297 */ diff --git a/src/stylesheet/Dark2.css b/src/stylesheet/Dark2.css index 2bcaa9a..3950844 100644 --- a/src/stylesheet/Dark2.css +++ b/src/stylesheet/Dark2.css @@ -846,6 +846,10 @@ QToolButton#mppsSettingsButton{ text-align: center; } +QPushButton#cechoButton{ + background: #365880; +} + /*------AccountTableForm-----------------------------------------------------*/ QWidget#commandWidgetnoBBorder { min-height: 123px; @@ -905,6 +909,12 @@ QPushButton#btnOK { font-weight: bold; } +QPushButton#btnOK:disabled { + background: #365880; + font-weight: bold; + color: #606060; +} + /* GUIFormBaseDialog -> AccountFormDialog */ QToolButton#changePwdBtn{ qproperty-icon:url(":/icons/edit.png"); @@ -1225,6 +1235,10 @@ QWidget#ScanProcessWidget QLabel#ScanProcessInformation{ font-size: 50px; } +QWidget#formWidget QLabel#CEchoMessage{ + font-size: 24px; +} +