diff --git a/cfgs/usct-product.json b/cfgs/usct-product.json
index 11c4242..3a2f131 100644
--- a/cfgs/usct-product.json
+++ b/cfgs/usct-product.json
@@ -28,7 +28,7 @@
"AnonymousMode": false
},
"protocol": {
- "default": "0",
+ "default": "1",
"lists": "0;1;2;3"
},
"storagepolicy": {
@@ -42,12 +42,12 @@
"lastlogin": {
"password": "",
"remember": "false",
- "usercode": ""
+ "usercode": "usct"
},
"worklist": {
"ae": "WORKLIST",
"ip": "192.168.1.6",
- "localAE": "gui2",
+ "localAE": "gui",
"port": "11112"
},
"pacs": {
@@ -58,14 +58,14 @@
},
"recon": {
"ae": "server9D",
- "ip": "192.168.1.153",
+ "ip": "192.168.1.2",
"localAE": "3D recon",
"port": "5003",
- "transferPath": "",
- "scancanwithoutrecon": false
+ "transferPath": "/home/krad/Storage/Raw",
+ "scancanwithoutrecon": true
},
"mpps": {
- "open": true,
+ "open": false,
"ae": "WORKLIST",
"ip": "192.168.1.6",
"localAE": "gui2",
@@ -101,8 +101,10 @@
}]
},
"worklistfilter": {
- "modality": "US",
- "date": "0"
+ "default": "Recent3Days",
+ "lists": "Today;Recent3Days;ThisWeek;ThisMonth",
+ "date": "-1",
+ "modality": ""
},
"screensaver": {
"open": false,
@@ -119,5 +121,9 @@
},
"reconlist": {
"expire": "30"
+ },
+ "filter": {
+ "usage": "0",
+ "maximumusage": "100"
}
}
diff --git a/src/forms/scan/ScanFormWidget.cpp b/src/forms/scan/ScanFormWidget.cpp
index 69260ce..1df48f7 100644
--- a/src/forms/scan/ScanFormWidget.cpp
+++ b/src/forms/scan/ScanFormWidget.cpp
@@ -22,6 +22,7 @@
#include "components/WaveWidget.h"
#include "components/ZFlashWidget.h"
#include "utilities/ScanProcessSequence.h"
+#include "utilities/FilterUsageCalculator.h"
#include "dicom/MPPSManager.h"
#ifdef WIN32
@@ -127,7 +128,9 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout)
connect(mWaterfloodButton, &QToolButton::clicked, [this](bool aStatus)
{
- if(aStatus && DialogManager::Default()->requestAlertMessage(tr("Please confirm if water injection is required ?"), DialogButtonMode::OkAndCancel, tr("Confirm Water Injection")) == QDialog::Rejected)
+ QString filterMessage = FilterUsageCalculator::getCurrentFilterUsage() > FilterUsageCalculator::getMaximumFilterUsage() ?
+ tr("\n(The filter element has expired, please pay attention to replacing the filter element)"):"";
+ if(aStatus && DialogManager::Default()->requestAlertMessage(tr("Please confirm if water injection is required ?") + filterMessage, DialogButtonMode::OkAndCancel, tr("Confirm Water Injection")) == QDialog::Rejected)
{
mWaterfloodButton->setChecked(!aStatus);
return;
@@ -169,7 +172,9 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout)
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)
+ QString filterMessage = FilterUsageCalculator::getCurrentFilterUsage() > FilterUsageCalculator::getMaximumFilterUsage() ?
+ tr("\n(The filter element has expired, please pay attention to replacing the filter element)"):"";
+ if(aStatus && DialogManager::Default()->requestAlertMessage(tr("Please confirm if cleaning and disinfection are required ?") + filterMessage, DialogButtonMode::OkAndCancel, tr("Confirm cleaning")) == QDialog::Rejected)
{
mCleanButton->setChecked(!aStatus);
return;
@@ -279,6 +284,7 @@ void ScanFormWidget::initCommandWidget(QHBoxLayout *layout)
switch (mWaterProcessMode)
{
case WaterFloodMode:
+ FilterUsageCalculator::addFilterUsageByWaterFloodMode();
message = tr("Waterflood finished.");
DialogManager::Default()->requestAlertMessage(message, DialogButtonMode::OkOnly, tr("Confirm Water Injection"));
break;
@@ -392,6 +398,7 @@ void ScanFormWidget::processWaterCleanResult()
switch (mWaterCleanStep)
{
case FirstWaterClean:
+ FilterUsageCalculator::addFilterUsageByCleanMode();
message = tr("Please click the confirm button for cleaning after disinfection.");
if(DialogManager::Default()->requestAlertMessage(message, DialogButtonMode::OkAndCancel, tr("Confirm cleaning")) == QDialog::Accepted)
{
@@ -399,6 +406,7 @@ void ScanFormWidget::processWaterCleanResult()
}
break;
case SecondWaterClean:
+ FilterUsageCalculator::addFilterUsageByCleanMode();
message = tr("cleanning finished.");
DialogManager::Default()->requestAlertMessage(message, DialogButtonMode::OkOnly, tr("Confirm cleaning"));
break;
diff --git a/src/forms/settings/GeneralForm.cpp b/src/forms/settings/GeneralForm.cpp
index 9b0c3af..a707847 100644
--- a/src/forms/settings/GeneralForm.cpp
+++ b/src/forms/settings/GeneralForm.cpp
@@ -23,6 +23,7 @@
#include "utilities/GetLockScreenTimeHelper.h"
#include "utilities/GetProtocalHelper.h"
#include "utilities/WorklistFilterHelper.h"
+#include "utilities/FilterUsageCalculator.h"
GeneralForm::GeneralForm(QWidget* aParent)
: QWidget(aParent)
@@ -119,6 +120,19 @@ GeneralForm::GeneralForm(QWidget* aParent)
worklistFilterDateHeaderLayout->addWidget(worklistFilterDateButton);
worklistFilterDateHeaderLayout->addSpacerItem(new QSpacerItem(1000, 20, QSizePolicy::Fixed));
+ //Filter Usage Reset
+ QWidget* filterUsageHeader = new QWidget(this);
+ mLayout->addWidget(filterUsageHeader);
+ QHBoxLayout* filterUsageLayout = new QHBoxLayout(filterUsageHeader);
+ QLabel* filterUsageLabel = new QLabel(tr("Filter Usage Reset"), this);
+ filterUsageLayout->addWidget(filterUsageLabel);
+ filterUsageLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding));
+ QPushButton* filterUsageResetButton = new QPushButton(filterUsageHeader);
+ filterUsageResetButton->setFixedWidth(180);
+ filterUsageResetButton->setText(tr("Reset"));
+ filterUsageLayout->addWidget(filterUsageResetButton);
+ filterUsageLayout->addSpacerItem(new QSpacerItem(1000, 20, QSizePolicy::Fixed));
+
//Complete Notify
QWidget* scanCompleteHeader = new QWidget(this);
mLayout->addWidget(scanCompleteHeader);
@@ -304,6 +318,14 @@ GeneralForm::GeneralForm(QWidget* aParent)
}
});
+ connect(filterUsageResetButton, &QPushButton::clicked, []()
+ {
+ if (DialogManager::Default()->requestAlertMessage(tr("Please confirm if the filter usage reset is required?"),DialogButtonMode::OkAndCancel) == QDialog::Accepted)
+ {
+ FilterUsageCalculator::clearFilterUsage();
+ }
+ });
+
connect(scanCompleteButton, &ImageSwitch::clicked, [=]()
{
bool isOpen = scanCompleteButton->getChecked();
diff --git a/src/json/jsonobject.cpp b/src/json/jsonobject.cpp
index f08eccc..b82a284 100644
--- a/src/json/jsonobject.cpp
+++ b/src/json/jsonobject.cpp
@@ -14,6 +14,7 @@ namespace
const char* strProductFileName = "./cfgs/usct-product.json";
const char* strProductFileNameDefault = "./cfgs/usct-product";
const QString DEFAULT_RECON_TRANSFER_PATH = "/home/eq9/Tools/ReconTest/storage/Raw";
+ const int DEFAULT_MAXIMUM_FILTER_USAGE = 100;
}
JsonObject::JsonObject()
@@ -74,6 +75,9 @@ void JsonObject::init()
mOperationLogExpireDays = QString(getJsonString("operatorlog", "expire")).toInt();
mPatientListExpireDays = QString(getJsonString("patientlist", "expire")).toInt();
mScanListExpireDays = QString(getJsonString("reconlist", "expire")).toInt();
+ mFilterUsage = QString(getJsonString("filter","usage")).toInt();
+ int maximumFilterUsage = QString(getJsonString("filter","maximumusage")).toInt();
+ mMaximumFilterUsage = maximumFilterUsage <=0? DEFAULT_MAXIMUM_FILTER_USAGE : maximumFilterUsage;
mWorklistHost.ae = QString(getJsonString("worklist", "ae"));
mWorklistHost.ip = QString(getJsonString("worklist", "ip"));
@@ -695,3 +699,20 @@ void JsonObject::setWorklistFilterDate(const QString& aDate)
mWorklistFilterDays = aDate;
setJsonString("worklistfilter","date", aDate.toStdString().c_str());
}
+
+int JsonObject::getFilterUsage()
+{
+ return mFilterUsage;
+}
+
+void JsonObject::setFilterUsage(int aUsage)
+{
+ mFilterUsage = aUsage;
+ setJsonString("filter", "usage", QString::number(mFilterUsage).toStdString().c_str());
+}
+
+int JsonObject::getFilterMaximumUsage()
+{
+ return mMaximumFilterUsage;
+}
+
diff --git a/src/json/jsonobject.h b/src/json/jsonobject.h
index eab439d..5a3c7e4 100644
--- a/src/json/jsonobject.h
+++ b/src/json/jsonobject.h
@@ -135,6 +135,10 @@ public:
QString getWorklistFilterDate();
void setWorklistFilterDate(const QString& aDate);
+ int getFilterUsage();
+ void setFilterUsage(int aUsage);
+ int getFilterMaximumUsage();
+
private:
void setJsonString(const char* catergory, const char* stringName, const char* stringValue, bool save = true);
@@ -182,6 +186,9 @@ private:
int mOperationLogExpireDays;
int mPatientListExpireDays;
int mScanListExpireDays;
+ int mFilterUsage;
+ int mMaximumFilterUsage;
+
host mWorklistHost;
host mPacsHost;
diff --git a/src/translations/en_US.ts b/src/translations/en_US.ts
index 988ebfe..f21845f 100644
--- a/src/translations/en_US.ts
+++ b/src/translations/en_US.ts
@@ -654,6 +654,18 @@ After lying down, click the confirm buttonto start scanning on the next side.Worklist Date Filter
+
+ Filter Usage Reset
+
+
+
+ Reset
+
+
+
+ Please confirm if the filter usage reset is required?
+
+
GetAdminPsw
@@ -1600,10 +1612,6 @@ The emergency button has been pushed. Please reset it before other operations.
Please confirm if drainage is required ?
-
- Please confirm if cleaning and disinfection are required. ?
-
-
Confirm cleaning
@@ -1660,6 +1668,15 @@ The emergency button has been pushed. Please reset it before other operations.
Drainage finished. Please do the disinfection in next step.
+
+
+(The filter element has expired, please pay attention to replacing the filter element)
+
+
+
+ Please confirm if cleaning and disinfection are required ?
+
+
ScanSearchCriteriaForm
diff --git a/src/translations/zh_CN.ts b/src/translations/zh_CN.ts
index ed9930e..9ac6430 100644
--- a/src/translations/zh_CN.ts
+++ b/src/translations/zh_CN.ts
@@ -468,89 +468,89 @@
DeviceManager
-
-
-
-
+
+
+
+
DMS connection error
DMS失去连接
-
-
+
+
progress:%1%
进度:%1%
-
+
Patient can leave.
progress:%1%
检查对象可以起身
进度:%1%
-
+
Data quality assessment in progress
progress:99%
数据质量判断中
进度:99%
-
-
-
+
+
+
Initialize Failed.
初始化失败
-
+
Fail to connect to DB!Reboot device to try!
数据库连接失败,请重启设备后再试!
-
+
Device is not ready, start scan operation failed!
设备状态错误,无法开始检查流程
-
+
Device is not ready, start empty scan operation failed!
设备状态错误,无法开始空水扫查
-
+
Scan completed! Please prepare for the next scan.
After lying down, click the confirm buttonto start scanning on the next side.
扫查结束,请准备下一侧扫查。
请在趴好后再点击确认按钮!
-
+
Scan completed!
扫查结束
-
+
Error:
错误:
-
+
Start scan failed. Reason:time out.
扫查启动失败,原因:超时
-
+
Start scan failed. Reason:%1
扫查启动失败,原因:%1
-
+
Start CE Scan Failed.
CE扫查启动失败
-
+
Shut down failed, please push emergency button to shutdown.
关机失败,请按紧急按钮进行关机。
@@ -559,55 +559,55 @@ After lying down, click the confirm buttonto start scanning on the next side.扫查数据上传失败
-
+
Create empty scan data failed
空水数据新增失败
-
+
Create scan data failed
扫查数据新增失败
-
+
Recon disconnected.
重建服务器已断开连接
-
-
+
+
Open pump failed.
排水阀打开失败
-
-
+
+
Water injection failed.
注水启动失败
-
-
+
+
Cleaning failed.
清洁启动失败
-
+
Recon error, can't start scan process
重建服务器错误,无法开始检查流程
-
+
Start auto locate failed
自动化定位启动失败
-
+
The data quality is low, please restart the data scan.
扫查数据质量较低,请重新开始检查流程
-
+
Device reset failed, please contact maintenance person
设备复位失败,请联系维修人员
@@ -872,62 +872,72 @@ After lying down, click the confirm buttonto start scanning on the next side.
GeneralForm
-
-
+
+
Language
语言
-
+
Institution Name
机构名称
-
-
-
+
+
+
Institution Addr
机构地址
-
-
+
+
Lock Screen
锁屏时间
-
-
+
+
Scan Protocol
默认检查协议
-
-
+
+
Worklist Modality Filter
Worklist模态过滤器
-
-
+
+
Worklist Date Filter
Worklist时间过滤器
-
-
+
+ Filter Usage Reset
+ 重置滤芯使用量
+
+
+
+ Reset
+ 重置
+
+
+
+
Anonymous Mode
匿名模式
-
-
+
+
Screen Saver
屏保
-
-
+
+
Complete Notify
检查结束确认
@@ -936,8 +946,8 @@ After lying down, click the confirm buttonto start scanning on the next side.Worklist过滤器
-
-
+
+
Disk Storage
磁盘存储
@@ -946,22 +956,27 @@ After lying down, click the confirm buttonto start scanning on the next side.中文
-
+
Used: %1G
-
+
Total: %1G
-
+
Get disk used size fail!
磁盘使用空间获取失败!
-
+
+ Please confirm if the filter usage reset is required?
+ 请确认是否重置滤芯用量?
+
+
+
Get disk total size fail!
磁盘总空间获取失败!
@@ -2247,7 +2262,7 @@ The emergency button has been pushed. Please reset it before other operations.
PACS设置成功
-
+
Can't connect to Recon server
@@ -2375,39 +2390,39 @@ The emergency button has been pushed. Please reset it before other operations.
空扫
-
-
-
-
-
-
+
+
+
+
+
+
Drainage
排水
-
-
+
+
Account
账户
-
+
Drainage time out
排水运行超时
-
+
Waterflood time out
注水运行超时
-
+
Clean time out
清洁运行超时
-
-
+
+
ShutDown
关机
@@ -2416,155 +2431,163 @@ The emergency button has been pushed. Please reset it before other operations.
录入检查对象
-
-
+
+
Start Scan
开始检查流程
-
-
-
-
+
+
+
+
Waterflood
注水
-
-
-
-
+
+
+
+
Clean
清洁
-
+
Please confirm if water injection is required ?
请确认是否进行注水?
-
-
+
+
Confirm Water Injection
注水确认
-
-
+
+
Waterflooding
注水中
-
-
+
+
Confirm Drainage
排水确认
-
+
Please confirm if drainage is required ?
请确认是否进行排水?
-
-
+
+
Drainaging
排水中
-
- Please confirm if cleaning and disinfection are required. ?
- 请确认是否进行清洁消毒?
-
-
-
-
+
+
Confirm cleaning
清洁确认
-
-
-
-
+
+
+
+
Cleaning
清洁中
-
+
exit failed.
退出失败
-
+
Waterflood finished.
注水完成
-
+
Please click the confirm button for cleaning after disinfection.
请消毒完成后,再点击确认按钮进行清洁
-
+
Waterflood failed.
注水失败
-
+
+
+
+(The filter element has expired, please pay attention to replacing the filter element)
+
+(滤芯到期,请注意更换滤芯)
+
+
+
+ Please confirm if cleaning and disinfection are required ?
+ 请确认是否进行清洁消毒?
+
+
+
Drainage finished. Please do the disinfection in next step.
排水完成,请下一步进行清洁消毒
-
+
Drainage failed.
排水失败
-
+
Clean failed.
清洁失败
-
+
Shut down now ?
是否需要进行设备关机操作,请确认?
-
+
Shut Down
关机
-
-
-
+
+
+
Please confirm checking patient information to start the process
请确定检查对象信息开始流程
-
+
Data scanning, please keep the current position and don't move.
数据扫查中,请检查对象保持当前姿势,不要移动
-
+
Data exporting, patient can leave the holder
数据导出中,检查对象可以离开检查仓
-
+
cleanning finished.
清洁完成
-
+
Left side scan initiated, auto positioning in progress.
左侧扫查启动,自动定位中
-
+
Right side scan initiated, auto positioning in progress.
右侧扫查启动,自动定位中
@@ -3234,29 +3257,29 @@ parameters
WarningMessageWidget
-
+
System is working properly.
-
+
No message.
-
-
+
+
System Status
-
-
+
+
System Notifications
-
+
Clear
diff --git a/src/utilities/FilterUsageCalculator.cpp b/src/utilities/FilterUsageCalculator.cpp
new file mode 100644
index 0000000..8cc0ee6
--- /dev/null
+++ b/src/utilities/FilterUsageCalculator.cpp
@@ -0,0 +1,32 @@
+#include "FilterUsageCalculator.h"
+
+#include "json/jsonobject.h"
+
+void FilterUsageCalculator::clearFilterUsage()
+{
+ JsonObject::Instance()->setFilterUsage(0);
+}
+
+void FilterUsageCalculator::addFilterUsageByCleanMode()
+{
+ int filterUsage = JsonObject::Instance()->getFilterUsage();
+ filterUsage +=1;
+ JsonObject::Instance()->setFilterUsage(filterUsage);
+}
+
+void FilterUsageCalculator::addFilterUsageByWaterFloodMode()
+{
+ int filterUsage = JsonObject::Instance()->getFilterUsage();
+ filterUsage +=2;
+ JsonObject::Instance()->setFilterUsage(filterUsage);
+}
+
+int FilterUsageCalculator::getCurrentFilterUsage()
+{
+ return JsonObject::Instance()->getFilterUsage();
+}
+
+int FilterUsageCalculator::getMaximumFilterUsage()
+{
+ return JsonObject::Instance()->getFilterMaximumUsage();
+}
diff --git a/src/utilities/FilterUsageCalculator.h b/src/utilities/FilterUsageCalculator.h
new file mode 100644
index 0000000..bb565ca
--- /dev/null
+++ b/src/utilities/FilterUsageCalculator.h
@@ -0,0 +1,16 @@
+#ifndef FILTERUSAGECALCULATOR_H
+#define FILTERUSAGECALCULATOR_H
+
+
+class FilterUsageCalculator
+{
+public:
+ FilterUsageCalculator() = delete;
+ static void clearFilterUsage();
+ static void addFilterUsageByCleanMode();
+ static void addFilterUsageByWaterFloodMode();
+ static int getCurrentFilterUsage();
+ static int getMaximumFilterUsage();
+};
+
+#endif // FILTERUSAGECALCULATOR_H