From 7ef3b312e8b8a39660a84e6e610e1199c404f98d Mon Sep 17 00:00:00 2001 From: sunwen Date: Mon, 29 Apr 2024 17:58:17 +0800 Subject: [PATCH] Refactory ScanFormWidget. --- src/dialogs/GetWorkListDialog.cpp | 1 + src/forms/scan/PatientInformationForm.cpp | 49 +- src/forms/scan/PatientInformationForm.h | 7 +- src/forms/scan/PatientInformationForm.ui | 144 ++-- src/forms/scan/ScanFormWidget.cpp | 428 +++++------ src/forms/scan/ScanFormWidget.h | 24 +- src/forms/select/PatientInformation.h | 7 +- src/forms/select/SelectFormWidget.cpp | 4 +- src/stylesheet/Dark2.css | 10 +- src/translations/en_US.qm | Bin 16 -> 1012 bytes src/translations/en_US.ts | 369 +++++----- src/translations/zh_CN.qm | Bin 9692 -> 18078 bytes src/translations/zh_CN.ts | 861 +++++++++++----------- 13 files changed, 972 insertions(+), 932 deletions(-) diff --git a/src/dialogs/GetWorkListDialog.cpp b/src/dialogs/GetWorkListDialog.cpp index 2610e81..c64bb94 100644 --- a/src/dialogs/GetWorkListDialog.cpp +++ b/src/dialogs/GetWorkListDialog.cpp @@ -93,6 +93,7 @@ void GetWorkListDialog::initializeContentWidgets() mPatientIDText->setText(tr("Patient ID")); contentLayout->addWidget(mPatientIDText); contentLayout->addWidget(mPatientId); + mEditEndLine->setFixedHeight(3); mEditEndLine->setObjectName("endline"); contentLayout->addWidget(mEditEndLine); mPatientIDText->setVisible(false); diff --git a/src/forms/scan/PatientInformationForm.cpp b/src/forms/scan/PatientInformationForm.cpp index 3ad5a10..c675100 100644 --- a/src/forms/scan/PatientInformationForm.cpp +++ b/src/forms/scan/PatientInformationForm.cpp @@ -23,46 +23,35 @@ PatientInformationForm::~PatientInformationForm() delete mJsonStr; } -void PatientInformationForm::setPatientInformation(PatientInformation* information) { - if(information){ - mUI->lbl_ID->setText(information->ID); - mUI->lbl_Date->setText(information->BirthDate); - mUI->lbl_Name->setText(information->Name); - mUI->lbl_Sex->setText(information->Sex); - mUI->lbl_Acc->setText(information->AccessionNumber); +void PatientInformationForm::setPatientInformation(PatientInformationPointer information) { + if(information) + { + mUI->mPatientID->setText(information->ID); + mUI->mPatientBirthday->setText(information->BirthDate); + mUI->mPatientName->setText(information->Name); + mUI->mPatientGender->setText(information->Sex); + mUI->mPaitenAccessionNumber->setText(information->AccessionNumber); } - else{ - mUI->lbl_ID->clear(); - mUI->lbl_Date->clear(); - mUI->lbl_Name->clear(); - mUI->lbl_Sex->clear(); - mUI->lbl_Acc->clear(); + else + { + mUI->mPatientID->clear(); + mUI->mPatientBirthday->clear(); + mUI->mPatientName->clear(); + mUI->mPatientGender->clear(); + mUI->mPaitenAccessionNumber->clear(); } - if (mInfo){ + if (mInfo) + { mInfo->deleteLater(); } mInfo = information; } -PatientInformation* PatientInformationForm::getPatientInformation() +PatientInformationPointer PatientInformationForm::getPatientInformation() { return mInfo->Copy(); } -void PatientInformationForm::setProtocol(int type) { - mCurrentProtocol = type; - switch (type) - { - case 0: - mUI->lbl_Protocol->setText(tr("LEFT ONLY")); - break; - case 1: - default: - mUI->lbl_Protocol->setText(tr("RIGHT ONLY")); - break; - } -} - int PatientInformationForm::getProtocol() { return mCurrentProtocol; @@ -70,7 +59,7 @@ int PatientInformationForm::getProtocol() QString PatientInformationForm::getPatientID() { - return mUI->lbl_ID->text(); + return mUI->mPatientID->text(); } const char* PatientInformationForm::getCurrentPatientJsonString(bool empty) diff --git a/src/forms/scan/PatientInformationForm.h b/src/forms/scan/PatientInformationForm.h index 076eefd..743514a 100644 --- a/src/forms/scan/PatientInformationForm.h +++ b/src/forms/scan/PatientInformationForm.h @@ -14,9 +14,8 @@ class PatientInformationForm : public QWidget public: explicit PatientInformationForm(QWidget *parent = nullptr); ~PatientInformationForm() override; - void setPatientInformation(PatientInformation* information); - PatientInformation* getPatientInformation(); - void setProtocol(int type); + void setPatientInformation(PatientInformationPointer information); + PatientInformationPointer getPatientInformation(); int getProtocol(); const char * getCurrentPatientJsonString(bool emptyScan); @@ -24,7 +23,7 @@ public: private: Ui::PatientInformationForm *mUI; - PatientInformation* mInfo = nullptr; + PatientInformationPointer mInfo; int mCurrentProtocol = 0; char * mJsonStr = nullptr; }; diff --git a/src/forms/scan/PatientInformationForm.ui b/src/forms/scan/PatientInformationForm.ui index d797a23..f8e1d12 100644 --- a/src/forms/scan/PatientInformationForm.ui +++ b/src/forms/scan/PatientInformationForm.ui @@ -46,44 +46,108 @@ + + Qt::LeftToRight + + + background:#0078d8 + - Patient Information + Current Patient + + + Qt::AlignCenter - - - <html><head/><body><p>PatientID:</p></body></html> - - - - - - - Someone Somebody - - - - - - - 2021/11/11 - - - - - - - Female - - - - - - - Acc# 27812398 - + + + + + + Patient Name: + + + + + + + + + + + + + + + + + + + + + Patient ID: + + + + + + + Patient Birthday: + + + + + + + + + + + + + + Patient Gender: + + + + + + + + + + + + + + Patient AccessionNum: + + + + + + + + + + + + + + Scan Protocol: + + + + + + + + + + + @@ -100,20 +164,6 @@ - - - - Current Protocol - - - - - - - LEFT ONLY - - - diff --git a/src/forms/scan/ScanFormWidget.cpp b/src/forms/scan/ScanFormWidget.cpp index 6d51266..4b00c29 100644 --- a/src/forms/scan/ScanFormWidget.cpp +++ b/src/forms/scan/ScanFormWidget.cpp @@ -32,196 +32,75 @@ namespace{ } ScanFormWidget::ScanFormWidget(QWidget* parent) -: TabFormWidget(parent) -, mPatInf(new PatientInformationForm(this)) -, mLblProtocol(new QLabel(this)) -, mBtnLeft(new QToolButton(this)) -, mBtnRight(new QToolButton(this)) -, mBtnEScan(new QToolButton(this)) -, mBtnPreview(new QToolButton(this)) -, mBtnStop(new QToolButton(this)) -, mBtnScan(new QToolButton(this)) -, mBtnDrainage(new QToolButton(this)) -, mViewer(new QLabel(this)) -, mLblPreview(new QLabel(this)) -, mLblE(new QLabel(this)) -, mLblParams(new QLabel(this)) -, mLblE2(new QLabel(this)) -, mDrainageTimer(new QTimer(this)) + : TabFormWidget(parent) + , mPatInf(new PatientInformationForm(this)) + , mAccountButton(new QToolButton(this)) + , mShutdownButton(new QToolButton(this)) + , mWorklistButton(new QToolButton(this)) + , mStartScanButton(new QToolButton(this)) + , mDrainageButton(new QToolButton(this)) + , mXYLabel(new QLabel(this)) + , mZLabel(new QLabel(this)) + , mScanProcessLabel(new QLabel(this)) + , mDrainageTimer(new QTimer(this)) { - auto layout = new QHBoxLayout(ui->commandWidget); - initProtocolUI(layout); - layout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding)); - addVerticalLine(layout); - initScanControlBar(layout); + auto commandlayout = new QHBoxLayout(ui->commandWidget); + initCommandWidget(commandlayout); + + + //initScanControlBar(commandlayout); initScanContent(); initEvents(); mDrainageTimer->setSingleShot(true); connect(mDrainageTimer, &QTimer::timeout, this, [this]() { - mBtnDrainage->click(); + mDrainageButton->click(); }); } -void ScanFormWidget::initProtocolUI(QHBoxLayout *layout) { - mLblProtocol->setText(tr("Protocol")); - mLblProtocol->setAlignment(Qt::AlignTop); - mLblProtocol->setObjectName("protocolPanelTitle"); - layout->addWidget(mLblProtocol); +void ScanFormWidget::initCommandWidget(QHBoxLayout *layout) +{ + bool anonymousMode = JsonObject::Instance()->getAnonymousMode(); + mAccountButton->setObjectName("btnAccount"); + mAccountButton->setText(tr("Account")); + layout->addWidget(mAccountButton); + + mShutdownButton->setObjectName("btnShutDown"); + mShutdownButton->setText(tr("ShutDown")); + layout->addWidget(mShutdownButton); + + mWorklistButton->setObjectName("btnWorklist"); + mWorklistButton->setText(tr("Worklist")); + mWorklistButton->setEnabled(!anonymousMode); + layout->addWidget(mWorklistButton); + + mStartScanButton->setObjectName("btnScan"); + mStartScanButton->setText(tr("Start Scan")); + layout->addWidget(mStartScanButton); + + layout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding)); addVerticalLine(layout); - mBtnLeft->setObjectName("btnLeft"); - mBtnRight->setObjectName("btnRight"); - mBtnLeft->setText(tr("LEFT")); - mBtnRight->setText(tr("RIGHT")); - layout->addWidget(mBtnLeft); - layout->addWidget(mBtnRight); - auto group = new QButtonGroup(ui->commandWidget); - mBtnLeft->setCheckable(true); - mBtnLeft->setChecked(true); - mBtnRight->setCheckable(true); - group->addButton(mBtnRight, 1); - group->addButton(mBtnLeft, 0); - connect(group, SIGNAL(buttonClicked(int)), this, SLOT(protocolChanged(int))); -} + mDrainageButton->setObjectName("btnDrainage"); + mDrainageButton->setCheckable(true); + mDrainageButton->setText(tr("Drainage")); + layout->addWidget(mDrainageButton); -void ScanFormWidget::initScanContent() { - auto contentLayout = new QHBoxLayout(); - ui->contentWidget->setLayout(contentLayout); - - contentLayout->addWidget(mPatInf); - auto paramWidget = new QWidget(this); - auto broadcastWidget = new QWidget(this); - broadcastWidget->setObjectName("broadcastWidget"); - mViewer->setObjectName("viewer"); - mViewer->setFixedSize(800, 800); - mViewer->setText(""); - auto viewerLayout = new QHBoxLayout(mViewer); - broadcastWidget->setLayout(viewerLayout); - viewerLayout->addWidget(mViewer); - contentLayout->addWidget(broadcastWidget); - paramWidget->setObjectName("paramWidget"); - auto paramLayout = new QVBoxLayout(paramWidget); - mLblPreview->setText(tr("Preview Parameters")); - mLblPreview->setObjectName("parameterTitle"); - paramLayout->addWidget(mLblPreview); - mLblE->setWordWrap(true); - mLblE->setObjectName("placeholder"); - mLblE->setText(tr("some settings\n\nparameters\n")); - paramLayout->addWidget(mLblE); - auto lbl_end = new QLabel(this); - lbl_end->setObjectName("endSpaceLine"); - paramLayout->addWidget(lbl_end); - mLblParams->setText(tr("Scan Parameters")); - mLblParams->setObjectName("parameterTitle"); - paramLayout->addWidget(mLblParams); - mLblE2->setWordWrap(true); - mLblE2->setObjectName("placeholder"); - mLblE2->setText(tr("some settings\n\nparameters\n")); - paramLayout->addWidget(mLblE2); - auto lbl_end2 = new QLabel(this); - lbl_end2->setObjectName("endSpaceLine"); - paramLayout->addWidget(lbl_end2); - paramLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding)); - contentLayout->addWidget(paramWidget); -} - -void ScanFormWidget::initScanControlBar(QHBoxLayout *layout){ - mBtnEScan->setObjectName("btnRefresh"); - mBtnPreview->setObjectName("btnPreview"); - mBtnStop->setObjectName("btnStop"); - mBtnScan->setObjectName("btnScan"); - mBtnDrainage->setObjectName("btnDrainage"); - mBtnDrainage->setCheckable(true); - - mBtnEScan->setText(tr("Empty Scan")); - mBtnPreview->setText(tr("Preview")); - mBtnStop->setText(tr("Stop")); - mBtnScan->setText(tr("Scan")); - mBtnDrainage->setText(tr("Drainage")); - - mBtnScan->setEnabled(false); - mBtnEScan->setEnabled(false); - mBtnPreview->setEnabled(false); - mBtnStop->setEnabled(false); - - layout->addWidget(mBtnEScan); - layout->addWidget(mBtnPreview); - layout->addWidget(mBtnStop); - layout->addWidget(mBtnScan); - layout->addWidget(mBtnDrainage); - - connect(mBtnEScan, &QToolButton::clicked, [=]() { - int result = DialogManager::Default()->requestAlertMessage(tr("Please make sure the holder is only contain water!"),DialogButtonMode::OkAndCancel,tr("Confirm Scan")); - if (result != QDialog::Accepted)return; - QString patientInf(mPatInf->getCurrentPatientJsonString(true)); - LOG_USER_OPERATION("Start Empty Scan") - EventCenter::Default()->triggerEvent(RequestEmptyScan, nullptr, (QObject*)(&patientInf)); - }); - connect(mBtnPreview, &QToolButton::clicked, [=]() { - LOG_USER_OPERATION(QString("Start Preview, ID: %1").arg(mPatInf->getPatientID())) - EventCenter::Default()->triggerEvent(RequestPreviewScan, nullptr, nullptr); - - }); - connect(DeviceManager::Default(), &DeviceManager::startPreviewScanResult, [this](bool aIsSucessful) + connect(mDrainageButton, &QToolButton::clicked, [=](bool aSatus) { - if(!aIsSucessful) - { - setPreviewing(false); - } - }); - connect(DeviceManager::Default(), &DeviceManager::startPumpControlResult, [this](bool aIsSucessful) - { - mBtnDrainage->setEnabled(true); - if(!aIsSucessful) - { - mDrainageTimer->stop(); - bool isChecked = mBtnDrainage->isChecked(); - mBtnDrainage->setChecked(!isChecked); - if(isChecked) - { - mBtnDrainage->setText(tr("Drainage")); - } - else - { - mBtnDrainage->setText(tr("Drainaging")); - } - } - }); - - connect(mBtnScan, &QToolButton::clicked, [=]() { - if(JsonObject::Instance()->getScanConfirm()) - { - int ret = DialogManager::Default()->requestPatientConfirm(mPatInf->getPatientInformation(),mPatInf->getProtocol()); - if (ret != QDialog::Accepted) return; - } - QString patientInf(mPatInf->getCurrentPatientJsonString(false)); - LOG_USER_OPERATION(QString("Start Scan, ID: %1").arg(mPatInf->getPatientID())) - if (!DeviceManager::Default()->hasValidEmptyScan()){ - QString msg(tr("No refresh data exists, please do Refresh operation first.")); - EventCenter::Default()->triggerEvent(DeviceErrorRaise, nullptr, (QObject*)(&msg)); - return; - } - EventCenter::Default()->triggerEvent(RequestPatientScan, nullptr, (QObject*)(&patientInf)); - }); - connect(mBtnStop, &QToolButton::clicked, [=]() { - LOG_USER_OPERATION("Stop Preview") - EventCenter::Default()->triggerEvent(RequestPreviewStop, nullptr, nullptr); - }); - connect(mBtnDrainage, &QToolButton::clicked, [=](bool aSatus) { //Drainage if(aSatus && DialogManager::Default()->requestAlertMessage(tr("Make sure to open the drain valve ?"), DialogButtonMode::OkAndCancel, tr("Confirm Drainage")) == QDialog::Rejected) { - mBtnDrainage->setChecked(!aSatus); + mDrainageButton->setChecked(!aSatus); return; } - mBtnDrainage->setEnabled(false); + mDrainageButton->setEnabled(false); if(aSatus == true) { mDrainageTimer->start(DRAINAGE_TIME); QString code = "1"; - mBtnDrainage->setText(tr("Drainaging")); + mDrainageButton->setText(tr("Drainaging")); EventCenter::Default()->triggerEvent(RequestDrainage, nullptr, (QObject*)(&code)); LOG_USER_OPERATION("Perform Drainage"); } @@ -229,30 +108,159 @@ void ScanFormWidget::initScanControlBar(QHBoxLayout *layout){ { mDrainageTimer->stop(); QString code = "0"; - mBtnDrainage->setText(tr("Drainage")); + mDrainageButton->setText(tr("Drainage")); EventCenter::Default()->triggerEvent(RequestDrainage, nullptr, (QObject*)(&code)); LOG_USER_OPERATION("Stop Drainage"); } }); + + connect(DeviceManager::Default(), &DeviceManager::startPumpControlResult, [this](bool aIsSucessful) + { + mDrainageButton->setEnabled(true); + if(!aIsSucessful) + { + mDrainageTimer->stop(); + bool isChecked = mDrainageButton->isChecked(); + mDrainageButton->setChecked(!isChecked); + if(isChecked) + { + mDrainageButton->setText(tr("Drainage")); + } + else + { + mDrainageButton->setText(tr("Drainaging")); + } + } + }); + + connect(mAccountButton, &QToolButton::clicked, DialogManager::Default(),&DialogManager::requestEditSelfAccount); + + connect(mShutdownButton, &QToolButton::clicked, []() + { + 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); + } + }); + + connect(mWorklistButton, &QToolButton::clicked, [&]() + { + DialogManager::Default()->requestGetWorkList(); + }); + + connect(EventCenter::Default(), &EventCenter::AnonymousModeChanged, this, &ScanFormWidget::updateDataByAnonymousMode); + + +// auto group = new QButtonGroup(ui->commandWidget); +// mBtnLeft->setCheckable(true); +// mBtnLeft->setChecked(true); +// mBtnRight->setCheckable(true); +// group->addButton(mBtnRight, 1); +// group->addButton(mBtnLeft, 0); +// connect(group, SIGNAL(buttonClicked(int)), this, SLOT(protocolChanged(int))); } -void ScanFormWidget::protocolChanged(int type) { - mPatInf->setProtocol(type); +void ScanFormWidget::initScanContent() +{ + + QHBoxLayout* contentLayout = new QHBoxLayout(ui->contentWidget); + contentLayout->addWidget(mPatInf); + + QWidget* scanProcessWidget = new QWidget(this); + scanProcessWidget->setObjectName("ScanProcessWidget"); + contentLayout->addWidget(scanProcessWidget); + + QVBoxLayout* scanProcessLayout = new QVBoxLayout(scanProcessWidget); + mScanProcessLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + mScanProcessLabel->setAlignment(Qt::AlignCenter); + mScanProcessLabel->setObjectName("ScanProcessInformation"); + mScanProcessLabel->setText(tr("Please confirm checking patient information to start the process")); + scanProcessLayout->addWidget(mScanProcessLabel); + QWidget* displayWidget = new QWidget(this); + scanProcessLayout->addWidget(displayWidget); + + + + 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* zWidget = new QWidget(this); + zWidget->setObjectName("broadcastWidget"); + QHBoxLayout* zLayout = new QHBoxLayout(zWidget); + zLayout->addWidget(mZLabel); + displayLayout->addWidget(zWidget); + + +} + +void ScanFormWidget::initScanControlBar(QHBoxLayout *layout) +{ +// connect(mBtnEScan, &QToolButton::clicked, [=]() { +// int result = DialogManager::Default()->requestAlertMessage(tr("Please make sure the holder is only contain water!"),DialogButtonMode::OkAndCancel,tr("Confirm Scan")); +// if (result != QDialog::Accepted)return; +// QString patientInf(mPatInf->getCurrentPatientJsonString(true)); +// LOG_USER_OPERATION("Start Empty Scan") +// EventCenter::Default()->triggerEvent(RequestEmptyScan, nullptr, (QObject*)(&patientInf)); +// }); +// connect(mBtnPreview, &QToolButton::clicked, [=]() { +// LOG_USER_OPERATION(QString("Start Preview, ID: %1").arg(mPatInf->getPatientID())) +// EventCenter::Default()->triggerEvent(RequestPreviewScan, nullptr, nullptr); + +// }); + connect(DeviceManager::Default(), &DeviceManager::startPreviewScanResult, [this](bool aIsSucessful) + { + if(!aIsSucessful) + { + setPreviewing(false); + } + }); + + +// connect(mBtnScan, &QToolButton::clicked, [=]() { +// if(JsonObject::Instance()->getScanConfirm()) +// { +// int ret = DialogManager::Default()->requestPatientConfirm(mPatInf->getPatientInformation(),mPatInf->getProtocol()); +// if (ret != QDialog::Accepted) return; +// } +// QString patientInf(mPatInf->getCurrentPatientJsonString(false)); +// LOG_USER_OPERATION(QString("Start Scan, ID: %1").arg(mPatInf->getPatientID())) +// if (!DeviceManager::Default()->hasValidEmptyScan()){ +// QString msg(tr("No refresh data exists, please do Refresh operation first.")); +// EventCenter::Default()->triggerEvent(DeviceErrorRaise, nullptr, (QObject*)(&msg)); +// return; +// } +// EventCenter::Default()->triggerEvent(RequestPatientScan, nullptr, (QObject*)(&patientInf)); +// }); +// connect(mBtnStop, &QToolButton::clicked, [=]() { +// LOG_USER_OPERATION("Stop Preview") +// EventCenter::Default()->triggerEvent(RequestPreviewStop, nullptr, nullptr); +// }); + +} + +void ScanFormWidget::protocolChanged(int type) +{ LOG_USER_OPERATION(QString("Select Laterality %1").arg(type == 0 ? "Left" : "Right")); } -void ScanFormWidget::setPreviewing(bool val) { - mViewer->setVisible(val); - mBtnPreview->setCheckable(val); - mBtnPreview->setChecked(val); - mBtnPreview->setEnabled(!val); - mBtnEScan->setEnabled(!val); - mBtnScan->setEnabled(!val); - mBtnDrainage->setEnabled(!val); +void ScanFormWidget::setPreviewing(bool val) +{ +// mBtnPreview->setCheckable(val); +// mBtnPreview->setChecked(val); +// mBtnPreview->setEnabled(!val); +// mBtnEScan->setEnabled(!val); +// mBtnScan->setEnabled(!val); + mDrainageButton->setEnabled(!val); } -void ScanFormWidget::renderLoading() { +void ScanFormWidget::renderLoading() +{ setPreviewing(true); uchar c_data[PREVIEW_ROW][PREVIEW_COL]; @@ -260,7 +268,6 @@ void ScanFormWidget::renderLoading() { memset(data_ptr, 0, PREVIEW_COL); } QImage img(c_data[0], PREVIEW_COL, PREVIEW_ROW, QImage::Format_Grayscale8); - mViewer->setFixedSize(800, 800); QPixmap pic = QPixmap::fromImage(img).scaledToHeight(800, Qt::SmoothTransformation); QPainter painter(&pic); QPen pen; @@ -273,10 +280,10 @@ void ScanFormWidget::renderLoading() { pen.setColor(QColor(255, 255, 0)); painter.setPen(pen); painter.drawText(400 - 13 * 5, 400 + 13, "Loading..."); - mViewer->setPixmap(pic); } -void ScanFormWidget::renderPreviewData(const QObject* /*sender*/,const QObject *data) { +void ScanFormWidget::renderPreviewData(const QObject* /*sender*/,const QObject *data) +{ if (!data)return; auto array = (QByteArray*)data; auto raw_dataptr = (uchar*)array->data(); @@ -286,7 +293,6 @@ void ScanFormWidget::renderPreviewData(const QObject* /*sender*/,const QObject * raw_dataptr += PREVIEW_COL; } QImage img(c_data[0], PREVIEW_COL, PREVIEW_ROW, QImage::Format_Grayscale8); - mViewer->setFixedSize(800, 800); QPixmap pic = QPixmap::fromImage(img).scaledToHeight(800, Qt::SmoothTransformation); QPainter painter(&pic); QPen pen; @@ -311,25 +317,33 @@ void ScanFormWidget::renderPreviewData(const QObject* /*sender*/,const QObject * painter.drawText(400 - 13, borderSpacing + 30, "H"); painter.drawText(400 - 13, 800 - borderSpacing - 13, "F"); painter.drawText(borderSpacing + 6, borderSpacing + 30, "ROI"); - mViewer->setPixmap(pic); } -void ScanFormWidget::initEvents() {//Events--------------------------------------------------------------- +void ScanFormWidget::initEvents() +{ + //Events--------------------------------------------------------------- connect(EventCenter::Default(), &EventCenter::PatientSelected, [=](QObject* sender, QObject* data) { if (data) { - mBtnScan->setEnabled(true); - mBtnEScan->setEnabled(true); - mBtnPreview->setEnabled(true); - mBtnStop->setEnabled(true); + PatientInformation* patientInfo = (PatientInformation*)data; + DialogResult result = DialogManager::Default()->reuqestConfirmStartScan(patientInfo); + if(result.ResultCode == QDialog::Accepted) + { + + mPatInf->setPatientInformation(patientInfo->Copy()); + } + +// mBtnScan->setEnabled(true); +// mBtnEScan->setEnabled(true); +// mBtnPreview->setEnabled(true); +// mBtnStop->setEnabled(true); } else{ - mBtnScan->setEnabled(false); - mBtnEScan->setEnabled(false); - mBtnPreview->setEnabled(false); - mBtnStop->setEnabled(false); +// mBtnScan->setEnabled(false); +// mBtnEScan->setEnabled(false); +// mBtnPreview->setEnabled(false); +// mBtnStop->setEnabled(false); } - mPatInf->setPatientInformation((PatientInformation*)data); }); connect(EventCenter::Default(), &EventCenter::ResponseStopPreview, [=](QObject* sender, QObject* data) { setPreviewing(false); @@ -342,19 +356,19 @@ void ScanFormWidget::initEvents() {//Events------------------------------------- }); } -void ScanFormWidget::reloadLanguage(){ - mBtnLeft->setText(tr("LEFT")); - mBtnRight->setText(tr("RIGHT")); - mBtnEScan->setText(tr("Empty Scan")); - mBtnPreview->setText(tr("Preview")); - mBtnStop->setText(tr("Stop")); - mBtnScan->setText(tr("Scan")); - mLblProtocol->setText(tr("Protocol")); - mLblPreview->setText(tr("Preview Parameters")); - mLblPreview->setText(tr("Scan Parameters")); - mLblE->setText(tr("some settings\n\nparameters\n")); - mLblE2->setText(tr("some settings\n\nparameters\n")); - mBtnDrainage->isChecked() ? mBtnDrainage->setText(tr("Drainaging")) : mBtnDrainage->setText(tr("Drainage")); +void ScanFormWidget::reloadLanguage() +{ + mAccountButton->setText(tr("Account")); + mShutdownButton->setText(tr("ShutDown")); + mWorklistButton->setText(tr("Worklist")); + mStartScanButton->setText(tr("Start Scan")); + mDrainageButton->isChecked() ? mDrainageButton->setText(tr("Drainaging")) : mDrainageButton->setText(tr("Drainage")); +} + +void ScanFormWidget::updateDataByAnonymousMode() +{ + bool anonymousMode = JsonObject::Instance()->getAnonymousMode(); + mWorklistButton->setEnabled(!anonymousMode); } void ScanFormWidget::keyPressEvent(QKeyEvent* aEvent) diff --git a/src/forms/scan/ScanFormWidget.h b/src/forms/scan/ScanFormWidget.h index 2dd161c..081050a 100644 --- a/src/forms/scan/ScanFormWidget.h +++ b/src/forms/scan/ScanFormWidget.h @@ -21,21 +21,16 @@ private: PatientInformationForm* mPatInf= nullptr; bool mUnInited = true; int mCurrentFrame = 0; - QLabel* mLblProtocol; - QToolButton* mBtnLeft; - QToolButton* mBtnRight; - QToolButton* mBtnEScan; - QToolButton* mBtnPreview; - QToolButton* mBtnStop; - QToolButton* mBtnScan; - QToolButton* mBtnDrainage; - QLabel* mViewer; - QLabel* mLblPreview; - QLabel* mLblE; - QLabel* mLblParams; - QLabel* mLblE2; + QToolButton* mAccountButton; + QToolButton* mShutdownButton; + QToolButton* mWorklistButton; + QToolButton* mStartScanButton; + QToolButton* mDrainageButton; + QLabel* mXYLabel; + QLabel* mZLabel; + QLabel* mScanProcessLabel; QTimer* mDrainageTimer; - void initProtocolUI(QHBoxLayout *layout); + void initCommandWidget(QHBoxLayout *layout); void initScanControlBar(QHBoxLayout *layout); void initScanContent(); void renderLoading(); @@ -43,6 +38,7 @@ private: void reloadLanguage(); private slots: void protocolChanged(int type); + void updateDataByAnonymousMode(); void initEvents(); }; diff --git a/src/forms/select/PatientInformation.h b/src/forms/select/PatientInformation.h index 113201e..fa3bb5a 100644 --- a/src/forms/select/PatientInformation.h +++ b/src/forms/select/PatientInformation.h @@ -26,6 +26,7 @@ enum PatientInformationEnum{ * @brief this class was designed to be a edit form, * but now has been change to a detail display class. */ + class PatientInformation:public QObject{ Q_OBJECT public: @@ -47,9 +48,9 @@ public: this->AddDate = other.AddDate; } QString ScheduledStartDate; - PatientInformation* Copy() + QSharedPointer Copy() { - PatientInformation* n=new PatientInformation; + QSharedPointer n= QSharedPointer(new PatientInformation); n->PatientUID = this->PatientUID; n->ID = this->ID; n->Name = this->Name; @@ -61,5 +62,7 @@ public: return n; } }; + typedef QSharedPointer PatientInformationPointer; + #endif //GUI_PATIENTINFORMATION_H diff --git a/src/forms/select/SelectFormWidget.cpp b/src/forms/select/SelectFormWidget.cpp index b306661..6598e10 100644 --- a/src/forms/select/SelectFormWidget.cpp +++ b/src/forms/select/SelectFormWidget.cpp @@ -175,7 +175,7 @@ void SelectFormWidget::delPatient() { } void SelectFormWidget::selectPatient() { - EventCenter::Default()->triggerEvent(PatientSelected, nullptr, patientDetailForm->getPatientInformation()->Copy()); + EventCenter::Default()->triggerEvent(PatientSelected, nullptr, (QObject*)patientDetailForm->getPatientInformation()); selectedPatientUID = patientDetailForm->getPatientInformation()->PatientUID; LOG_USER_OPERATION(QString("Select Patient, ID: %1").arg(patientDetailForm->getPatientInformation()->ID)) } @@ -255,7 +255,7 @@ void SelectFormWidget::initDataModel() { mModel->setData(mModel->index(0,7),""); } - mModel->setHeaderData(1, Qt::Horizontal, "ID"); + mModel->setHeaderData(1, Qt::Horizontal, tr("ID")); mModel->setHeaderData(2, Qt::Horizontal, tr("AccessionNumber")); mModel->setHeaderData(3, Qt::Horizontal, tr("Name")); mModel->setHeaderData(4, Qt::Horizontal, tr("Birth Date")); diff --git a/src/stylesheet/Dark2.css b/src/stylesheet/Dark2.css index d1809c3..b62db41 100644 --- a/src/stylesheet/Dark2.css +++ b/src/stylesheet/Dark2.css @@ -718,7 +718,6 @@ QLabel#parameterTitle{ QLabel#protocolTitle,#patientTitle{ font-size: 26px; margin: 0; - border-bottom: 1px solid silver } QLabel#endSpaceLine { @@ -1210,3 +1209,12 @@ QWidget#SystemCorrectionForm QLabel#SystemCorrectionTitle { font-size: 30px; } +QWidget#ScanProcessWidget QLabel#ScanProcessInformation{ + height: 100px; + font-weight: bold; + font-size: 50px; +} + + + + diff --git a/src/translations/en_US.qm b/src/translations/en_US.qm index be651eede2edc9cb0da5c140b31664afee169fa8..a5188727d15ae91b1eb89964448a1ac12ce3a5b8 100644 GIT binary patch literal 1012 zcmb`FKTE?v7{;HrYD?ADDi#NYs^H@6Qo2}*+QCxnP;n5C^wguxUAdft-#{D%7ZKE5 z1UDDaO%R*~LHz&@9sB~mX-#cKiGzgXy?c`9m-o+Qt}0{qjpM_I$?=;r-I(9*#g?K8a>)ilMu@I=o$>2IwVJPWU$ACdkPdAOXWh*k{FMsMAHaB~26E@vt} z_xMEdG~S4mNPlg`(2M{=I^-I$j5=LT#KrW{J-A%2JE;;kM#wEEOv7#4{jQK6^qAjLh>B9|4eeK~!|Q$Any^?Uw&&et2I-Z0o* zl?;0R0<*aYy?)G#eR0X47cbu{!v${{&FV;V1{fm1DWvW-BN{th6VA_=@%1T#j Q!ZBUN{}U$Z!N0Zf0}Gw^cK`qY literal 16 YcmcE7ks@*G{hX<16=n7(EZln+07b?KzW@LL diff --git a/src/translations/en_US.ts b/src/translations/en_US.ts index 5f157d6..1c99718 100644 --- a/src/translations/en_US.ts +++ b/src/translations/en_US.ts @@ -429,12 +429,12 @@ - Cancle + Confirm stop the scan. + - Confirm stop the scan. - + Cancel @@ -1018,18 +1018,10 @@ PatientDetailForm - - Form - - Name - - Date Of Birth - - Gender @@ -1046,46 +1038,10 @@ Other - - Patient Information - - - - 111 - - - - <html><head/><body><p><br/></p></body></html> - - - - Edit - - - - Delete - - - - PatientID: - - - - Add Date: - - - - AccNo: - - Scan with this Patient? - - Protocol: - - Left @@ -1094,6 +1050,30 @@ Right + + Patient Detail + + + + Birth Date + + + + PatientID + + + + AccNo + + + + Add Date + + + + Protocol + + PatientInformationForm @@ -1102,40 +1082,32 @@ - Patient Information + Current Patient - <html><head/><body><p>PatientID:</p></body></html> - + Patient Name: + Name: - Someone Somebody - + Patient Birthday: + Brith Date: - 2021/11/11 - + Patient Gender: + Gender: - Female - + Patient AccessionNum: + AccNo: - Acc# 27812398 - + Scan Protocol: + Protocol: - Current Protocol - - - - LEFT ONLY - - - - RIGHT ONLY - + Patient ID: + ID: @@ -1155,18 +1127,6 @@ ReconFormWidget - - Discard - - - - Delete - - - - Refresh - - Scan Time @@ -1195,30 +1155,6 @@ Operator Name - - No data selected. - - - - Alert - - - - Can not delete this record before pacs succeed. - - - - Delete recon record with patient "%1" ? - - - - Confirm - - - - Can't delete selected record , db error! - - ReconSettingsDialog @@ -1308,69 +1244,14 @@ ScanFormWidget - - Protocol - - - - Preview - - - - Stop - - - - Scan - - - - Preview Parameters - - - - some settings - -parameters - - - - - Scan Parameters - - - - LEFT - - - - RIGHT - - - - Empty Scan - - Drainage - - No refresh data exists, please do Refresh operation first. - - Drainaging - - Please make sure the holder is only contain water! - - - - Confirm Scan - - Confirm Drainage @@ -1379,6 +1260,34 @@ parameters Make sure to open the drain valve ? + + Account + + + + ShutDown + + + + Worklist + + + + Start Scan + + + + Please confirm checking patient information to start the process + + + + Shut down now ? + + + + Shut Down + + ScanSearchCriteriaForm @@ -1446,17 +1355,17 @@ parameters Retrieve + + Manual Refresh + + + + Refresh + + SelectFormWidget - - Account - - - - Worklist - - Add @@ -1505,22 +1414,26 @@ parameters Can't delete selected Patient , db submit error! - - ShutDown - - - - Shut down now ? - - - - Shut Down - - AccessionNumber + + Patient Information Manage + + + + Edit + + + + Delete + + + + ID + + SettingFormWidget @@ -1560,6 +1473,69 @@ parameters + + StartScanProcessDialog + + Dialog + + + + Patien Information + + + + PatientBirth: + + + + PatientGender: + + + + PatientName: + + + + PatientID: + + + + Protocol Settings + + + + left->right + + + + right->left + + + + only left + + + + only right + + + + start Scan + + + + Cancel + + + + AccessionNumber: + + + + <html><head/><body><p><br/></p></body></html> + + + SystemCorrectionForm @@ -1590,6 +1566,14 @@ parameters Excute empty scan + + Please make sure the holder is only contain water! + + + + Confirm Scan + + SystemSettingForm @@ -1646,10 +1630,6 @@ parameters 浙江衡玖医疗科技 - - °C - - UserOperationLogForm @@ -1658,6 +1638,29 @@ parameters + + WarningMessageWidget + + System is working properly. + + + + No message. + + + + System Status + + + + System Notifications + + + + Clear + + + WorklistSettingsDialog diff --git a/src/translations/zh_CN.qm b/src/translations/zh_CN.qm index 912bdb4831bce895990e0d931fd954f7ba746a89..8be648698980a8ace2d22119dcdfe70d7bca9507 100644 GIT binary patch literal 18078 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 AccountFormDialog - + Account 账户 - + User ID 用户ID - + Input User ID 输入用户ID - + Name 姓名 - + Input User name 输入用户名 - + Password 密码 - + Change Password 修改密码 - + Input password 输入密码 @@ -145,12 +145,12 @@ 重置密码 - + Reset Password 密码重置 - + Logout 登出 @@ -163,55 +163,55 @@ 医生 - + Reset password to "123456" ? 密码重置为"123456"? - + Inner error, can't find reference user! 内部错误! - - + + Submit change to database fail! 修改提交至数据库失败! - + Comment 备注 - - - + + + User Name can't be empty! 用户名不能为空! - + User ID can't be empty! 用户ID不能为空! - + Password can't be empty! 密码不能为空! - + Inner error ,unset data model! 内部错误! - + User Id exists! 用户ID已存在! - + Submit to data base fail! 提交至数据库失败! @@ -219,53 +219,53 @@ AccountTableForm - + ID - - + + Name 姓名 - - + + Role 角色 - - + + Comment 备注 - - + + Add 新增 - - + + Edit 编辑 - - + + Delete 删除 - + Can't delete current log in account! 当前用户无法删除日志! - + Delete account with ID:"%1"! 删除账户ID:"%1"! @@ -329,7 +329,7 @@ AlertDialog - + Warning @@ -337,47 +337,47 @@ ChangePasswordFormDialog - + Change Password 修改密码 - + Current Password 当前密码 - + New Password 新密码 - + Confirm Password 确认密码 - + Please enter your old password! 请输入旧密码! - + New password should at least 6 characters! 新密码至少6位字符! - + Wrong password! 密码错误! - + Your new password does not match! 新密码不匹配! - + Database update error! 数据库更新错误! @@ -385,7 +385,7 @@ DateSelectDialog - + Date exceeded! @@ -393,34 +393,34 @@ DeviceManager - + Patient can leave. - + Initialize Failed. - + Data is currently being transmitted, please shut down later. - + Shut down failed, please push emergency button to shutdown. - + Recon disconnected. - - + + Open pump failed. @@ -430,7 +430,7 @@ Dialog - + 检查对象信息 @@ -529,76 +529,67 @@ EditPatientDialog - + Edit Patient - - ID + ID - + Accession Number - + 检查单号 - + Name 姓名 - + Gender 性别 - - - - - - + + + + Female - - - - - + + + Male - - - + + Other - + Birth Date 出生日期 Comment 备注 - 备注 - - + F - - + M @@ -606,12 +597,12 @@ GUIFormBaseDialog - + OK 确认 - + Cancel 取消 @@ -637,8 +628,8 @@ - Cancle - + Cancel + 取消 @@ -739,7 +730,7 @@ GetAdminPsw - + Admin Password 管理员密码 @@ -747,22 +738,22 @@ GetIPDialog - + IP Address IP地址 - + Netmask 子网掩码 - + Wrong IP! IP错误! - + Wrong Netmask! 子网掩码错误! @@ -770,32 +761,32 @@ GetRouteDialog - + Destination 目标地址 - + Netmask 子网掩码 - + Gateway 网关 - + Wrong Destination! 目标地址错误! - + Wrong Netmask! 子网掩码错误! - + Wrong Gateway! 网关错误! @@ -816,40 +807,33 @@ GetWorkListDialog - Accession Nummber - - Patient ID - + 检查对象ID - Accession Number - + 检查单号 - - + Accession Number and Patient Id is Empty. - - + Unknow Error. code:001001001 - - + DB Error,Patient Write Failed @@ -1089,49 +1073,41 @@ LoginDialog - New password:%1 - Reset success - Shut down now ? - + 是否需要执行设备关机操作,请确认? - Shut Down - + 关机 - U S C T - Username 用户名 - Password 密码 - Login 登录 @@ -1151,29 +1127,12 @@ Login failed, username or password error! Remaining retries: %1 - - - - Can't connect db. Please reboot the device and retry, or call for the service help. - - - - - Login locked. Please retry after %1 minutes. - - - - - Login failed, username or password error! Remaining retries: %1 - - Anonymous Mode active! - System mode Notice @@ -1518,7 +1477,7 @@ Patient Detail - + 当前检查对象信息 @@ -1528,12 +1487,12 @@ PatientID - + 检查对象ID AccNo - + 检查单号 @@ -1573,63 +1532,44 @@ PatientInformationForm - + Form - - Patient Information - 患者信息 + + Current Patient + 当前患者信息 - - <html><head/><body><p>PatientID:</p></body></html> - <html><head/><body><p>患者ID:</p></body></html> + + Patient Name: + 患者姓名: - - Someone Somebody - XXX + + Patient ID: + 患者编码: - - 2021/11/11 - + + Patient Birthday: + 出生日期: - - Female - + + Patient Gender: + 患者性别: - - Acc# 27812398 - + + Patient AccessionNum: + 检查单号: - - Current Protocol - 当前协议 - - - - - LEFT ONLY - 左侧 - - - Name - 姓名 - - - Gender - 性别 - - - - RIGHT ONLY - 右侧 + + Scan Protocol: + 检查身侧: @@ -1654,86 +1594,47 @@ ReconFormWidget - - Discard - - - - Delete - 删除 + 删除 - Refresh - 刷新 + 刷新 - + Patient ID - + 检查对象ID - + Accession Number - + 检查单号 - + Patient Name - + 检查对象姓名 - + Operator Name - + 操作员 - - No data selected. - - - - - - - Alert - - - - - Can not delete this record before pacs succeed. - - - - - Delete recon record with patient "%1" ? - - - - - Confirm - - - - - Can't delete selected record , db error! - - - - + Scan Time - + 检查时间 - + Laterality - + 检查位置 - + State - + 重建状态 @@ -1846,239 +1747,189 @@ ScanFormWidget - - - - Protocol - 扫描协议 + 扫描协议 - - - - LEFT - 左侧 + 左侧 - - - - RIGHT - 右侧 + 右侧 - - - - Empty Scan - 空扫 + 空扫 - - - - - - - - + + + + Drainage 排水 - - - Please make sure the holder is only contain water! - + + + Account + 账户 - - - Confirm Scan - + + + ShutDown + 关机 - - - No refresh data exists, please do Refresh operation first. - + + + Worklist + 录入检查对象 - + + + Start Scan + 开始检查流程 + + + Make sure to open the drain valve ? - + Confirm Drainage - - - - - Make sure to open the drain valve ? - - - - - Confirm Drainage - - - - - - + + + Drainaging 排水中 - Refresh - 空扫 + + Shut down now ? + 是否立即执行关机操作? - - - - - Preview - 预扫 + + Shut Down + 关机 - - - - - Stop - 停止 + + Please confirm checking patient information to start the process + 请确定检查对象信息开始流程 - - - - - Scan - 扫描 - - - - - - - Preview Parameters - 预览参数 - - - - - - - - - - some settings parameters - XXX + XXX - - - - Scan Parameters - 扫描参数 + 扫描参数 ScanSearchCriteriaForm - + Form - + Scan Search - + 按日期查找 - + Today - + 今天 - + Yesterday - + 昨天 - + Last 7 days - + 过去7天 - + Search All - + 所有信息 - + Scan date from - + 开始日期 - - + + ... DICOM - + Scan date to - + 结束日期 - + Search Dates - + 检索 - + Search Criteria - + 按条件查找 - + Retrieve - + 检索 - + Accession Number - + 检查单号 - + + Manual Refresh + 手动刷新 + + + + Refresh + 刷新 + + + Patient ID - + 检查对象ID - + Patient Name - + 检查对象姓名 - + Clear Fields - + 清空 @@ -2092,93 +1943,98 @@ parameters 新增(拉取) - - + + Add 新增 - - + + Edit - 编辑 + 编辑 - + Patient Information Manage - + 检查对象信息录入 - - + + Delete 删除 - - + + Select 选择 - + Can't delete selected Patient ! - + 不能删除已经被选择的对象 - - + + Alert - + Delete Patient "%1" ? - + Confirm - + Can't delete selected Patient , db submit error! - - - AccessionNumber - + + ID + 检查对象ID - - + + + AccessionNumber + 检查单号 + + + + Name 姓名 - - + + Birth Date 出生日期 - - + + Gender 性别 - - + + Add Date 添加日期 - - + + Comment 备注 @@ -2186,14 +2042,14 @@ parameters SettingFormWidget - - + + General 通用设置 - - + + Account 用户管理 @@ -2202,33 +2058,33 @@ parameters 系统 - - + + About 关于 - - + + Network Settings 网络通讯设置 - - + + Operation Log 系统操作日志 - - + + System Correction 系统校正 - - - + + + Help 帮助 @@ -2245,48 +2101,136 @@ parameters + + StartScanProcessDialog + + + Dialog + 检查对象信息 + + + + Patien Information + 检查对象信息 + + + + PatientBirth: + 出生日期: + + + + PatientGender: + 患者性别: + + + + AccessionNumber: + 检查单号: + + + + PatientName: + 患者姓名: + + + + PatientID: + 患者编码: + + + + Protocol Settings + 当前流程设置 + + + + <html><head/><body><p><br/></p></body></html> + + + + + left->right + 左->右 + + + + right->left + 右->左 + + + + only left + 单侧左 + + + + only right + 单侧右 + + + + start Scan + 立即开始 + + + + Cancel + 稍后开始 + + SystemCorrectionForm - - + + Scan Preparation 扫查准备 - - + + Empty Scan 空水扫描 - - + + Empty water scanning involves collecting ultrasound data while the tank is filled with water and free of any objects. It is essential to ensure that the tank is fully filled with water and devoid of any objects before conducting the scan. The purpose of collecting empty water data is to obtain baseline information on the time and energy variations of ultrasound propagation inside the inspection tank. This information is utilized for reconstructing reference data for transmission ultrasound imaging. Additionally, empty water data can be utilized for system status assessment and spatial calibration of the system. Therefore, empty water scanning should be performed regularly, with a frequency of once every month. 空水扫描是采集空水时的超声数据,需确保检查仓内部装满水且无物体时执行。空水数据是为了获取超声在检查仓内部传播的时间和能量的变化基准信息,用于重建透射超声图像的参考数据。另一方面,空水数据也可给系统状态的判断和系统的空间校正提供数据支持,故空水扫描需隔一个月定期执行。 - - + + Current date for Empty Scanning %1-%2-%3 当前空水数据扫描时间 %1年%2月%3日 - + %1-%2-%3 %1年%2月%3日 - - + + Expiration date for Empty Scanning %1 当前空水数据有效期限%1 - + Excute empty scan 执行空水扫描 + + + Please make sure the holder is only contain water! + + + + + Confirm Scan + + SystemSettingForm @@ -2382,23 +2326,16 @@ parameters TopBarWidget - + 浙江衡玖医疗科技 - - - °C - - UserOperationLogForm - - - - + + Log Date: 日志时间 @@ -2416,21 +2353,61 @@ parameters - + + System Status - + + System Notifications - + Clear + + WorklistSettingsDialog + + + Worklist Settings + Worklist + + + + AE can't be empty + AE不能为空 + + + + Server AE can't be empty + 服务器AE不能为空 + + + + Server Ip can't be empty + 服务器地址不能为空 + + + + Server Port can't be empty + 服务器端口不能为空 + + + + Ip Address is not valid + 服务器地址不符合格式规范 + + + + Port is not valid + 服务器端口格式必须为小于65535的数字 + + cmdHelper