SVG5/formworklist.cpp
2025-10-12 13:55:56 +09:00

544 lines
16 KiB
C++

#include "formworklist.h"
#include "ui_formworklist.h"
#include "mainwindow.h"
#include "formcalendarview.h"
#include "dialogemergengy.h"
FormWorklist::FormWorklist(QWidget *parent) :
QWidget(parent),
ui(new Ui::FormWorklist)
{
ui->setupUi(this);
m_nSearchDurationType = SEARCH_TODAY;
ui->widgetList->ChangeHeader();
m_pDialogSearchProgress = new DialogProgress(this);
m_pDialogSearchProgress->Init(1);
ui->pushButton_DateEnd->hide();
//m_pScrollArea = new QScrollArea;
//m_pScrollArea->setWidget(ui->widgetList);
MainWindow* pMainWindow = MainWindow::GetMainWindow();
connect(this, SIGNAL(ChangeMenu(int)), pMainWindow, SLOT(ChangeMenu(int)));
connect(&m_TimerSearch, SIGNAL(timeout()), this, SLOT(OverTime()));
m_TimerSearch.setSingleShot(true);
//m_TimerSearch.setInterval(1000*3);
//m_TimerSearch.start();
CreateThreadWorklistSearch();
}
FormWorklist::~FormWorklist()
{
if(m_pDialogSearchProgress!=NULL)
{
delete m_pDialogSearchProgress;
}
MainWindow* pMainWindow = MainWindow::GetMainWindow();
disconnect(this, SIGNAL(ChangeMenu(int)), pMainWindow, SLOT(ChangeMenu(int)));
delete ui;
}
void FormWorklist::CreateThreadWorklistSearch()
{
m_pThreadWorklistSearch = new SThreadWorklistSearch;
connect(m_pThreadWorklistSearch, SIGNAL(worklistUpdateComplete()), this, SLOT(worklistUpdateComplete()));
connect(m_pThreadWorklistSearch, SIGNAL(worklistError()), this, SLOT(worklistError()));
connect(m_pThreadWorklistSearch, SIGNAL(SetWorklistProgress(int)), this, SLOT(SetWorklistProgress(int)));
MainWindow* pMainWindow = MainWindow::GetMainWindow();
connect(m_pThreadWorklistSearch, SIGNAL(SetDisplayError(QString)), pMainWindow, SLOT(SetDisplayError(QString)));
m_pThreadWorklistSearch->start();
}
void FormWorklist::TerminateThreadWorklistSearch()
{
disconnect(m_pThreadWorklistSearch, SIGNAL(worklistUpdateComplete()), this, SLOT(worklistUpdateComplete()));
disconnect(m_pThreadWorklistSearch, SIGNAL(worklistError()), this, SLOT(worklistError()));
disconnect(m_pThreadWorklistSearch, SIGNAL(SetWorklistProgress(int)), this, SLOT(SetWorklistProgress(int)));
//m_pThreadWorklistSearch->terminate();
m_pThreadWorklistSearch->TerminateThread();
//m_pThreadWorklistSearch->ExitThread();
while(m_pThreadWorklistSearch->isRunning()==true)
{
usleep(1000*100);
}
//SAFE_DELETE(m_pThreadWorklistSearch);
m_pThreadWorklistSearch->deleteLater();
usleep(1000*100);
//m_pThreadWorklistSearch->exit(0);
m_pThreadWorklistSearch = NULL;
}
void FormWorklist::ClickSearchDateStartEnd()
{
QDate date = QDate::currentDate();
CommonData* pCommonData = MainWindow::GetCommonData();
QDate dateStart = pCommonData->GetDateSearchWorklistStart();
QDate dateEnd = pCommonData->GetDateSearchWorklistEnd();
DialogCalendar dlg(this);
dlg.SetCalendarDate(date.year(), date.month(), 1);
dlg.SetDateStart(dateStart);
dlg.SetDateEnd(dateEnd);
//dlg.SetModeChangeStart();
MainWindow* pMainWindow = MainWindow::GetMainWindow();
pMainWindow->StopScreenSaverTimer();
connect(&dlg, SIGNAL(SetSearchDateUpdate(int)), this, SLOT(SetSearchDateUpdate(int)));
dlg.exec();
m_nSearchDurationType = dlg.GetTypeSearchDuration();
disconnect(&dlg, SIGNAL(SetSearchDateUpdate(int)), this, SLOT(SetSearchDateUpdate(int)));
pMainWindow->ResetScreenSaverTimer();
pMainWindow->StartScreenSaverTimer();
}
void FormWorklist::on_pushButton_DateStart_clicked()
{
WRITE_FUNCTION_LOG();
ClickSearchDateStartEnd();
}
void FormWorklist::on_pushButton_DateEnd_clicked()
{
WRITE_FUNCTION_LOG();
ClickSearchDateStartEnd();
}
void FormWorklist::SetSearchDateUpdate(int nTypeSearchDuration)
{
WRITE_FUNCTION_LOG();
CommonData* pCommonData = MainWindow::GetCommonData();
//QDate dateStart = pMainWindow->GetDateSearchWorklistStart();// FormCalendarView::GetDateStart();
//QDate dateEnd = pMainWindow->GetDateSearchWorklistEnd();// FormCalendarView::GetDateEnd();
QDate dateStart = FormCalendarView::GetDateStart();
QDate dateEnd = FormCalendarView::GetDateEnd();
QDate dateToday = QDate::currentDate();
m_nSearchDurationType = nTypeSearchDuration;
pCommonData->GetSearchDateStartEnd(m_nSearchDurationType, dateStart, dateEnd);
pCommonData->SetDateSearchWorklistStart(dateStart);
pCommonData->SetDateSearchWorklistEnd(dateEnd);
QString strDateStart;
QString strDateEnd;
int nStartYear = dateStart.year();
int nStartMonth = dateStart.month();
int nStartDay = dateStart.day();
int nEndYear = dateEnd.year();
int nEndMonth = dateEnd.month();
int nEndDay = dateEnd.day();
strDateStart = QString("%1/%2/%3").arg(QString::number(nStartYear).rightJustified(4, '0')).arg(QString::number(nStartMonth).rightJustified(2, '0')).arg(QString::number(nStartDay).rightJustified(2, '0'));
strDateEnd = QString("%1/%2/%3").arg(QString::number(nEndYear).rightJustified(4, '0')).arg(QString::number(nEndMonth).rightJustified(2, '0')).arg(QString::number(nEndDay).rightJustified(2, '0'));
if(m_nSearchDurationType==SEARCH_TODAY)
{
ui->label_DateStart->setText("Today");
}
else
{
QString strSearchDate = QString("%1 ~ %2").arg(strDateStart).arg(strDateEnd);
ui->label_DateStart->setText(strSearchDate);
ui->pushButton_DateStart->update();
//ui->label_DateEnd->setText(strSearchDate);
}
/*
if(dateToday==dateStart)
{
ui->label_DateStart->setText("Today");
}
else
{
}
if(dateToday==dateEnd)
{
ui->label_DateEnd->setText("Today");
}
else
{
ui->label_DateEnd->setText(strDateEnd);
}
*/
SEARCH_ITEM* pSearchItem = pCommonData->GetSearchItemWorklist();
pSearchItem->m_strStudyDate = QString("%1-%2").arg(strDateStart).arg(strDateEnd);
//ui->pushButton_DateStart->setText(strDateStart);
//ui->pushButton_DateEnd->setText(strDateEnd);
}
void FormWorklist::Init()
{
WRITE_FUNCTION_LOG();
ui->widgetList->Clear();
ui->widgetList->ChangeHeader();
ui->widgetList->Init();
ui->widgetList->UpdateList();
}
void FormWorklist::on_pushButton_Execution_clicked()
{
WRITE_FUNCTION_LOG();
Exit();
}
void FormWorklist::resizeEvent(QResizeEvent *event)
{
WRITE_FUNCTION_LOG();
int nDisplayType = MainWindow::GetCommonData()->GetDisplayType();
int nFontSize = 22;
if(nDisplayType==SDISPLAY_1280X1024)
{
nFontSize = 16;
ui->frame_PatientID->setGeometry(20, 28, 156, 32);
ui->frame_PatientName->setGeometry(195, 28, 156, 32);
ui->pushButton_DateStart->setGeometry(376, 28, 278, 32);
ui->pushButton_DateEnd->setGeometry(580, 28, 178, 32);
ui->plainTextEdit_PatientID->setGeometry(30, 31, 140, 40);
ui->plainTextEdit_PatientName->setGeometry(205, 31, 140, 40);
ui->label_DateStart->setGeometry(18, 0, 260, 36);
ui->label_DateEnd->setGeometry(18, 0, 160, 36);
ui->widgetList->setGeometry(20, 91, 1150, 665-15);
ui->pushButton_Execution->setGeometry(1024, 91+665+30, 145, 45);
ui->pushButton_Emergency->setGeometry(20, 91+665+30, 145, 45);
ui->pushButton->setGeometry(1025, 21, 145, 45);
}
else if(nDisplayType==SDISPLAY_1920X1080)
{
ui->frame_PatientID->setGeometry(30, 34, 195, 40);
ui->frame_PatientName->setGeometry(250, 34, 195, 40);
ui->pushButton_DateStart->setGeometry(477, 34, 268, 40);
ui->pushButton_DateEnd->setGeometry(770, 34, 268, 40);
ui->plainTextEdit_PatientID->setGeometry(40, 40, 175, 50);
ui->plainTextEdit_PatientName->setGeometry(260, 40, 175, 50);
ui->label_DateStart->setGeometry(20, 0, 201, 40);
ui->label_DateEnd->setGeometry(20, 0, 201, 40);
ui->widgetList->setGeometry(30, 108, 1750, 640);
ui->pushButton_Execution->setGeometry(1598, 780, 180, 56);
ui->pushButton->setGeometry(1600, 24, 180, 56);
}
QString strPushButton = QString(
"QPushButton \
{ \
background: #153B44; \
font-family: 'Roboto'; \
font-size: %1px; \
font-weight: bold; \
border-radius: 8px; \
color: white; \
} \
\
QPushButton:pressed \
{ \
background: #1B4C54; \
}").arg(nFontSize);
ui->pushButton->setStyleSheet(strPushButton);
QString strPushButton_Execution = QString(
"QPushButton \
{ \
background: #FFFFFF; \
font-family: 'Roboto'; \
font-size: %1px; \
font-weight: bold; \
border-radius: 8px; \
color: black; \
} \
\
QPushButton:pressed \
{ \
background: #D8D8D8; \
}").arg(nFontSize);
ui->pushButton_Execution->setStyleSheet(strPushButton_Execution);
ui->pushButton_Execution->hide();
}
#include <QProcess>
void FormWorklist::on_pushButton_clicked()
{
WRITE_FUNCTION_LOG();
//QString strExec = "smplayer /home/birdhead/Videos/1.mp4";
//strExec = "nautilus /home/birdhead/Videos";
//QProcess::execute(strExec);
//return;
CommonData* pCommonData = MainWindow::GetCommonData();
QDate dateStart = pCommonData->GetDateSearchWorklistStart();
QDate dateEnd = pCommonData->GetDateSearchWorklistEnd();
pCommonData->GetSearchDateStartEnd(m_nSearchDurationType, dateStart, dateEnd);
pCommonData->SetDateSearchWorklistStart(dateStart);
pCommonData->SetDateSearchWorklistEnd(dateEnd);
vector<WorklistResponseData>* pListWorklist = pCommonData->GetWorklistData();
pListWorklist->clear();
pCommonData->ReleaseWorklistData();
ui->widgetList->Clear();
ui->widgetList->Init();
//SThreadSendDICOM* pThread = pCommonData->GetThreadSendDICOM();
m_pDialogSearchProgress->Init();
//pThread->SearchWorklist();
//m_TimerSearch.setSingleShot(true);
m_TimerSearch.start(1000*20);
m_pThreadWorklistSearch->SearchWorklist();
m_pDialogSearchProgress->exec();
//m_pDialogSearchProgress->show();
}
void FormWorklist::worklistUpdateComplete()
{
WRITE_FUNCTION_LOG();
m_TimerSearch.stop();
ui->widgetList->UpdateList();
m_pDialogSearchProgress->OnWorklistComplete();
}
void FormWorklist::worklistError()
{
WRITE_FUNCTION_LOG();
//CommonData::RestartNetworkManager();
m_TimerSearch.stop();
ui->widgetList->UpdateList();
m_pDialogSearchProgress->OnWorklistError();
}
void FormWorklist::SetWorklistProgress(int nValue)
{
if(nValue<0)
{
worklistError();
return;
}
m_pDialogSearchProgress->DisplayInfo(nValue);
//m_TimerSearch.stop();
}
void FormWorklist::on_plainTextEdit_PatientName_textChanged()
{
WRITE_FUNCTION_LOG();
CommonData* pCommonData = MainWindow::GetCommonData();
SEARCH_ITEM* pSearchItem = pCommonData->GetSearchItemWorklist();
QString strPatientName = ui->plainTextEdit_PatientName->toPlainText();
pSearchItem->m_strPatientName = strPatientName;
}
void FormWorklist::on_plainTextEdit_PatientID_textChanged()
{
WRITE_FUNCTION_LOG();
CommonData* pCommonData = MainWindow::GetCommonData();
SEARCH_ITEM* pSearchItem = pCommonData->GetSearchItemWorklist();
QString strPatientID = ui->plainTextEdit_PatientID->toPlainText();
pSearchItem->m_strPatientID = strPatientID;
}
void FormWorklist::on_pushButton_Emergency_clicked()
{
/*
MainWindow* pMainWindow = MainWindow::GetMainWindow();
pMainWindow->Exit();
return;
*/
WRITE_FUNCTION_LOG();
DialogEmergengy dlg(this);
MainWindow* pMainWindow = MainWindow::GetMainWindow();
pMainWindow->StopScreenSaverTimer();
if(dlg.exec()==QDialog::Accepted)
{
CommonData* pCommonData = MainWindow::GetCommonData();
ACQUISITION_INFO* pAcquisitionInfo = pCommonData->GetAcquisitionInfo();
QDateTime dt = QDateTime::currentDateTime();
int nYear = dt.date().year();
int nMonth = dt.date().month();
int nDay = dt.date().day();
int nHour = dt.time().hour();
int nMinute = dt.time().minute();
int nSecond = dt.time().second();
QString strPatientID;
QString strPatientName;
QString strPatientBirthDate;
QString strPatientSex;
QString strModality;
strModality = pCommonData->GetModality();
strPatientID = dlg.GetPatientID();
strPatientName = dlg.GetPatientName();
strPatientBirthDate = dlg.GetPatientBirthDate();
strPatientSex = dlg.GetPatientSex();
if(strPatientSex=="Male")
{
strPatientSex = "M";
}
else if(strPatientSex=="Female")
{
strPatientSex = "F";
}
else if(strPatientSex=="Other")
{
strPatientSex = "O";
}
if(strPatientBirthDate.size()<8)
{
strPatientBirthDate = QString("%1/%2/%3").arg(QString::number(nYear).rightJustified(4, '0')).arg(QString::number(nMonth).rightJustified(2, '0'))
.arg(QString::number(nDay).rightJustified(2, '0'));
}
strPatientBirthDate.remove('/');
strPatientBirthDate.remove('.');
if(strPatientID.size()>0 && strPatientName.size()>0 && strPatientSex.size()>0 && strPatientBirthDate.size()==8)
{
pAcquisitionInfo->Clear();
pAcquisitionInfo->GetPatientInfo()->strPatientID = strPatientID.toStdString().c_str();
pAcquisitionInfo->GetPatientInfo()->strPatientName = strPatientName.toStdString().c_str();
pAcquisitionInfo->GetStudyInfo()->strStudyInstanceUID = (QString("1.1.22.33.%1.1%2%3.1%4").arg(pAcquisitionInfo->GetPatientInfo()->strPatientID).arg(QString::number(nHour)).arg(QString::number(nMinute)).arg(QString::number(nSecond))).toStdString().c_str();
pAcquisitionInfo->GetStudyInfo()->strStudyDescription = "Emergengy Desc.";
pAcquisitionInfo->GetSeriesInfo()->strSeriesDescription = "Emergency Desc.";
pAcquisitionInfo->GetSeriesInfo()->strOperatorsName = "";
pAcquisitionInfo->GetPatientInfo()->strPatientSex = strPatientSex.toStdString().c_str();
pAcquisitionInfo->GetPatientInfo()->strPatientWeight = "";
pAcquisitionInfo->GetPatientInfo()->strPatientBirthDate = strPatientBirthDate.toStdString().c_str();
pAcquisitionInfo->GetSeriesInfo()->strModality = strModality.toStdString().c_str();
pCommonData->ReleaseAcquisitionInfo();
ChangeMenu(SMENU_CAPTURE);
}
else
{
pCommonData->ReleaseAcquisitionInfo();
}
}
pMainWindow->ResetScreenSaverTimer();
pMainWindow->StartScreenSaverTimer();
}
void FormWorklist::keyReleaseEvent(QKeyEvent *event)
{
WRITE_FUNCTION_LOG();
int nKey = event->key();
SThreadImageSave* pThread = MainWindow::GetCommonData()->GetThreadCaptureImage();
if(nKey==Qt::Key_F10)
{
pThread->MissCapture();
}
else if(nKey==Qt::Key_F11)
{
pThread->MissCapture();
}
}
void FormWorklist::OverTime()
{
TerminateThreadWorklistSearch();
CommonData::RestartNetworkManager();
usleep(1000*100);
CreateThreadWorklistSearch();
m_TimerSearch.stop();
ui->widgetList->UpdateList();
m_pDialogSearchProgress->DisplayInfo(-12);
//m_pDialogSearchProgress->exec();
}
void FormWorklist::ErrorPatientInfo()
{
ui->widgetList->SetExecMenu(false);
}