2023-08-21 11:21:35 +08:00
# include "ReconFormWidget.h"
2023-08-21 14:22:41 +08:00
# include "ui_TabFormWidget.h"
2023-08-21 11:21:35 +08:00
# include <QToolButton>
# include <QVBoxLayout>
# include <QHeaderView>
2023-08-24 15:10:46 +08:00
# include <QSqlRecord>
2023-08-25 14:35:41 +08:00
# include <QTimer>
2023-08-21 11:21:35 +08:00
# include "components/SlideTableView.h"
# include "db/SQLHelper.h"
2023-08-22 17:51:08 +08:00
# include "device/DeviceManager.h"
2023-08-21 11:21:35 +08:00
# include "ScanSearchCriteriaForm.h"
2023-08-22 17:51:08 +08:00
# include "ReconStateDelegate.h"
2023-09-11 17:00:30 +08:00
# include "ReconScanTimeDelegate.h"
2023-08-24 15:10:46 +08:00
# include "dialogs/DialogManager.h"
# include "log/UserOperationLog.h"
2023-08-21 11:21:35 +08:00
ReconFormWidget : : ReconFormWidget ( QWidget * parent )
: TabFormWidget ( parent )
, mBtnDiscard ( new QToolButton ( this ) )
, mBtnDelete ( new QToolButton ( this ) )
, mBtnRefresh ( new QToolButton ( this ) )
, mScanTable ( new SlideTableView ( this ) )
2023-08-22 17:51:08 +08:00
, mSearchWidget ( new ScanSearchCriteriaForm ( this ) )
, mModel ( nullptr )
2023-08-25 14:35:41 +08:00
, mRefreshTimer ( new QTimer ( this ) )
2023-08-22 17:51:08 +08:00
{
2023-08-21 11:21:35 +08:00
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
2023-08-22 17:51:08 +08:00
mSearchWidget - > setObjectName ( " SearchCriteriaForm " ) ;
ui - > horizontalLayout - > insertWidget ( 0 , mSearchWidget ) ;
2023-08-21 11:21:35 +08:00
insertVerticalLine ( 1 , ui - > horizontalLayout ) ;
auto * contentLayout = new QHBoxLayout ( this - > ui - > contentWidget ) ;
contentLayout - > setContentsMargins ( 0 , 0 , 0 , 0 ) ;
initTableView ( contentLayout ) ;
2023-09-05 16:32:38 +08:00
connect ( mBtnRefresh , & QToolButton : : clicked , [ ] ( )
{
LOG_USER_OPERATION ( " Update Recon State " )
DeviceManager : : Default ( ) - > updateReconState ( ) ;
} ) ;
2023-08-22 17:51:08 +08:00
connect ( DeviceManager : : Default ( ) , & DeviceManager : : updateReconStateFinished , mModel , & QSqlTableModel : : select ) ;
2023-08-25 14:35:41 +08:00
connect ( DeviceManager : : Default ( ) , & DeviceManager : : transferStatusUpdated , mModel , & QSqlTableModel : : select ) ;
2023-08-22 17:51:08 +08:00
connect ( mSearchWidget , & ScanSearchCriteriaForm : : searchFilterUpdated , this , & ReconFormWidget : : updateSearchFilter ) ;
2023-08-24 15:10:46 +08:00
connect ( mBtnDelete , & QToolButton : : clicked , this , & ReconFormWidget : : deleteReconRecord ) ;
2023-08-25 14:35:41 +08:00
connect ( mRefreshTimer , & QTimer : : timeout , this , & ReconFormWidget : : refreshTransferprogress ) ;
2023-08-22 17:51:08 +08:00
2023-08-21 11:21:35 +08:00
}
2023-08-22 17:51:08 +08:00
void ReconFormWidget : : initTableView ( QHBoxLayout * contentLayout )
{
// TableView for Scan
ReconStateDelegate * delegate = new ReconStateDelegate ( this ) ;
2023-08-24 15:10:46 +08:00
mScanTable - > setItemDelegateForColumn ( getTableColumnIndex ( " State " ) , delegate ) ;
2023-09-11 17:00:30 +08:00
ReconScanTimeDelegate * scanTimeDelegate = new ReconScanTimeDelegate ( this ) ;
mScanTable - > setItemDelegateForColumn ( getTableColumnIndex ( " ScanDateTime " ) , scanTimeDelegate ) ;
2023-08-21 11:21:35 +08:00
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
2023-08-22 17:51:08 +08:00
mScanTable - > setModel ( mModel ) ;
2023-08-24 15:10:46 +08:00
mScanTable - > hideColumn ( getTableColumnIndex ( " ScanID " ) ) ;
mScanTable - > hideColumn ( getTableColumnIndex ( " ReferenceID " ) ) ;
mScanTable - > hideColumn ( getTableColumnIndex ( " UpdateTime " ) ) ;
mScanTable - > setColumnWidth ( getTableColumnIndex ( " PatientID " ) , 200 ) ;
mScanTable - > setColumnWidth ( getTableColumnIndex ( " AccessionNumber " ) , 200 ) ;
2023-09-11 17:00:30 +08:00
mScanTable - > setColumnWidth ( getTableColumnIndex ( " ScanDateTime " ) , 200 ) ;
2023-08-24 15:10:46 +08:00
mScanTable - > setColumnWidth ( getTableColumnIndex ( " PatientName " ) , 200 ) ;
mScanTable - > setColumnWidth ( getTableColumnIndex ( " Laterality " ) , 100 ) ;
mScanTable - > setColumnWidth ( getTableColumnIndex ( " OperatorName " ) , 200 ) ;
2023-08-21 11:21:35 +08:00
contentLayout - > addWidget ( mScanTable ) ;
//table current row selection changing event
// after sort by column
}
2023-08-22 17:51:08 +08:00
void ReconFormWidget : : initDataModel ( )
{
//TODO:单独初始化预防SQL错误
2023-08-21 11:21:35 +08:00
mModel = SQLHelper : : getTable ( " Scan " ) ;
2023-08-24 15:10:46 +08:00
mModel - > sort ( getTableColumnIndex ( " ScanDateTime " ) , Qt : : DescendingOrder ) ;
2023-08-22 17:51:08 +08:00
updateSearchFilter ( ) ;
2023-08-24 15:10:46 +08:00
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 " ) ) ;
2023-08-21 11:21:35 +08:00
}
2023-08-22 17:51:08 +08:00
void ReconFormWidget : : updateSearchFilter ( )
{
mModel - > setFilter ( mSearchWidget - > getSearchFilter ( ) ) ;
mModel - > select ( ) ;
}
2023-08-24 15:10:46 +08:00
void ReconFormWidget : : showEvent ( QShowEvent * aEvent )
{
TabFormWidget : : showEvent ( aEvent ) ;
DeviceManager : : Default ( ) - > updateReconState ( ) ;
2023-08-25 14:35:41 +08:00
mRefreshTimer - > start ( 1000 ) ;
}
void ReconFormWidget : : hideEvent ( QHideEvent * aEvent )
{
mRefreshTimer - > stop ( ) ;
TabFormWidget : : hideEvent ( aEvent ) ;
2023-08-24 15:10:46 +08:00
}
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 ) ;
2023-09-05 16:32:38 +08:00
LOG_USER_OPERATION ( QString ( " Delete Recon, ID: %1 " ) . arg ( mModel - > index ( currentRowIndex , getTableColumnIndex ( " PatientID " ) ) . data ( ) . toString ( ) ) )
2023-08-24 15:10:46 +08:00
}
}
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 ) ;
}
2023-08-25 14:35:41 +08:00
void ReconFormWidget : : refreshTransferprogress ( )
{
if ( DeviceManager : : Default ( ) - > updateTransferProgress ( ) )
{
mScanTable - > viewport ( ) - > update ( ) ;
}
}