|
|
|
|
@@ -3,19 +3,21 @@
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
#include "ScanFormWidget.h"
|
|
|
|
|
#include "ui_tabformwidget.h"
|
|
|
|
|
|
|
|
|
|
#include <QHBoxLayout>
|
|
|
|
|
#include <QVBoxLayout>
|
|
|
|
|
#include <QToolButton>
|
|
|
|
|
#include "ui_tabformwidget.h"
|
|
|
|
|
#include "guimacros.h"
|
|
|
|
|
#include "src/forms/scan/patientinformationform.h"
|
|
|
|
|
#include <QButtonGroup>
|
|
|
|
|
#include "event/EventCenter.h"
|
|
|
|
|
#include <QImage>
|
|
|
|
|
#include <QPainter>
|
|
|
|
|
#include <qdebug.h>
|
|
|
|
|
#include "log/UserOperationLog.h"
|
|
|
|
|
#include <QLabel>
|
|
|
|
|
#include <qdebug.h>
|
|
|
|
|
|
|
|
|
|
#include "guimacros.h"
|
|
|
|
|
#include "forms/scan/PatientInformationForm.h"
|
|
|
|
|
#include "event/EventCenter.h"
|
|
|
|
|
#include "log/UserOperationLog.h"
|
|
|
|
|
#include "json/jsonobject.h"
|
|
|
|
|
|
|
|
|
|
#ifdef WIN32
|
|
|
|
|
@@ -23,7 +25,29 @@
|
|
|
|
|
#include <cmath>
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
ScanFormWidget::ScanFormWidget(QWidget* parent) : TabFormWidget(parent) {
|
|
|
|
|
namespace{
|
|
|
|
|
const size_t PREVIEW_ROW = 140;
|
|
|
|
|
const size_t PREVIEW_COL = 140;
|
|
|
|
|
const float PIXEL_SPACING = 1.5f;
|
|
|
|
|
const float HALF_ROI_WIDTH = 100.0f;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ScanFormWidget::ScanFormWidget(QWidget* parent)
|
|
|
|
|
: TabFormWidget(parent)
|
|
|
|
|
, mPatInf(new PatientInformationForm(this))
|
|
|
|
|
, mLblProtocol(new QLabel(this))
|
|
|
|
|
, mBtnLeft(new QToolButton(this))
|
|
|
|
|
, mBtnRight(new QToolButton(this))
|
|
|
|
|
, mBtnRefresh(new QToolButton(this))
|
|
|
|
|
, mBtnPreview(new QToolButton(this))
|
|
|
|
|
, mBtnStop(new QToolButton(this))
|
|
|
|
|
, mBtnScan(new QToolButton(this))
|
|
|
|
|
, mViewer(new QLabel(this))
|
|
|
|
|
, mLblPreview(new QLabel(this))
|
|
|
|
|
, mLblE(new QLabel(this))
|
|
|
|
|
, mLblParams(new QLabel(this))
|
|
|
|
|
, mLblE2(new QLabel(this))
|
|
|
|
|
{
|
|
|
|
|
const char* style = "QWidget#PatientInformationForm{min-width:300px;max-width:300px; margin-right:10}"
|
|
|
|
|
"QWidget#patientinformation_panel{ border-right:1px solid #0078d8}"
|
|
|
|
|
"QWidget#patientinformation_panel QLabel{font-size:20px; }"
|
|
|
|
|
@@ -39,244 +63,233 @@ ScanFormWidget::ScanFormWidget(QWidget* parent) : TabFormWidget(parent) {
|
|
|
|
|
QHBoxLayout* layout = new QHBoxLayout();
|
|
|
|
|
ui->commandWidget->setLayout(layout);
|
|
|
|
|
|
|
|
|
|
QLabel* lbl_Protocol = new QLabel(this);
|
|
|
|
|
lbl_Protocol->setText(tr("Protocol"));
|
|
|
|
|
lbl_Protocol->setAlignment(Qt::AlignTop);
|
|
|
|
|
lbl_Protocol->setObjectName("lbl_protocol");
|
|
|
|
|
layout->addWidget(lbl_Protocol);
|
|
|
|
|
initProtocolUI(layout);
|
|
|
|
|
layout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding));
|
|
|
|
|
addVerticalLine(layout);
|
|
|
|
|
ADD_TOOL_BTN(Left, ":/icons/left.png");
|
|
|
|
|
ADD_TOOL_BTN(Right, ":/icons/right.png");
|
|
|
|
|
btnLeft->setText(tr("LEFT"));
|
|
|
|
|
btnRight->setText(tr("RIGHT"));
|
|
|
|
|
|
|
|
|
|
QButtonGroup* group = new QButtonGroup(this);
|
|
|
|
|
btnLeft->setCheckable(true);
|
|
|
|
|
btnLeft->setChecked(true);
|
|
|
|
|
btnRight->setCheckable(true);
|
|
|
|
|
group->addButton(btnRight, 1);
|
|
|
|
|
group->addButton(btnLeft, 0);
|
|
|
|
|
layout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding));
|
|
|
|
|
addVerticalLine(layout);
|
|
|
|
|
ADD_TOOL_BTN(Refresh, ":/icons/scan_e.png");
|
|
|
|
|
ADD_TOOL_BTN(Preview, ":/icons/rec.png");
|
|
|
|
|
|
|
|
|
|
ADD_TOOL_BTN(Stop, ":/icons/stop.png");
|
|
|
|
|
ADD_TOOL_BTN(Scan, ":/icons/scan.png");
|
|
|
|
|
|
|
|
|
|
btnRefresh->setText(tr("Refresh"));
|
|
|
|
|
btnPreview->setText(tr("Preview"));
|
|
|
|
|
btnStop->setText(tr("Stop"));
|
|
|
|
|
btnScan->setText(tr("Scan"));
|
|
|
|
|
|
|
|
|
|
QHBoxLayout* contentLayout = new QHBoxLayout();
|
|
|
|
|
this->ui->contentWidget->setLayout(contentLayout);
|
|
|
|
|
PatientInformationForm* patient_information = new PatientInformationForm(this);
|
|
|
|
|
contentLayout->addWidget(patient_information);
|
|
|
|
|
QWidget* param_widget = new QWidget(this);
|
|
|
|
|
QWidget* broadcast_widget = new QWidget(this);
|
|
|
|
|
broadcast_widget->setObjectName("broadcast_widget");
|
|
|
|
|
QLabel* viewer = new QLabel(broadcast_widget);
|
|
|
|
|
viewer->setObjectName("viewer");
|
|
|
|
|
viewer->setFixedSize(800, 800);
|
|
|
|
|
viewer->setText("");
|
|
|
|
|
QHBoxLayout* viewerLayout = new QHBoxLayout(viewer);
|
|
|
|
|
broadcast_widget->setLayout(viewerLayout);
|
|
|
|
|
viewerLayout->addWidget(viewer);
|
|
|
|
|
contentLayout->addWidget(broadcast_widget);
|
|
|
|
|
param_widget->setObjectName("param_widget");
|
|
|
|
|
QVBoxLayout* paramLayout = new QVBoxLayout(param_widget);
|
|
|
|
|
QLabel* lblPreview = new QLabel(this);
|
|
|
|
|
lblPreview->setText(tr("Preview Parameters"));
|
|
|
|
|
lblPreview->setObjectName("lbl_title");
|
|
|
|
|
paramLayout->addWidget(lblPreview);
|
|
|
|
|
QLabel* lbl_e = new QLabel(this);
|
|
|
|
|
lbl_e->setWordWrap(true);
|
|
|
|
|
lbl_e->setObjectName("lbl_e");
|
|
|
|
|
lbl_e->setText(tr("some settings\n\nparameters\n"));
|
|
|
|
|
paramLayout->addWidget(lbl_e);
|
|
|
|
|
QLabel* lbl_end = new QLabel(this);
|
|
|
|
|
lbl_end->setObjectName("lbl_end");
|
|
|
|
|
paramLayout->addWidget(lbl_end);
|
|
|
|
|
QLabel* lblParams = new QLabel(this);
|
|
|
|
|
lblParams->setText(tr("Scan Parameters"));
|
|
|
|
|
lblParams->setObjectName("lbl_title");
|
|
|
|
|
paramLayout->addWidget(lblParams);
|
|
|
|
|
QLabel* lbl_e2 = new QLabel(this);
|
|
|
|
|
lbl_e2->setWordWrap(true);
|
|
|
|
|
lbl_e2->setObjectName("lbl_e");
|
|
|
|
|
lbl_e2->setText(tr("some settings\n\nparameters\n"));
|
|
|
|
|
paramLayout->addWidget(lbl_e2);
|
|
|
|
|
QLabel* lbl_end2 = new QLabel(this);
|
|
|
|
|
lbl_end2->setObjectName("lbl_end");
|
|
|
|
|
paramLayout->addWidget(lbl_end2);
|
|
|
|
|
paramLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding));
|
|
|
|
|
contentLayout->addWidget(param_widget);
|
|
|
|
|
pat_inf = patient_information;
|
|
|
|
|
|
|
|
|
|
btnScan->setEnabled(false);
|
|
|
|
|
btnRefresh->setEnabled(false);
|
|
|
|
|
btnPreview->setEnabled(false);
|
|
|
|
|
btnStop->setEnabled(false);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Events---------------------------------------------------------------
|
|
|
|
|
initScanControlBar(layout);
|
|
|
|
|
initScanContent();
|
|
|
|
|
//Events---------------------------------------------------------------
|
|
|
|
|
connect(EventCenter::Default(), &EventCenter::PatientSelected, [=](QObject* sender, QObject* data) {
|
|
|
|
|
if (unset)
|
|
|
|
|
if (mUnInited)
|
|
|
|
|
{
|
|
|
|
|
btnScan->setEnabled(true);
|
|
|
|
|
btnRefresh->setEnabled(true);
|
|
|
|
|
btnPreview->setEnabled(true);
|
|
|
|
|
btnStop->setEnabled(true);
|
|
|
|
|
unset = false;
|
|
|
|
|
mBtnScan->setEnabled(true);
|
|
|
|
|
mBtnRefresh->setEnabled(true);
|
|
|
|
|
mBtnPreview->setEnabled(true);
|
|
|
|
|
mBtnStop->setEnabled(true);
|
|
|
|
|
mUnInited = false;
|
|
|
|
|
}
|
|
|
|
|
patient_information->setPatientInformation((PatientInformation*)data);
|
|
|
|
|
mPatInf->setPatientInformation((PatientInformation*)data);
|
|
|
|
|
});
|
|
|
|
|
connect(EventCenter::Default(), &EventCenter::ResponseStop, [=](QObject* sender, QObject* data) {
|
|
|
|
|
setPreviewing(false);
|
|
|
|
|
});
|
|
|
|
|
connect(EventCenter::Default(), &EventCenter::ResponsePreview, [=](QObject* sender, QObject* data) {
|
|
|
|
|
setPreviewing(true);
|
|
|
|
|
static const size_t Row = 140;
|
|
|
|
|
static const size_t Col = 140;
|
|
|
|
|
static const float pixelSpacing = 1.5f;
|
|
|
|
|
static const float halfROIWidth = 100.0f;
|
|
|
|
|
uchar c_data[Row][Col];
|
|
|
|
|
uchar* data_ptr = c_data[0];
|
|
|
|
|
for (int i = 0; i < Row; i++) {
|
|
|
|
|
data_ptr = c_data[i];
|
|
|
|
|
memset(data_ptr, 0, Col);
|
|
|
|
|
}
|
|
|
|
|
QImage img(c_data[0], Col, Row, QImage::Format_Grayscale8);
|
|
|
|
|
viewer->setFixedSize(800, 800);
|
|
|
|
|
QPixmap pic = QPixmap::fromImage(img).scaledToHeight(800, Qt::SmoothTransformation);
|
|
|
|
|
QPainter painter(&pic);
|
|
|
|
|
QPen pen;
|
|
|
|
|
pen.setStyle(Qt::DashLine);
|
|
|
|
|
pen.setWidth(3);
|
|
|
|
|
QFont font("Futura");
|
|
|
|
|
font.setPixelSize(26);
|
|
|
|
|
font.setBold(true);
|
|
|
|
|
painter.setFont(font);
|
|
|
|
|
pen.setColor(QColor(255, 255, 0));
|
|
|
|
|
painter.setPen(pen);
|
|
|
|
|
painter.drawText(400 - 13 * 5, 400 + 13, "Loading...");
|
|
|
|
|
viewer->setPixmap(pic);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
connect(EventCenter::Default(), &EventCenter::ResponsePreviewData, [=](QObject* sender, QObject* data) {
|
|
|
|
|
if (!data)return;
|
|
|
|
|
static const size_t Row = 140;
|
|
|
|
|
static const size_t Col = 140;
|
|
|
|
|
static const float pixelSpacing = 1.5f;
|
|
|
|
|
static const float halfROIWidth = 100.0f;
|
|
|
|
|
QByteArray* array = (QByteArray*)data;
|
|
|
|
|
uchar* raw_dataptr = (uchar*)array->data();
|
|
|
|
|
uchar c_data[Row][Col];
|
|
|
|
|
uchar* data_ptr = c_data[0];
|
|
|
|
|
for (int i = 0; i < Row; i++) {
|
|
|
|
|
data_ptr = c_data[i];
|
|
|
|
|
memcpy(data_ptr, raw_dataptr, Col);
|
|
|
|
|
raw_dataptr += Col;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
raw_dataptr = (uchar*)array->data();
|
|
|
|
|
QImage img(c_data[0], Col, Row, QImage::Format_Grayscale8);
|
|
|
|
|
viewer->setFixedSize(800, 800);
|
|
|
|
|
QPixmap pic = QPixmap::fromImage(img).scaledToHeight(800, Qt::SmoothTransformation);
|
|
|
|
|
QPainter painter(&pic);
|
|
|
|
|
QPen pen;
|
|
|
|
|
pen.setColor(QColor(255, 255, 0, 100));
|
|
|
|
|
pen.setStyle(Qt::DashLine);
|
|
|
|
|
pen.setWidth(3);
|
|
|
|
|
QFont font("Futura");
|
|
|
|
|
font.setPixelSize(26);
|
|
|
|
|
font.setBold(true);
|
|
|
|
|
painter.setFont(font);
|
|
|
|
|
painter.setPen(pen);
|
|
|
|
|
static int borderSpacing = round(((pixelSpacing * (Row * 0.5f) - halfROIWidth) * (800.0f / (1.5f * 140.0f))));
|
|
|
|
|
painter.drawLine(borderSpacing, borderSpacing, borderSpacing, 800 - borderSpacing);
|
|
|
|
|
painter.drawLine(borderSpacing + 1, borderSpacing, 800 - borderSpacing, borderSpacing);
|
|
|
|
|
painter.drawLine(borderSpacing + 1, 800 - borderSpacing, 800 - borderSpacing, 800 - borderSpacing);
|
|
|
|
|
painter.drawLine(800 - borderSpacing, borderSpacing + 1, 800 - borderSpacing, 800 - borderSpacing - 1);
|
|
|
|
|
pen.setColor(QColor(255, 255, 0));
|
|
|
|
|
painter.setPen(pen);
|
|
|
|
|
painter.drawText(335,40,QString("Previewing, current frame:%1").arg(++currentFrame));
|
|
|
|
|
painter.drawText(borderSpacing + 13, 400 + 13, "L");
|
|
|
|
|
painter.drawText(800 - borderSpacing - 30, 400 + 13, "R");
|
|
|
|
|
painter.drawText(400 - 13, borderSpacing + 30, "H");
|
|
|
|
|
painter.drawText(400 - 13, 800 - borderSpacing - 13, "F");
|
|
|
|
|
painter.drawText(borderSpacing + 6, borderSpacing + 30, "ROI");
|
|
|
|
|
viewer->setPixmap(pic);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
connect(EventCenter::Default(), &EventCenter::ResponsePreview, this,&ScanFormWidget::renderLoading);
|
|
|
|
|
connect(EventCenter::Default(), &EventCenter::ResponsePreviewData, this,&ScanFormWidget::renderPreviewData);
|
|
|
|
|
connect(EventCenter::Default(), &EventCenter::PatientSelected, [=](QObject* sender, QObject* data) {
|
|
|
|
|
patient_information->setPatientInformation((PatientInformation*)data);
|
|
|
|
|
});
|
|
|
|
|
connect(btnRefresh, &QToolButton::clicked, [=]() {
|
|
|
|
|
QString patientInf(patient_information->getCurrentPatientJsonString(true));
|
|
|
|
|
LOG_USER_OPERATION(StartRefresh);
|
|
|
|
|
EventCenter::Default()->triggerEvent(GUIEvents::RequestEmptyScan, nullptr, (QObject*)(&patientInf));
|
|
|
|
|
});
|
|
|
|
|
connect(btnPreview, &QToolButton::clicked, [=]() {
|
|
|
|
|
LOG_USER_OPERATION(StartPreview);
|
|
|
|
|
EventCenter::Default()->triggerEvent(GUIEvents::RequestPreviewScan, nullptr, nullptr);
|
|
|
|
|
});
|
|
|
|
|
connect(btnScan, &QToolButton::clicked, [=]() {
|
|
|
|
|
QString patientInf(patient_information->getCurrentPatientJsonString(false));
|
|
|
|
|
LOG_USER_OPERATION(StartScan);
|
|
|
|
|
if (!JsonObject::Instance()->getEmptyScanID()){
|
|
|
|
|
QString msg(tr("No refresh data exists, please do Refresh operation first."));
|
|
|
|
|
EventCenter::Default()->triggerEvent(GUIEvents::DeviceErrorRaise, nullptr, (QObject*)(&msg));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
EventCenter::Default()->triggerEvent(GUIEvents::RequestPatientScan, nullptr, (QObject*)(&patientInf));
|
|
|
|
|
});
|
|
|
|
|
connect(btnStop, &QToolButton::clicked, [=]() {
|
|
|
|
|
LOG_USER_OPERATION(Stop);
|
|
|
|
|
EventCenter::Default()->triggerEvent(GUIEvents::RequestStop, nullptr, nullptr);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
connect(group, SIGNAL(buttonClicked(int)), this, SLOT(protocolChanged(int)));
|
|
|
|
|
|
|
|
|
|
connect(EventCenter::Default(), &EventCenter::ReloadLanguage, [=]() {
|
|
|
|
|
btnLeft->setText(tr("LEFT"));
|
|
|
|
|
btnRight->setText(tr("RIGHT"));
|
|
|
|
|
btnRefresh->setText(tr("Refresh"));
|
|
|
|
|
btnPreview->setText(tr("Preview"));
|
|
|
|
|
btnStop->setText(tr("Stop"));
|
|
|
|
|
btnScan->setText(tr("Scan"));
|
|
|
|
|
lbl_Protocol->setText(tr("Protocol"));
|
|
|
|
|
lblPreview->setText(tr("Preview Parameters"));
|
|
|
|
|
lblParams->setText(tr("Scan Parameters"));
|
|
|
|
|
lbl_e->setText(tr("some settings\n\nparameters\n"));
|
|
|
|
|
lbl_e2->setText(tr("some settings\n\nparameters\n"));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
mPatInf->setPatientInformation((PatientInformation*)data);
|
|
|
|
|
});
|
|
|
|
|
connect(EventCenter::Default(), &EventCenter::ReloadLanguage, this, &ScanFormWidget::reloadLanguage);
|
|
|
|
|
connect(EventCenter::Default(), &EventCenter::DeviceErrorRaise, [=](QObject* parent, QObject* msg){
|
|
|
|
|
setPreviewing(false);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
previewfunc = [=](bool val)->void {
|
|
|
|
|
viewer->setVisible(val);
|
|
|
|
|
btnPreview->setCheckable(val);
|
|
|
|
|
btnPreview->setChecked(val);
|
|
|
|
|
btnPreview->setEnabled(!val);
|
|
|
|
|
btnRefresh->setEnabled(!val);
|
|
|
|
|
btnScan->setEnabled(!val);
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ScanFormWidget::~ScanFormWidget() {
|
|
|
|
|
void ScanFormWidget::initProtocolUI(QHBoxLayout *layout) {
|
|
|
|
|
mLblProtocol->setText(tr("Protocol"));
|
|
|
|
|
mLblProtocol->setAlignment(Qt::AlignTop);
|
|
|
|
|
mLblProtocol->setObjectName("lbl_protocol");
|
|
|
|
|
layout->addWidget(mLblProtocol);
|
|
|
|
|
addVerticalLine(layout);
|
|
|
|
|
INIT_TOOL_BTN(Left, ":/icons/left.png");
|
|
|
|
|
INIT_TOOL_BTN(Right, ":/icons/right.png");
|
|
|
|
|
mBtnLeft->setText(tr("LEFT"));
|
|
|
|
|
mBtnRight->setText(tr("RIGHT"));
|
|
|
|
|
|
|
|
|
|
QButtonGroup* group = new QButtonGroup(this);
|
|
|
|
|
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::initScanContent() {
|
|
|
|
|
QHBoxLayout* contentLayout = new QHBoxLayout();
|
|
|
|
|
ui->contentWidget->setLayout(contentLayout);
|
|
|
|
|
|
|
|
|
|
contentLayout->addWidget(mPatInf);
|
|
|
|
|
QWidget* param_widget = new QWidget(this);
|
|
|
|
|
QWidget* broadcast_widget = new QWidget(this);
|
|
|
|
|
broadcast_widget->setObjectName("broadcast_widget");
|
|
|
|
|
mViewer->setObjectName("viewer");
|
|
|
|
|
mViewer->setFixedSize(800, 800);
|
|
|
|
|
mViewer->setText("");
|
|
|
|
|
QHBoxLayout* viewerLayout = new QHBoxLayout(mViewer);
|
|
|
|
|
broadcast_widget->setLayout(viewerLayout);
|
|
|
|
|
viewerLayout->addWidget(mViewer);
|
|
|
|
|
contentLayout->addWidget(broadcast_widget);
|
|
|
|
|
param_widget->setObjectName("param_widget");
|
|
|
|
|
QVBoxLayout* paramLayout = new QVBoxLayout(param_widget);
|
|
|
|
|
mLblPreview->setText(tr("Preview Parameters"));
|
|
|
|
|
mLblPreview->setObjectName("lbl_title");
|
|
|
|
|
paramLayout->addWidget(mLblPreview);
|
|
|
|
|
mLblE->setWordWrap(true);
|
|
|
|
|
mLblE->setObjectName("lbl_e");
|
|
|
|
|
mLblE->setText(tr("some settings\n\nparameters\n"));
|
|
|
|
|
paramLayout->addWidget(mLblE);
|
|
|
|
|
QLabel* lbl_end = new QLabel(this);
|
|
|
|
|
lbl_end->setObjectName("lbl_end");
|
|
|
|
|
paramLayout->addWidget(lbl_end);
|
|
|
|
|
mLblParams->setText(tr("Scan Parameters"));
|
|
|
|
|
mLblParams->setObjectName("lbl_title");
|
|
|
|
|
paramLayout->addWidget(mLblParams);
|
|
|
|
|
mLblE2->setWordWrap(true);
|
|
|
|
|
mLblE2->setObjectName("lbl_e");
|
|
|
|
|
mLblE2->setText(tr("some settings\n\nparameters\n"));
|
|
|
|
|
paramLayout->addWidget(mLblE2);
|
|
|
|
|
QLabel* lbl_end2 = new QLabel(this);
|
|
|
|
|
lbl_end2->setObjectName("lbl_end");
|
|
|
|
|
paramLayout->addWidget(lbl_end2);
|
|
|
|
|
paramLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding));
|
|
|
|
|
contentLayout->addWidget(param_widget);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ScanFormWidget::initScanControlBar(QHBoxLayout *layout){
|
|
|
|
|
INIT_TOOL_BTN(Refresh, ":/icons/scan_e.png");
|
|
|
|
|
INIT_TOOL_BTN(Preview, ":/icons/rec.png");
|
|
|
|
|
|
|
|
|
|
INIT_TOOL_BTN(Stop, ":/icons/stop.png");
|
|
|
|
|
INIT_TOOL_BTN(Scan, ":/icons/scan.png");
|
|
|
|
|
|
|
|
|
|
mBtnRefresh->setText(tr("Refresh"));
|
|
|
|
|
mBtnPreview->setText(tr("Preview"));
|
|
|
|
|
mBtnStop->setText(tr("Stop"));
|
|
|
|
|
mBtnScan->setText(tr("Scan"));
|
|
|
|
|
|
|
|
|
|
mBtnScan->setEnabled(false);
|
|
|
|
|
mBtnRefresh->setEnabled(false);
|
|
|
|
|
mBtnPreview->setEnabled(false);
|
|
|
|
|
mBtnStop->setEnabled(false);
|
|
|
|
|
connect(mBtnRefresh, &QToolButton::clicked, [=]() {
|
|
|
|
|
QString patientInf(mPatInf->getCurrentPatientJsonString(true));
|
|
|
|
|
LOG_USER_OPERATION(StartRefresh);
|
|
|
|
|
EventCenter::Default()->triggerEvent(RequestEmptyScan, nullptr, (QObject*)(&patientInf));
|
|
|
|
|
});
|
|
|
|
|
connect(mBtnPreview, &QToolButton::clicked, [=]() {
|
|
|
|
|
LOG_USER_OPERATION(StartPreview);
|
|
|
|
|
EventCenter::Default()->triggerEvent(RequestPreviewScan, nullptr, nullptr);
|
|
|
|
|
});
|
|
|
|
|
connect(mBtnScan, &QToolButton::clicked, [=]() {
|
|
|
|
|
QString patientInf(mPatInf->getCurrentPatientJsonString(false));
|
|
|
|
|
LOG_USER_OPERATION(StartScan);
|
|
|
|
|
if (!JsonObject::Instance()->getEmptyScanID()){
|
|
|
|
|
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);
|
|
|
|
|
EventCenter::Default()->triggerEvent(RequestStop, nullptr, nullptr);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ScanFormWidget::protocolChanged(int type) {
|
|
|
|
|
printf("%d\r\n", type);
|
|
|
|
|
pat_inf->setProtocol(type);
|
|
|
|
|
mPatInf->setProtocol(type);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ScanFormWidget::setPreviewing(bool val) {
|
|
|
|
|
if (previewfunc) previewfunc(val);
|
|
|
|
|
mViewer->setVisible(val);
|
|
|
|
|
mBtnPreview->setCheckable(val);
|
|
|
|
|
mBtnPreview->setChecked(val);
|
|
|
|
|
mBtnPreview->setEnabled(!val);
|
|
|
|
|
mBtnRefresh->setEnabled(!val);
|
|
|
|
|
mBtnScan->setEnabled(!val);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ScanFormWidget::renderLoading() {
|
|
|
|
|
setPreviewing(true);
|
|
|
|
|
uchar c_data[PREVIEW_ROW][PREVIEW_COL];
|
|
|
|
|
uchar* data_ptr = c_data[0];
|
|
|
|
|
for (int i = 0; i < PREVIEW_ROW; i++) {
|
|
|
|
|
data_ptr = c_data[i];
|
|
|
|
|
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;
|
|
|
|
|
pen.setStyle(Qt::DashLine);
|
|
|
|
|
pen.setWidth(3);
|
|
|
|
|
QFont font("Futura");
|
|
|
|
|
font.setPixelSize(26);
|
|
|
|
|
font.setBold(true);
|
|
|
|
|
painter.setFont(font);
|
|
|
|
|
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 *data) {
|
|
|
|
|
if (!data)return;
|
|
|
|
|
QByteArray* array = (QByteArray*)data;
|
|
|
|
|
uchar* raw_dataptr = (uchar*)array->data();
|
|
|
|
|
uchar c_data[PREVIEW_ROW][PREVIEW_COL];
|
|
|
|
|
uchar* data_ptr = c_data[0];
|
|
|
|
|
for (int i = 0; i < PREVIEW_ROW; i++) {
|
|
|
|
|
data_ptr = c_data[i];
|
|
|
|
|
memcpy(data_ptr, raw_dataptr, PREVIEW_COL);
|
|
|
|
|
raw_dataptr += PREVIEW_COL;
|
|
|
|
|
}
|
|
|
|
|
raw_dataptr = (uchar*)array->data();
|
|
|
|
|
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;
|
|
|
|
|
pen.setColor(QColor(255, 255, 0, 100));
|
|
|
|
|
pen.setStyle(Qt::DashLine);
|
|
|
|
|
pen.setWidth(3);
|
|
|
|
|
QFont font("Futura");
|
|
|
|
|
font.setPixelSize(26);
|
|
|
|
|
font.setBold(true);
|
|
|
|
|
painter.setFont(font);
|
|
|
|
|
painter.setPen(pen);
|
|
|
|
|
static int borderSpacing = round(((PIXEL_SPACING * (PREVIEW_ROW * 0.5f) - HALF_ROI_WIDTH) * (800.0f / (1.5f * 140.0f))));
|
|
|
|
|
painter.drawLine(borderSpacing, borderSpacing, borderSpacing, 800 - borderSpacing);
|
|
|
|
|
painter.drawLine(borderSpacing + 1, borderSpacing, 800 - borderSpacing, borderSpacing);
|
|
|
|
|
painter.drawLine(borderSpacing + 1, 800 - borderSpacing, 800 - borderSpacing, 800 - borderSpacing);
|
|
|
|
|
painter.drawLine(800 - borderSpacing, borderSpacing + 1, 800 - borderSpacing, 800 - borderSpacing - 1);
|
|
|
|
|
pen.setColor(QColor(255, 255, 0));
|
|
|
|
|
painter.setPen(pen);
|
|
|
|
|
painter.drawText(335,40,QString("Previewing, current frame:%1").arg(++mCurrentFrame));
|
|
|
|
|
painter.drawText(borderSpacing + 13, 400 + 13, "L");
|
|
|
|
|
painter.drawText(800 - borderSpacing - 30, 400 + 13, "R");
|
|
|
|
|
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);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ScanFormWidget::reloadLanguage(){
|
|
|
|
|
mBtnLeft->setText(tr("LEFT"));
|
|
|
|
|
mBtnRight->setText(tr("RIGHT"));
|
|
|
|
|
mBtnRefresh->setText(tr("Refresh"));
|
|
|
|
|
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"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|