Change UI logic, add message prompt, add scan logic and preivewing rendering logic.
This commit is contained in:
@@ -11,13 +11,16 @@
|
||||
#include "patientinformationform.h"
|
||||
#include <QButtonGroup>
|
||||
#include "event/EventCenter.h"
|
||||
#include <QImage>
|
||||
#include <QPainter>
|
||||
|
||||
ScanFormWidget::ScanFormWidget(QWidget *parent) : TabFormWidget(parent) {
|
||||
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; }"
|
||||
"QWidget#param_widget{min-width:300px;max-width:300px;border-left:1px solid #0078d8}"
|
||||
"QWidget#broadcast_widget{border:2px solid #515151; border-radius: 20px}"
|
||||
"QWidget#broadcast_widget{border:2px solid #515151; border-radius: 20px; background-color:black}"
|
||||
"QWidget#broadcast_widget QLabel{background-color:black}"
|
||||
"QLabel#lbl_protocol{font-size:32px; margin:0; color:silver}"
|
||||
"QLabel#lbl_title,QLabel#lbl_ptitle{font-size:20px;margin:0; border-bottom:1px solid silver}"
|
||||
"QLabel#lbl_end{font-size:20px;margin:0; border-top:1px solid #0078d8}"
|
||||
@@ -123,17 +126,57 @@ ScanFormWidget::ScanFormWidget(QWidget *parent) : TabFormWidget(parent) {
|
||||
connect(EventCenter::Default(),&EventCenter::ResponsePreview,[=](QObject* sender,QObject* data){
|
||||
setPreviewing(true);
|
||||
});
|
||||
connect(EventCenter::Default(),&EventCenter::ResponsePreviewData,[=](QObject* sender,QObject* data){
|
||||
if (!data)return;
|
||||
QByteArray* array = (QByteArray*)data;
|
||||
uchar* raw_dataptr = (uchar*)array->data();
|
||||
uchar c_data[200][200];
|
||||
uchar* data_ptr = c_data[0];
|
||||
for(int i=0;i<200;i++){
|
||||
data_ptr = c_data[i];
|
||||
memcpy(data_ptr,raw_dataptr,200);
|
||||
raw_dataptr += 200;
|
||||
|
||||
}
|
||||
raw_dataptr = (uchar*)array->data();
|
||||
QImage img(c_data[0] , 200, 200, 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);
|
||||
painter.drawLine(29*4,29*4,29*4,171*4);
|
||||
painter.drawLine(29*4+1,29*4,171*4,29*4);
|
||||
painter.drawLine(29*4+1,171*4,171*4,171*4);
|
||||
painter.drawLine(171*4,29*4+1,171*4,171*4-1);
|
||||
pen.setColor(QColor(255,255,0));
|
||||
painter.setPen(pen);
|
||||
painter.drawText(335,80,"Previewing");
|
||||
painter.drawText(29*4,29*4-2,"ROI");
|
||||
viewer->setPixmap(pic);
|
||||
});
|
||||
connect(EventCenter::Default(),&EventCenter::PatientSelected,[=](QObject* sender,QObject* data){
|
||||
patient_information->setPatientInformation((PatientInformation*)data);
|
||||
});
|
||||
connect(btnRefresh,&QToolButton::clicked,[=](){
|
||||
EventCenter::Default()->triggerEvent(GUIEvents::RequestEmptyScan, nullptr, nullptr);
|
||||
QString patientInf(patient_information->getCurrentPatientJsonString(true));
|
||||
printf("%s\r\n",patientInf.toStdString().data());
|
||||
EventCenter::Default()->triggerEvent(GUIEvents::RequestEmptyScan, nullptr, (QObject*)(&patientInf));
|
||||
});
|
||||
connect(btnPreview,&QToolButton::clicked,[=](){
|
||||
EventCenter::Default()->triggerEvent(GUIEvents::RequestPreviewScan, nullptr, nullptr);
|
||||
});
|
||||
connect(btnScan,&QToolButton::clicked,[=](){
|
||||
EventCenter::Default()->triggerEvent(GUIEvents::RequestPatientScan, nullptr, nullptr);
|
||||
QString patientInf(patient_information->getCurrentPatientJsonString(false));
|
||||
printf("%s\r\n",patientInf.toStdString().data());
|
||||
EventCenter::Default()->triggerEvent(GUIEvents::RequestPatientScan, nullptr, (QObject*)(&patientInf));
|
||||
});
|
||||
connect(btnStop,&QToolButton::clicked,[=](){
|
||||
EventCenter::Default()->triggerEvent(GUIEvents::RequestStop, nullptr, nullptr);
|
||||
|
||||
@@ -6,50 +6,54 @@
|
||||
#include "../event/EventCenter.h"
|
||||
#include <QVariant>
|
||||
|
||||
#define triggerEvent EventCenter::Default()->triggerEvent
|
||||
#define TRIGGER_EVENT EventCenter::Default()->triggerEvent
|
||||
|
||||
const char * getJsonFromPatInf(QObject* obj)
|
||||
#define THROW_ERROR(errormsg)\
|
||||
TRIGGER_EVENT(GUIEvents::GUIErrorRaise, nullptr, (QObject*)&errormsg);
|
||||
|
||||
std::string getJsonFromPatInf(QObject* obj)
|
||||
{
|
||||
return nullptr;
|
||||
return ((QString*)obj)->toStdString();
|
||||
}
|
||||
|
||||
void DeviceManager::initDevice() {
|
||||
// empty scan
|
||||
connect(EventCenter::Default(),&EventCenter::RequestEmptyScan,[=](){
|
||||
const char * json = "";
|
||||
processScan(json);
|
||||
connect(EventCenter::Default(),&EventCenter::RequestEmptyScan,[=](QObject* sender, QObject* detail){
|
||||
std::string json= getJsonFromPatInf(detail);
|
||||
printf("%s\r\n",json.c_str());
|
||||
processScan(json.c_str());
|
||||
});
|
||||
// Patient scan
|
||||
connect(EventCenter::Default(),&EventCenter::RequestPatientScan,[=](QObject* sender, QObject* detail){
|
||||
const char * json = getJsonFromPatInf(detail);
|
||||
if (json)
|
||||
std::string json= getJsonFromPatInf(detail);
|
||||
printf("%s\r\n",json.c_str());
|
||||
if (!json.empty())
|
||||
{
|
||||
processScan(json);
|
||||
processScan(json.c_str());
|
||||
}
|
||||
});
|
||||
// stop
|
||||
connect(EventCenter::Default(),&EventCenter::RequestStop,[=]() {
|
||||
triggerEvent(GUIEvents::InvokeOperationStart, nullptr, nullptr);
|
||||
TRIGGER_EVENT(GUIEvents::InvokeOperationStart, nullptr, nullptr);
|
||||
StatusInfo inf = GetStatus();
|
||||
if (inf.status==SCANING)
|
||||
{
|
||||
if (inf.status == SCANING) {
|
||||
//ScanControl fail
|
||||
if(ScanControl(STOP))
|
||||
{
|
||||
triggerEvent(GUIEvents::GUIErrorRaise, nullptr, nullptr);
|
||||
if (ScanControl(STOP)) {
|
||||
QString msg("Stop operation fail!");
|
||||
THROW_ERROR(msg);
|
||||
lastStatus = -1;
|
||||
previewing = false;
|
||||
return;
|
||||
}
|
||||
lastStatus = -1;
|
||||
previewing = false;
|
||||
triggerEvent(GUIEvents::InvokeOperationEnd, nullptr, nullptr);
|
||||
triggerEvent(GUIEvents::ResponseStop, nullptr, nullptr);
|
||||
}
|
||||
TRIGGER_EVENT(GUIEvents::InvokeOperationEnd, nullptr, nullptr);
|
||||
TRIGGER_EVENT(GUIEvents::ResponseStop, nullptr, nullptr);
|
||||
});
|
||||
// preview
|
||||
connect(EventCenter::Default(),&EventCenter::RequestPreviewScan,[=](){
|
||||
triggerEvent(GUIEvents::InvokeOperationStart, nullptr, nullptr);
|
||||
TRIGGER_EVENT(GUIEvents::InvokeOperationStart, nullptr, nullptr);
|
||||
StatusInfo inf = GetStatus();
|
||||
if (inf.status==READY)
|
||||
{
|
||||
@@ -59,12 +63,13 @@ void DeviceManager::initDevice() {
|
||||
lastStatus = SCANING;
|
||||
previewing = true;
|
||||
timerID = startTimer(500);
|
||||
triggerEvent(GUIEvents::ResponsePreview, nullptr, nullptr);
|
||||
triggerEvent(GUIEvents::InvokeOperationEnd, nullptr, nullptr);
|
||||
TRIGGER_EVENT(GUIEvents::ResponsePreview, nullptr, nullptr);
|
||||
TRIGGER_EVENT(GUIEvents::InvokeOperationEnd, nullptr, nullptr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
triggerEvent(GUIEvents::GUIErrorRaise, nullptr, nullptr);
|
||||
QString msg(inf.status!=READY?"Can't start preview,Device is not ready!":"Start preview operation fail!");
|
||||
THROW_ERROR(msg);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -77,20 +82,21 @@ void DeviceManager::timerEvent(QTimerEvent *event) {
|
||||
if(!previewing)
|
||||
{
|
||||
QVariant var(inf.progress);
|
||||
triggerEvent(GUIEvents::InvokeOperationProgress, nullptr, (QObject*)&var);
|
||||
TRIGGER_EVENT(GUIEvents::InvokeOperationProgress, nullptr, (QObject*)&var);
|
||||
}
|
||||
//preview scan
|
||||
else{
|
||||
const char * data = GetPreviewData();
|
||||
QByteArray* bytes = new QByteArray(data);
|
||||
triggerEvent(GUIEvents::ResponsePreviewData, nullptr, (QObject*)bytes);
|
||||
QByteArray bytes =QByteArray::fromRawData(data,40000);
|
||||
TRIGGER_EVENT(GUIEvents::ResponsePreviewData, nullptr, (QObject*)(&bytes));
|
||||
delete [] data;
|
||||
}
|
||||
|
||||
} else{
|
||||
if (lastStatus == SCANING && !errorOccured)
|
||||
{
|
||||
QVariant var(true);
|
||||
triggerEvent(GUIEvents::InvokeOperationEnd, nullptr, (QObject*)&var);
|
||||
TRIGGER_EVENT(GUIEvents::InvokeOperationEnd, nullptr, (QObject*)&var);
|
||||
lastStatus = -1;
|
||||
previewing = false;
|
||||
}
|
||||
@@ -106,10 +112,12 @@ void DeviceManager::timerEvent(QTimerEvent *event) {
|
||||
}
|
||||
|
||||
void DeviceManager::processScan(const char *json) {
|
||||
triggerEvent(GUIEvents::InvokeOperationStart, nullptr, nullptr);
|
||||
static QString msg = "Start scan...";
|
||||
TRIGGER_EVENT(GUIEvents::InvokeOperationStart, nullptr, (QObject*)&msg);
|
||||
int ret = SetScanInf(json);
|
||||
if (ret){
|
||||
triggerEvent(GUIEvents::GUIErrorRaise, nullptr, nullptr);
|
||||
QString errmsg("Transfer patient information fail!");
|
||||
THROW_ERROR(errmsg);
|
||||
return;
|
||||
}
|
||||
StatusInfo inf = GetStatus();
|
||||
@@ -122,5 +130,6 @@ void DeviceManager::processScan(const char *json) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
triggerEvent(GUIEvents::GUIErrorRaise, nullptr, nullptr);
|
||||
QString errmsg("Start scan operation fail!");
|
||||
THROW_ERROR(errmsg);
|
||||
}
|
||||
|
||||
@@ -30,13 +30,6 @@ GUIMessageDialog::GUIMessageDialog(QWidget *parent) :
|
||||
}
|
||||
frame.append(str);
|
||||
}
|
||||
connect(EventCenter::Default(),&EventCenter::InvokeOperationEnd,[=](){
|
||||
if (timerID != -1){
|
||||
killTimer(timerID);
|
||||
timerID = -1;
|
||||
}
|
||||
accept();
|
||||
});
|
||||
}
|
||||
|
||||
GUIMessageDialog::~GUIMessageDialog()
|
||||
@@ -63,6 +56,7 @@ void GUIMessageDialog::startLoading() {
|
||||
}
|
||||
|
||||
void GUIMessageDialog::showMessage(QString msg) {
|
||||
ui->lbl_msg->setVisible(true);
|
||||
ui->lbl_msg->setText(msg);
|
||||
}
|
||||
|
||||
@@ -70,6 +64,20 @@ void GUIMessageDialog::showExitButton() {
|
||||
ui->btn_main->setVisible(true);
|
||||
disconnect(ui->btn_main);
|
||||
connect(ui->btn_main,&QToolButton::clicked,[=](){
|
||||
if (timerID != -1){
|
||||
killTimer(timerID);
|
||||
timerID = -1;
|
||||
}
|
||||
accept();
|
||||
});
|
||||
}
|
||||
|
||||
void GUIMessageDialog::hideMessage() {
|
||||
ui->lbl_msg->setVisible(false);
|
||||
ui->lbl_msg->setText("");
|
||||
}
|
||||
|
||||
void GUIMessageDialog::hideExitButton() {
|
||||
ui->btn_main->setVisible(false);
|
||||
disconnect(ui->btn_main);
|
||||
}
|
||||
|
||||
@@ -15,7 +15,9 @@ public:
|
||||
explicit GUIMessageDialog(QWidget *parent = nullptr);
|
||||
~GUIMessageDialog();
|
||||
void showMessage(QString msg);
|
||||
void hideMessage();
|
||||
void showExitButton();
|
||||
void hideExitButton();
|
||||
void startLoading();
|
||||
void stopLoading();
|
||||
protected:
|
||||
|
||||
@@ -63,8 +63,8 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
"stop: 0.0 darkgray, stop: 0.5 lightgray, stop: 1.0 darkgray);"
|
||||
"border-radius:20px;border:5px solid #0078d8; }"
|
||||
"QDialog QWidget QWidget{ background:transparent;color:#3078d8}"
|
||||
"QDialog QWidget QWidget QLabel{ border:1px solid black}"
|
||||
"QLabel#lbl_progressicon{min-width:75px;max-width:75px;font-size:30px}"
|
||||
"QDialog QWidget QWidget QLabel{ font-size:30px}"
|
||||
"QLabel#lbl_progressicon{min-width:75px;max-width:75px;}"
|
||||
"#spacer_1, #spacer_2{min-width:2px;max-width:2px;margin-top:6px;margin-bottom:6px;border-right:1px solid #0078d8;}"//green with 2
|
||||
;
|
||||
this->setStyleSheet(style);
|
||||
@@ -90,15 +90,42 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
this->showFullScreen ();
|
||||
connect(EventCenter::Default(),&EventCenter::GUIErrorRaise,[=](){
|
||||
if (!msgDialog) msgDialog = new GUIMessageDialog(this);
|
||||
msgDialog->showMessage("Something went error!");
|
||||
msgDialog->showExitButton();
|
||||
msgDialog->stopLoading();
|
||||
msgDialog->show();
|
||||
});
|
||||
connect(EventCenter::Default(),&EventCenter::InvokeOperationStart,[=](){
|
||||
connect(EventCenter::Default(),&EventCenter::InvokeOperationStart,[=](QObject*,QObject* msg){
|
||||
if (!msgDialog) msgDialog = new GUIMessageDialog(this);
|
||||
if (msg)
|
||||
{
|
||||
QString* str = (QString*)msg;
|
||||
msgDialog->showMessage(*str);
|
||||
} else{
|
||||
msgDialog->hideMessage();
|
||||
}
|
||||
msgDialog->hideExitButton();
|
||||
msgDialog->startLoading();
|
||||
msgDialog->show();
|
||||
});
|
||||
connect(EventCenter::Default(),&EventCenter::InvokeOperationProgress,[=](QObject*,QObject* msg){
|
||||
if (!msgDialog) msgDialog = new GUIMessageDialog(this);
|
||||
if (msg)
|
||||
{
|
||||
QVariant* var = (QVariant*)msg;
|
||||
msgDialog->showMessage(QString("Scanning %1%").arg((int)(var->toFloat()*100.0f)));
|
||||
} else{
|
||||
msgDialog->hideMessage();
|
||||
}
|
||||
msgDialog->hideExitButton();
|
||||
msgDialog->show();
|
||||
});
|
||||
connect(EventCenter::Default(),&EventCenter::InvokeOperationEnd,[=](){
|
||||
if (!msgDialog) return;
|
||||
msgDialog->stopLoading();
|
||||
msgDialog->hide();
|
||||
});
|
||||
DeviceManager::Default()->initDevice();
|
||||
// GUIMessageDialog* dialog = new GUIMessageDialog(this);
|
||||
// dialog->show();
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
|
||||
Reference in New Issue
Block a user