#include "ReconFormWidget.h" #include "ui_TabFormWidget.h" #include #include #include #include #include #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(); } }