feat: Add water process in GUI.
This commit is contained in:
@@ -19,6 +19,8 @@
|
||||
#include "dicom/WorkListManager.h"
|
||||
#include "components/CoordinateXYWidget.h"
|
||||
#include "components/CoordinateZWidget.h"
|
||||
#include "components/WaveWidget.h"
|
||||
#include "components/ZFlashWidget.h"
|
||||
#include "utilities/ScanProcessSequence.h"
|
||||
#include "dicom/MPPSManager.h"
|
||||
|
||||
@@ -34,6 +36,8 @@ const size_t PREVIEW_COL = 140;
|
||||
const float PIXEL_SPACING = 1.5f;
|
||||
const float HALF_ROI_WIDTH = 100.0f;
|
||||
const unsigned int DRAINAGE_TIME = 180000; // 3 minitues
|
||||
const unsigned int WATERFLOOD_TIME = 180000; // 3 minitues
|
||||
const unsigned int WATERCLEAN_TIME = 180000; // 3 minitues
|
||||
}
|
||||
|
||||
ScanFormWidget::ScanFormWidget(QWidget* parent)
|
||||
@@ -43,10 +47,19 @@ ScanFormWidget::ScanFormWidget(QWidget* parent)
|
||||
, mShutdownButton(new QToolButton(this))
|
||||
, mStartScanButton(new QToolButton(this))
|
||||
, mDrainageButton(new QToolButton(this))
|
||||
, mXYLabel(new CoordinateXYWidget(this))
|
||||
, mZLabel(new CoordinateZWidget(this))
|
||||
, mWaterfloodButton(new QToolButton(this))
|
||||
, mCleanButton(new QToolButton(this))
|
||||
//, mXYLabel(new CoordinateXYWidget(this))
|
||||
, mZLabel(new ZFlashWidget(this))
|
||||
, mWaveWidget(new WaveWidget(this))
|
||||
, mScanProcessLabel(new QLabel(this))
|
||||
, mDrainageTimer(new QTimer(this))
|
||||
, mWaterfloodTimer(new QTimer(this))
|
||||
, mWaterCleanTimer(new QTimer(this))
|
||||
, mFlashLayoutWidget(new QWidget(this))
|
||||
, mWaterProcessMode()
|
||||
, mWaterCleanStep()
|
||||
, mIsWaterProcessing(false)
|
||||
{
|
||||
|
||||
auto commandlayout = new QHBoxLayout(ui->commandWidget);
|
||||
@@ -59,7 +72,23 @@ ScanFormWidget::ScanFormWidget(QWidget* parent)
|
||||
mDrainageTimer->setSingleShot(true);
|
||||
connect(mDrainageTimer, &QTimer::timeout, this, [this]()
|
||||
{
|
||||
mDrainageButton->click();
|
||||
finishWaterPorcess(DrainageMode);
|
||||
QString message = tr("Drainage time out");
|
||||
EventCenter::Default()->triggerEvent(GUIEvents::GUIErrorRaise, nullptr, (QObject*)&message);
|
||||
});
|
||||
mWaterfloodTimer->setSingleShot(true);
|
||||
connect(mWaterfloodTimer, &QTimer::timeout, this, [this]()
|
||||
{
|
||||
finishWaterPorcess(WaterFloodMode);
|
||||
QString message = tr("Waterflood time out");
|
||||
EventCenter::Default()->triggerEvent(GUIEvents::GUIErrorRaise, nullptr, (QObject*)&message);
|
||||
});
|
||||
mWaterCleanTimer->setSingleShot(true);
|
||||
connect(mWaterCleanTimer, &QTimer::timeout, this, [this]()
|
||||
{
|
||||
finishWaterPorcess(WaterCleanMode);
|
||||
QString message = tr("Clean time out");
|
||||
EventCenter::Default()->triggerEvent(GUIEvents::GUIErrorRaise, nullptr, (QObject*)&message);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -81,55 +110,203 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout)
|
||||
layout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding));
|
||||
addVerticalLine(layout);
|
||||
|
||||
mWaterfloodButton->setObjectName("btnWaterflood");
|
||||
mWaterfloodButton->setCheckable(true);
|
||||
mWaterfloodButton->setText(tr("Waterflood"));
|
||||
layout->addWidget(mWaterfloodButton);
|
||||
|
||||
mDrainageButton->setObjectName("btnDrainage");
|
||||
mDrainageButton->setCheckable(true);
|
||||
mDrainageButton->setText(tr("Drainage"));
|
||||
layout->addWidget(mDrainageButton);
|
||||
|
||||
connect(mDrainageButton, &QToolButton::clicked, [=](bool aSatus)
|
||||
mCleanButton->setObjectName("btnClean");
|
||||
mCleanButton->setCheckable(true);
|
||||
mCleanButton->setText(tr("Clean"));
|
||||
layout->addWidget(mCleanButton);
|
||||
|
||||
connect(mWaterfloodButton, &QToolButton::clicked, [this](bool aStatus)
|
||||
{
|
||||
//Drainage
|
||||
if(aSatus && DialogManager::Default()->requestAlertMessage(tr("Make sure to open the drain valve ?"), DialogButtonMode::OkAndCancel, tr("Confirm Drainage")) == QDialog::Rejected)
|
||||
if(aStatus && DialogManager::Default()->requestAlertMessage(tr("Please confirm if water injection is required ?"), DialogButtonMode::OkAndCancel, tr("Confirm Water Injection")) == QDialog::Rejected)
|
||||
{
|
||||
mDrainageButton->setChecked(!aSatus);
|
||||
mWaterfloodButton->setChecked(!aStatus);
|
||||
return;
|
||||
}
|
||||
mDrainageButton->setEnabled(false);
|
||||
if(aSatus == true)
|
||||
setWaterProcessModeEnable(false);
|
||||
if(aStatus)
|
||||
{
|
||||
mWaterfloodButton->setText(tr("Waterflooding"));
|
||||
EventCenter::Default()->triggerEvent(RequestWaterflood, nullptr, nullptr);
|
||||
LOG_USER_OPERATION("Perform Waterflood");
|
||||
}
|
||||
else
|
||||
{
|
||||
EventCenter::Default()->triggerEvent(RequestWaterModeExit, nullptr, nullptr);
|
||||
LOG_USER_OPERATION("Stop Waterflood");
|
||||
}
|
||||
});
|
||||
|
||||
connect(mDrainageButton, &QToolButton::clicked, [=](bool aStatus)
|
||||
{
|
||||
if(aStatus && DialogManager::Default()->requestAlertMessage(tr("Please confirm if drainage is required ?"), DialogButtonMode::OkAndCancel, tr("Confirm Drainage")) == QDialog::Rejected)
|
||||
{
|
||||
mDrainageButton->setChecked(!aStatus);
|
||||
return;
|
||||
}
|
||||
setWaterProcessModeEnable(false);
|
||||
if(aStatus == true)
|
||||
{
|
||||
mDrainageTimer->start(DRAINAGE_TIME);
|
||||
QString code = "1";
|
||||
mDrainageButton->setText(tr("Drainaging"));
|
||||
EventCenter::Default()->triggerEvent(RequestDrainage, nullptr, (QObject*)(&code));
|
||||
EventCenter::Default()->triggerEvent(RequestDrainage, nullptr, nullptr);
|
||||
LOG_USER_OPERATION("Perform Drainage");
|
||||
}
|
||||
else
|
||||
{
|
||||
mDrainageTimer->stop();
|
||||
QString code = "0";
|
||||
mDrainageButton->setText(tr("Drainage"));
|
||||
EventCenter::Default()->triggerEvent(RequestDrainage, nullptr, (QObject*)(&code));
|
||||
EventCenter::Default()->triggerEvent(RequestWaterModeExit, nullptr, nullptr);
|
||||
LOG_USER_OPERATION("Stop Drainage");
|
||||
}
|
||||
});
|
||||
|
||||
connect(DeviceManager::Default(), &DeviceManager::startPumpControlResult, [this](bool aIsSucessful)
|
||||
connect(mCleanButton, &QToolButton::clicked, [this](bool aStatus)
|
||||
{
|
||||
if(aStatus && DialogManager::Default()->requestAlertMessage(tr("Please confirm if cleaning and disinfection are required. ?"), DialogButtonMode::OkAndCancel, tr("Confirm cleaning")) == QDialog::Rejected)
|
||||
{
|
||||
mCleanButton->setChecked(!aStatus);
|
||||
return;
|
||||
}
|
||||
setWaterProcessModeEnable(false);
|
||||
if(aStatus)
|
||||
{
|
||||
mWaterCleanStep = FirstWaterClean;
|
||||
mCleanButton->setText(tr("Cleaning"));
|
||||
EventCenter::Default()->triggerEvent(RequestWaterClean, nullptr, nullptr);
|
||||
LOG_USER_OPERATION("Perform Cleaning in first step");
|
||||
}
|
||||
else
|
||||
{
|
||||
EventCenter::Default()->triggerEvent(RequestWaterModeExit, nullptr, nullptr);
|
||||
LOG_USER_OPERATION("Stop Clean");
|
||||
}
|
||||
});
|
||||
|
||||
connect(DeviceManager::Default(), &DeviceManager::startDrainageControlResult, [this](bool aIsSucessful)
|
||||
{
|
||||
mDrainageButton->setEnabled(true);
|
||||
if(!aIsSucessful)
|
||||
{
|
||||
mDrainageTimer->stop();
|
||||
bool isChecked = mDrainageButton->isChecked();
|
||||
mDrainageButton->setChecked(!isChecked);
|
||||
if(isChecked)
|
||||
setWaterProcessModeEnable(true);
|
||||
mDrainageButton->setChecked(false);
|
||||
mDrainageButton->setText(tr("Drainage"));
|
||||
}
|
||||
else
|
||||
{
|
||||
mIsWaterProcessing = true;
|
||||
mDrainageButton->setEnabled(true);
|
||||
mDrainageTimer->start(DRAINAGE_TIME);
|
||||
mWaterProcessMode = DrainageMode;
|
||||
mWaveWidget->startCharge(50, DownWaveDirection);
|
||||
}
|
||||
});
|
||||
|
||||
connect(DeviceManager::Default(), &DeviceManager::startWaterfloodResult, [this](bool aIsSucessful)
|
||||
{
|
||||
if(!aIsSucessful)
|
||||
{
|
||||
setWaterProcessModeEnable(true);
|
||||
mWaterfloodButton->setChecked(false);
|
||||
mWaterfloodButton->setText(tr("Drainage"));
|
||||
}
|
||||
else
|
||||
{
|
||||
mIsWaterProcessing = true;
|
||||
mWaterfloodButton->setEnabled(true);
|
||||
mWaterfloodTimer->start(WATERFLOOD_TIME);
|
||||
mWaterProcessMode = WaterFloodMode;
|
||||
mWaveWidget->startCharge(0, UpWaveDirection);
|
||||
}
|
||||
});
|
||||
|
||||
connect(DeviceManager::Default(), &DeviceManager::startWaterCleanResult, [this](bool aIsSucessful)
|
||||
{
|
||||
if(!aIsSucessful)
|
||||
{
|
||||
setWaterProcessModeEnable(true);
|
||||
mCleanButton->setChecked(false);
|
||||
mCleanButton->setText(tr("Clean"));
|
||||
}
|
||||
else
|
||||
{
|
||||
mIsWaterProcessing = true;
|
||||
mCleanButton->setEnabled(true);
|
||||
mWaterCleanTimer->start(WATERCLEAN_TIME);
|
||||
mWaterProcessMode = WaterCleanMode;
|
||||
mZLabel->startFlash();
|
||||
}
|
||||
});
|
||||
|
||||
connect(DeviceManager::Default(), &DeviceManager::exitWaterProcessResult, [this](bool aIsSucessful)
|
||||
{
|
||||
finishWaterPorcess(mWaterProcessMode);
|
||||
if(!aIsSucessful)
|
||||
{
|
||||
QString waterProcessMode;
|
||||
switch (mWaterProcessMode)
|
||||
{
|
||||
mDrainageButton->setText(tr("Drainage"));
|
||||
case WaterFloodMode:
|
||||
waterProcessMode = tr("Waterflood");
|
||||
break;
|
||||
case DrainageMode:
|
||||
waterProcessMode = tr("Drainage");
|
||||
break;
|
||||
case WaterCleanMode:
|
||||
waterProcessMode = tr("Cleaning");
|
||||
break;
|
||||
}
|
||||
else
|
||||
QString message = waterProcessMode + tr(" exit failed.");
|
||||
EventCenter::Default()->triggerEvent(GUIEvents::GUIErrorRaise, nullptr, (QObject*)&message);
|
||||
}
|
||||
});
|
||||
|
||||
connect(DeviceManager::Default(), &DeviceManager::waterProcessFinishedResult, [this](bool aIsSucessful)
|
||||
{
|
||||
if(!mIsWaterProcessing)
|
||||
{
|
||||
return;
|
||||
}
|
||||
finishWaterPorcess(mWaterProcessMode);
|
||||
QString message;
|
||||
if(aIsSucessful)
|
||||
{
|
||||
switch (mWaterProcessMode)
|
||||
{
|
||||
mDrainageButton->setText(tr("Drainaging"));
|
||||
case WaterFloodMode:
|
||||
message = tr("Waterflood finished.");
|
||||
DialogManager::Default()->requestAlertMessage(message, DialogButtonMode::OkOnly, tr("Confirm Water Injection"));
|
||||
break;
|
||||
case DrainageMode:
|
||||
message = tr("Drainage finished. Please do the disinfection in next step.");
|
||||
DialogManager::Default()->requestAlertMessage(message, DialogButtonMode::OkOnly, tr("Confirm Drainage"));
|
||||
break;
|
||||
case WaterCleanMode:
|
||||
processWaterCleanResult();
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (mWaterProcessMode)
|
||||
{
|
||||
case WaterFloodMode:
|
||||
message = tr("Waterflood failed.");
|
||||
break;
|
||||
case DrainageMode:
|
||||
message = tr("Drainage failed.");
|
||||
break;
|
||||
case WaterCleanMode:
|
||||
message = tr("Clean failed.");
|
||||
break;
|
||||
}
|
||||
EventCenter::Default()->triggerEvent(GUIEvents::GUIErrorRaise, nullptr, (QObject*)&message);
|
||||
}
|
||||
});
|
||||
|
||||
connect(mAccountButton, &QToolButton::clicked, DialogManager::Default(),&DialogManager::requestEditSelfAccount);
|
||||
@@ -139,7 +316,7 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout)
|
||||
if(DialogManager::Default()->requestAlertMessage(QString(tr("Shut down now ?")), DialogButtonMode::OkAndCancel,tr("Shut Down")) == QDialog::Accepted)
|
||||
{
|
||||
LOG_USER_OPERATION("Shut Down")
|
||||
EventCenter::Default()->triggerEvent(GUIEvents::RequestShutdown, nullptr, nullptr);
|
||||
EventCenter::Default()->triggerEvent(GUIEvents::RequestShutdown, nullptr, nullptr);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -161,9 +338,9 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout)
|
||||
{
|
||||
if(aResult)
|
||||
{
|
||||
mAccountButton->setEnabled(false);
|
||||
mDrainageButton->setEnabled(false);
|
||||
mShutdownButton->setEnabled(false);
|
||||
// mAccountButton->setEnabled(false);
|
||||
// mDrainageButton->setEnabled(false);
|
||||
// mShutdownButton->setEnabled(false);
|
||||
mScanProcessLabel->setText(getAutoLocateMessage());
|
||||
}
|
||||
|
||||
@@ -202,6 +379,69 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout)
|
||||
|
||||
}
|
||||
|
||||
void ScanFormWidget::setWaterProcessModeEnable(bool aIsEnable)
|
||||
{
|
||||
mWaterfloodButton->setEnabled(aIsEnable);
|
||||
mCleanButton->setEnabled(aIsEnable);
|
||||
mDrainageButton->setEnabled(aIsEnable);
|
||||
}
|
||||
|
||||
void ScanFormWidget::processWaterCleanResult()
|
||||
{
|
||||
QString message;
|
||||
switch (mWaterCleanStep)
|
||||
{
|
||||
case FirstWaterClean:
|
||||
message = tr("Please click the confirm button for cleaning after disinfection.");
|
||||
if(DialogManager::Default()->requestAlertMessage(message, DialogButtonMode::OkAndCancel, tr("Confirm cleaning")) == QDialog::Accepted)
|
||||
{
|
||||
startWaterCleanInSecondStep();
|
||||
}
|
||||
break;
|
||||
case SecondWaterClean:
|
||||
message = tr("cleanning finished.");
|
||||
DialogManager::Default()->requestAlertMessage(message, DialogButtonMode::OkOnly, tr("Confirm cleaning"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ScanFormWidget::startWaterCleanInSecondStep()
|
||||
{
|
||||
setWaterProcessModeEnable(false);
|
||||
mWaterCleanStep = SecondWaterClean;
|
||||
mCleanButton->setText(tr("Cleaning"));
|
||||
mCleanButton->setChecked(true);
|
||||
EventCenter::Default()->triggerEvent(RequestWaterClean, nullptr, nullptr);
|
||||
LOG_USER_OPERATION("Perform Cleaning in second step");
|
||||
}
|
||||
|
||||
void ScanFormWidget::finishWaterPorcess(WaterProcessMode aMode)
|
||||
{
|
||||
mIsWaterProcessing = false;
|
||||
setWaterProcessModeEnable(true);
|
||||
switch (aMode)
|
||||
{
|
||||
case WaterFloodMode:
|
||||
mWaterfloodTimer->stop();
|
||||
mWaterfloodButton->setText(tr("Waterflood"));
|
||||
mWaterfloodButton->setChecked(false);
|
||||
mWaveWidget->stopCharge();
|
||||
break;
|
||||
case DrainageMode:
|
||||
mDrainageTimer->stop();
|
||||
mDrainageButton->setText(tr("Drainage"));
|
||||
mDrainageButton->setChecked(false);
|
||||
mWaveWidget->stopCharge();
|
||||
break;
|
||||
case WaterCleanMode:
|
||||
mWaterCleanTimer->stop();
|
||||
mCleanButton->setText(tr("Clean"));
|
||||
mCleanButton->setChecked(false);
|
||||
mZLabel->stopFlash();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ScanFormWidget::initScanContent()
|
||||
{
|
||||
|
||||
@@ -224,18 +464,26 @@ void ScanFormWidget::initScanContent()
|
||||
|
||||
|
||||
QHBoxLayout* displayLayout = new QHBoxLayout(displayWidget);
|
||||
QWidget* xyWidget = new QWidget(this);
|
||||
xyWidget->setObjectName("broadcastWidget");
|
||||
QHBoxLayout* xyLayout = new QHBoxLayout(xyWidget);
|
||||
xyLayout->addWidget(mXYLabel);
|
||||
displayLayout->addWidget(xyWidget);
|
||||
// QWidget* xyWidget = new QWidget(this);
|
||||
// xyWidget->setObjectName("broadcastWidget");
|
||||
// QHBoxLayout* xyLayout = new QHBoxLayout(xyWidget);
|
||||
// xyLayout->addWidget(mXYLabel);
|
||||
// displayLayout->addWidget(xyWidget);
|
||||
|
||||
QWidget* zWidget = new QWidget(this);
|
||||
zWidget->setObjectName("broadcastWidget");
|
||||
QHBoxLayout* zLayout = new QHBoxLayout(zWidget);
|
||||
zLayout->addWidget(mZLabel);
|
||||
displayLayout->addWidget(zWidget);
|
||||
// QWidget* zWidget = new QWidget(this);
|
||||
// zWidget->setObjectName("broadcastWidget");
|
||||
// QHBoxLayout* zLayout = new QHBoxLayout(zWidget);
|
||||
// zLayout->addWidget(mZLabel);
|
||||
// displayLayout->addWidget(zWidget);
|
||||
// zWidget->hide();
|
||||
|
||||
mFlashLayoutWidget->setObjectName("broadcastWidget");
|
||||
QHBoxLayout* flashLayout = new QHBoxLayout(mFlashLayoutWidget);
|
||||
flashLayout->addWidget(mZLabel);
|
||||
flashLayout->addWidget(mWaveWidget);
|
||||
|
||||
displayLayout->addWidget(mFlashLayoutWidget);
|
||||
//mWaveWidget->startCharge();
|
||||
|
||||
}
|
||||
|
||||
@@ -353,6 +601,8 @@ void ScanFormWidget::reloadLanguage()
|
||||
mStartScanButton->setText(tr("Start Scan"));
|
||||
mScanProcessLabel->setText(tr("Please confirm checking patient information to start the process"));
|
||||
mDrainageButton->isChecked() ? mDrainageButton->setText(tr("Drainaging")) : mDrainageButton->setText(tr("Drainage"));
|
||||
mWaterfloodButton->isChecked() ? mWaterfloodButton->setText(tr("Waterflooding")) : mWaterfloodButton->setText(tr("Waterflood"));
|
||||
mCleanButton->isChecked() ? mCleanButton->setText(tr("Cleaning")) : mCleanButton->setText(tr("Clean"));
|
||||
}
|
||||
|
||||
QString ScanFormWidget::getAutoLocateMessage()
|
||||
|
||||
@@ -11,8 +11,21 @@ class PatientInformation;
|
||||
class QToolButton;
|
||||
class CoordinateXYWidget;
|
||||
class CoordinateZWidget;
|
||||
class ZFlashWidget;
|
||||
class WaveWidget;
|
||||
|
||||
class ScanFormWidget :public TabFormWidget {
|
||||
enum WaterProcessMode
|
||||
{
|
||||
WaterFloodMode = 0, DrainageMode, WaterCleanMode
|
||||
};
|
||||
|
||||
enum WaterCleanStep
|
||||
{
|
||||
FirstWaterClean = 0, SecondWaterClean
|
||||
};
|
||||
|
||||
class ScanFormWidget :public TabFormWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit ScanFormWidget(QWidget *parent = nullptr);
|
||||
@@ -27,10 +40,19 @@ private:
|
||||
QToolButton* mShutdownButton;
|
||||
QToolButton* mStartScanButton;
|
||||
QToolButton* mDrainageButton;
|
||||
CoordinateXYWidget* mXYLabel;
|
||||
CoordinateZWidget* mZLabel;
|
||||
QToolButton* mWaterfloodButton;
|
||||
QToolButton* mCleanButton;
|
||||
//CoordinateXYWidget* mXYLabel;
|
||||
ZFlashWidget* mZLabel;
|
||||
WaveWidget* mWaveWidget;
|
||||
QLabel* mScanProcessLabel;
|
||||
QTimer* mDrainageTimer;
|
||||
QTimer* mWaterfloodTimer;
|
||||
QTimer* mWaterCleanTimer;
|
||||
QWidget* mFlashLayoutWidget;
|
||||
WaterProcessMode mWaterProcessMode;
|
||||
WaterCleanStep mWaterCleanStep;
|
||||
bool mIsWaterProcessing;
|
||||
|
||||
void initCommandWidget(QHBoxLayout *layout);
|
||||
void initScanContent();
|
||||
@@ -39,11 +61,14 @@ private:
|
||||
void reloadLanguage();
|
||||
void setScanProtocal(PatientInformation* aPatient, int aProtocal);
|
||||
QString getAutoLocateMessage();
|
||||
void finishWaterPorcess(WaterProcessMode aMode);
|
||||
void startWaterCleanInSecondStep();
|
||||
void processWaterCleanResult();
|
||||
|
||||
private slots:
|
||||
void protocolChanged(int type);
|
||||
void prepareStartFullScan();
|
||||
|
||||
void setWaterProcessModeEnable(bool aIsEnable = true);
|
||||
void initEvents();
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user