188 lines
7.1 KiB
C++
188 lines
7.1 KiB
C++
|
|
#include "ReconFormWidget.h"
|
|
#include "ui_TabFormWidget.h"
|
|
|
|
#include <QToolButton>
|
|
#include <QVBoxLayout>
|
|
#include <QHeaderView>
|
|
#include <QSqlRecord>
|
|
#include <QTimer>
|
|
|
|
#include "components/SlideTableView.h"
|
|
#include "db/SQLHelper.h"
|
|
#include "device/DeviceManager.h"
|
|
#include "ScanSearchCriteriaForm.h"
|
|
#include "ReconStateDelegate.h"
|
|
#include "ReconScanTimeDelegate.h"
|
|
#include "dialogs/DialogManager.h"
|
|
#include "log/UserOperationLog.h"
|
|
|
|
ReconFormWidget::ReconFormWidget(QWidget *parent)
|
|
: TabFormWidget(parent)
|
|
, mBtnDiscard(new QToolButton(this))
|
|
, mBtnDelete(new QToolButton(this))
|
|
, mBtnRefresh(new QToolButton(this))
|
|
, mScanTable(new SlideTableView(this))
|
|
, mSearchWidget(new ScanSearchCriteriaForm(this))
|
|
, mModel(nullptr)
|
|
, mRefreshTimer(new QTimer(this))
|
|
{
|
|
auto layout = new QHBoxLayout(ui->commandWidget);
|
|
layout->setAlignment(Qt::AlignmentFlag::AlignLeft);
|
|
mBtnDiscard->setObjectName("btnDiscard");
|
|
mBtnDelete->setObjectName("btnDelete");
|
|
mBtnRefresh->setObjectName("btnRefreshData");
|
|
mBtnDiscard->setText(tr("Discard"));
|
|
mBtnDelete->setText(tr("Delete"));
|
|
mBtnRefresh->setText(tr("Refresh"));
|
|
|
|
layout->addWidget(mBtnDiscard);
|
|
layout->addWidget(mBtnDelete);
|
|
layout->addSpacerItem(new QSpacerItem(20,20,QSizePolicy::Expanding));
|
|
addVerticalLine(layout);
|
|
layout->addWidget(mBtnRefresh);
|
|
|
|
initDataModel();
|
|
//Init content widget
|
|
|
|
mSearchWidget->setObjectName("SearchCriteriaForm");
|
|
ui->horizontalLayout->insertWidget(0, mSearchWidget);
|
|
insertVerticalLine(1,ui->horizontalLayout);
|
|
auto* contentLayout = new QHBoxLayout(this->ui->contentWidget);
|
|
contentLayout->setContentsMargins(0, 0, 0, 0);
|
|
initTableView(contentLayout);
|
|
|
|
connect(mBtnRefresh, &QToolButton::clicked, []()
|
|
{
|
|
LOG_USER_OPERATION("Update Recon State")
|
|
DeviceManager::Default()->updateReconState();
|
|
});
|
|
connect(DeviceManager::Default(), &DeviceManager::updateReconStateFinished, mModel, &QSqlTableModel::select);
|
|
connect(DeviceManager::Default(), &DeviceManager::transferStatusUpdated, mModel, &QSqlTableModel::select);
|
|
connect(mSearchWidget, &ScanSearchCriteriaForm::searchFilterUpdated, this, &ReconFormWidget::updateSearchFilter);
|
|
connect(mBtnDelete, &QToolButton::clicked, this, &ReconFormWidget::deleteReconRecord);
|
|
connect(mRefreshTimer, &QTimer::timeout, this, &ReconFormWidget::refreshTransferprogress);
|
|
|
|
}
|
|
|
|
void ReconFormWidget::initTableView(QHBoxLayout *contentLayout)
|
|
{
|
|
// TableView for Scan
|
|
ReconStateDelegate* delegate = new ReconStateDelegate(this);
|
|
mScanTable->setItemDelegateForColumn(getTableColumnIndex("State"), delegate);
|
|
ReconScanTimeDelegate* scanTimeDelegate = new ReconScanTimeDelegate(this);
|
|
mScanTable->setItemDelegateForColumn(getTableColumnIndex("ScanDateTime"), scanTimeDelegate);
|
|
mScanTable->setAlternatingRowColors(true);
|
|
mScanTable->setSelectionMode(QAbstractItemView::SingleSelection);
|
|
mScanTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
|
mScanTable->setSelectionBehavior(QAbstractItemView::SelectRows);
|
|
mScanTable->verticalHeader()->setDefaultSectionSize(38);
|
|
mScanTable->horizontalHeader()->setStretchLastSection(true);
|
|
//data from SQLITE
|
|
//
|
|
//avoid pan comsumed by tableview!
|
|
mScanTable->viewport()->ungrabGesture(Qt::PanGesture);
|
|
|
|
mScanTable->setSortingEnabled(true); // enable sortingEnabled
|
|
mScanTable->setModel(mModel);
|
|
mScanTable->hideColumn(getTableColumnIndex("ScanID"));
|
|
mScanTable->hideColumn(getTableColumnIndex("ReferenceID"));
|
|
mScanTable->hideColumn(getTableColumnIndex("UpdateTime"));
|
|
|
|
mScanTable->setColumnWidth(getTableColumnIndex("PatientID"), 200);
|
|
mScanTable->setColumnWidth(getTableColumnIndex("AccessionNumber"), 200);
|
|
mScanTable->setColumnWidth(getTableColumnIndex("ScanDateTime"), 200);
|
|
mScanTable->setColumnWidth(getTableColumnIndex("PatientName"), 200);
|
|
mScanTable->setColumnWidth(getTableColumnIndex("Laterality"), 100);
|
|
mScanTable->setColumnWidth(getTableColumnIndex("OperatorName"), 200);
|
|
contentLayout->addWidget(mScanTable);
|
|
//table current row selection changing event
|
|
|
|
// after sort by column
|
|
}
|
|
|
|
void ReconFormWidget::initDataModel()
|
|
{
|
|
//TODO:单独初始化预防SQL错误
|
|
mModel = SQLHelper::getTable("Scan");
|
|
mModel->sort(getTableColumnIndex("ScanDateTime"), Qt::DescendingOrder);
|
|
updateSearchFilter();
|
|
|
|
mModel->setHeaderData(getTableColumnIndex("PatientID"), Qt::Horizontal, tr("Patient ID"));
|
|
mModel->setHeaderData(getTableColumnIndex("AccessionNumber"), Qt::Horizontal, tr("Accession Number"));
|
|
mModel->setHeaderData(getTableColumnIndex("PatientName"), Qt::Horizontal, tr("Patient Name"));
|
|
mModel->setHeaderData(getTableColumnIndex("ScanDateTime"), Qt::Horizontal, tr("Scan Time"));
|
|
mModel->setHeaderData(getTableColumnIndex("Laterality"), Qt::Horizontal, tr("Laterality"));
|
|
mModel->setHeaderData(getTableColumnIndex("OperatorName"), Qt::Horizontal, tr("Operator Name"));
|
|
mModel->setHeaderData(getTableColumnIndex("State"), Qt::Horizontal, tr("State"));
|
|
}
|
|
|
|
void ReconFormWidget::updateSearchFilter()
|
|
{
|
|
mModel->setFilter(mSearchWidget->getSearchFilter());
|
|
mModel->select();
|
|
}
|
|
|
|
void ReconFormWidget::showEvent(QShowEvent *aEvent)
|
|
{
|
|
TabFormWidget::showEvent(aEvent);
|
|
DeviceManager::Default()->updateReconState();
|
|
mRefreshTimer->start(1000);
|
|
}
|
|
|
|
void ReconFormWidget::hideEvent(QHideEvent *aEvent)
|
|
{
|
|
mRefreshTimer->stop();
|
|
TabFormWidget::hideEvent(aEvent);
|
|
}
|
|
|
|
void ReconFormWidget::deleteReconRecord()
|
|
{
|
|
if(mScanTable->currentIndex().row() < 0)
|
|
{
|
|
DialogManager::Default()->requestAlertMessage(tr("No data selected."), DialogButtonMode::OkOnly, tr("Alert"));
|
|
return;
|
|
}
|
|
|
|
int currentRowIndex = mScanTable->currentIndex().row();
|
|
int state = mModel->index(currentRowIndex, getTableColumnIndex("State")).data().toInt();
|
|
if(state != 999)
|
|
{
|
|
DialogManager::Default()->requestAlertMessage(tr("Can not delete this record before pacs succeed."), DialogButtonMode::OkOnly, tr("Alert"));
|
|
return;
|
|
}
|
|
QString patientName = mModel->index(currentRowIndex, getTableColumnIndex("PatientName")).data().toString();
|
|
if (DialogManager::Default()->requestAlertMessage(QString(tr("Delete recon record with patient \"%1\" ?")).arg(patientName),DialogButtonMode::OkAndCancel,tr("Confirm")) != QDialog::Accepted)
|
|
{
|
|
return;
|
|
}
|
|
mModel->removeRow(currentRowIndex);
|
|
if (mModel->submitAll())
|
|
{
|
|
mModel->select();
|
|
if (mModel->rowCount() > 0)
|
|
{
|
|
mScanTable->selectRow(0);
|
|
mModel->selectRow(0);
|
|
LOG_USER_OPERATION(QString("Delete Recon, ID: %1").arg(mModel->index(currentRowIndex, getTableColumnIndex("PatientID")).data().toString()))
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DialogManager::Default()->requestAlertMessage(tr("Can't delete selected record , db error!"), DialogButtonMode::OkOnly, tr("Alert"));
|
|
}
|
|
}
|
|
|
|
int ReconFormWidget::getTableColumnIndex(const QString& aColumnName)
|
|
{
|
|
return mModel->record().indexOf(aColumnName);
|
|
}
|
|
|
|
void ReconFormWidget::refreshTransferprogress()
|
|
{
|
|
if(DeviceManager::Default()->updateTransferProgress())
|
|
{
|
|
mScanTable->viewport()->update();
|
|
}
|
|
}
|