2022-06-08 17:06:38 +08:00
# include " MainWindow.h "
2022-07-13 11:34:26 +08:00
# include "ui_MainWindow.h"
2022-06-08 17:06:38 +08:00
2022-07-13 11:34:26 +08:00
# include <fstream>
2022-06-08 17:06:38 +08:00
# include <QHBoxLayout>
# include <QScrollBar>
# include <QDateTime>
# include <QGestureEvent>
# include <QDockWidget>
2023-08-31 14:26:54 +08:00
# include "InitializeWidget.h"
2023-09-11 16:29:30 +08:00
# include "ShutdownWidget.h"
2022-06-08 17:06:38 +08:00
# include "event/EventCenter.h"
2022-07-13 10:13:07 +08:00
# include "forms/TabFormWidget.h"
2023-08-21 11:21:35 +08:00
# include "forms/recon/ReconFormWidget.h"
2022-06-08 17:06:38 +08:00
# include "forms/select/SelectFormWidget.h"
# include "forms/scan/ScanFormWidget.h"
2022-07-14 14:43:33 +08:00
# include "forms/settings/SettingFormWidget.h"
2022-06-08 17:06:38 +08:00
# include "forms/TopBarWidget.h"
2022-07-20 16:45:33 +08:00
# include "dialogs/DialogManager.h"
2022-06-08 17:06:38 +08:00
# include "device/DeviceManager.h"
# include "errorhandle/GUIErrorHandle.h"
# include "LoginDialog.h"
# include "models/User.h"
# include "appvals/AppGlobalValues.h"
2022-06-14 14:03:19 +08:00
# include "components/UTextEdit.h"
2024-04-19 14:10:47 +08:00
# include "components/WarningMessageWidget.h"
2023-09-15 11:42:40 +08:00
# include "json/jsonobject.h"
2024-05-09 16:33:57 +08:00
# include "db/SQLHelper.h"
2023-09-15 11:42:40 +08:00
2022-06-08 17:06:38 +08:00
MainWindow : : MainWindow ( QWidget * aParent )
: QMainWindow ( aParent )
, mUI ( new Ui : : MainWindow )
, mDebugConsoleWidget ( nullptr )
, mTabWidget ( new QTabWidget ( this ) )
2023-08-31 14:26:54 +08:00
, mInitializWidget ( new InitializeWidget ( this ) )
2023-09-11 16:29:30 +08:00
, mShutdownWidget ( new ShutdownWidget ( nullptr ) )
2023-11-13 17:54:40 +08:00
, mTabInited ( false )
2022-06-08 17:06:38 +08:00
{
mUI - > setupUi ( this ) ;
this - > setWindowFlags ( Qt : : Window ) ;
2023-11-13 17:54:40 +08:00
2022-06-08 17:06:38 +08:00
initializeLayout ( ) ;
2022-07-13 11:34:26 +08:00
connect ( EventCenter : : Default ( ) , & EventCenter : : PatientSelected , this , & MainWindow : : switchToScanTab ) ;
2023-09-05 16:11:18 +08:00
connect ( EventCenter : : Default ( ) , & EventCenter : : RequestLogin , this , & MainWindow : : requestLogin , Qt : : QueuedConnection ) ;
2022-07-13 11:34:26 +08:00
connect ( EventCenter : : Default ( ) , & EventCenter : : LoginRoleChanged , this , & MainWindow : : resetRoleLayout ) ;
2022-06-08 17:06:38 +08:00
connect ( DeviceManager : : Default ( ) , & DeviceManager : : raiseGlobalError , this , & MainWindow : : triggerError ) ;
2022-08-10 15:28:59 +08:00
connect ( DeviceManager : : Default ( ) , & DeviceManager : : raiseGlobalInfo , this , & MainWindow : : triggerInfo ) ;
2022-07-13 11:34:26 +08:00
connect ( EventCenter : : Default ( ) , & EventCenter : : ReloadLanguage , this , & MainWindow : : reloadLanguage ) ;
2022-08-18 17:09:16 +08:00
connect ( EventCenter : : Default ( ) , & EventCenter : : RequestScreenSaver , this , & MainWindow : : requestScreenSaver ) ;
2023-08-31 14:26:54 +08:00
connect ( DeviceManager : : Default ( ) , & DeviceManager : : initializeFinished , this , & MainWindow : : requestLogin ) ;
connect ( DeviceManager : : Default ( ) , & DeviceManager : : initializeProgress , mInitializWidget , & InitializeWidget : : setMessage ) ;
2023-09-11 16:29:30 +08:00
connect ( DeviceManager : : Default ( ) , & DeviceManager : : shutdownDmsSended , this , & MainWindow : : showShutdownWidget ) ;
connect ( DeviceManager : : Default ( ) , & DeviceManager : : shutdownDmsFailed , this , & MainWindow : : processShutdownDmsFailed ) ;
2023-11-21 15:09:23 +08:00
2023-11-16 13:41:04 +08:00
connect ( EventCenter : : Default ( ) , & EventCenter : : LoginSuccess , this , [ this ] ( )
2023-08-31 14:26:54 +08:00
{
mInitializWidget - > setVisible ( false ) ;
2023-11-13 17:54:40 +08:00
} ) ;
2023-11-16 14:46:36 +08:00
2024-05-09 17:44:30 +08:00
connect ( EventCenter : : Default ( ) , & EventCenter : : UserVerificationSuccess , this , [ this ] ( )
2023-11-13 17:54:40 +08:00
{
if ( ! mTabInited ) {
mTabInited = true ;
initializeTabWidget ( ) ;
mTabWidget - > setCurrentIndex ( 0 ) ;
}
2023-08-31 14:26:54 +08:00
mTabWidget - > setVisible ( true ) ;
2023-11-16 14:46:36 +08:00
this - > update ( ) ;
2023-11-21 13:39:52 +08:00
QApplication : : processEvents ( ) ;
2022-07-13 11:34:26 +08:00
} ) ;
2024-04-01 16:02:40 +08:00
2024-05-09 16:33:57 +08:00
connect ( EventCenter : : Default ( ) , & EventCenter : : LoginSuccess , this , & MainWindow : : checkEmptyScanValidity ) ;
connect ( EventCenter : : Default ( ) , & EventCenter : : EmptyScanFinished , this , & MainWindow : : enableAllTabWidget ) ;
2024-05-29 17:14:09 +08:00
connect ( EventCenter : : Default ( ) , & EventCenter : : EmptyScanDataCorrupted , this , & MainWindow : : handleEmptyScanDataCorrupted ) ;
2024-05-09 16:33:57 +08:00
2024-04-01 16:02:40 +08:00
connect ( mTabWidget , & QTabWidget : : currentChanged , this , [ this ] ( int aIndex )
{
2024-06-06 17:48:50 +08:00
if ( aIndex = = 0 )
2024-04-01 16:02:40 +08:00
{
2024-06-06 17:48:50 +08:00
mTabWidget - > widget ( 0 ) - > setFocus ( ) ;
2024-04-01 16:02:40 +08:00
}
} ) ;
2024-05-24 13:49:54 +08:00
connect ( DeviceManager : : Default ( ) , & DeviceManager : : startAutoLocateResult , [ this ] ( bool aIsSucceed )
{
if ( aIsSucceed )
{
for ( int i = 0 ; i < mTabWidget - > count ( ) ; + + i )
{
if ( i ! = mTabWidget - > currentIndex ( ) )
{
mTabWidget - > setTabEnabled ( i , false ) ;
}
}
}
} ) ;
connect ( EventCenter : : Default ( ) , & EventCenter : : StopScanProcess , this , [ this ] ( )
{
for ( int i = 0 ; i < mTabWidget - > count ( ) ; + + i )
{
if ( i ! = mTabWidget - > currentIndex ( ) )
{
mTabWidget - > setTabEnabled ( i , true ) ;
}
}
} ) ;
2023-11-13 17:54:40 +08:00
2023-08-31 14:26:54 +08:00
GUIErrorHandle : : Default ( ) - > init ( ) ;
2022-07-20 16:45:33 +08:00
QApplication : : setActiveWindow ( centralWidget ( ) ) ;
2022-06-08 17:06:38 +08:00
}
MainWindow : : ~ MainWindow ( )
{
delete mUI ;
2023-09-11 16:29:30 +08:00
delete mShutdownWidget ;
2022-06-08 17:06:38 +08:00
}
2022-07-13 11:34:26 +08:00
//------Layout-----------------------------------------------------------------
2022-06-08 17:06:38 +08:00
void MainWindow : : loadStyleSheet ( const QString & aSheetName )
{
2022-07-19 14:15:00 +08:00
// QFile file(":/stylesheet/" + aSheetName + ".css");
// file.open(QFile::ReadOnly);
// if (file.isOpen())
// {
// QString styleSheet = this->styleSheet();
// styleSheet += QLatin1String(file.readAll());
// this->setStyleSheet(styleSheet);
// }
2022-06-08 17:06:38 +08:00
}
2022-07-13 11:34:26 +08:00
void MainWindow : : initializeLayout ( )
2022-06-08 17:06:38 +08:00
{
2022-07-14 09:57:05 +08:00
auto layout = new QVBoxLayout ( mUI - > mCentralWidget ) ;
2022-07-13 11:34:26 +08:00
layout - > setMargin ( 0 ) ;
layout - > setSpacing ( 0 ) ;
2024-04-19 14:10:47 +08:00
TopBarWidget * topBarWidget = new TopBarWidget ( this ) ;
auto popNotifications = new WarningMessageWidget ( this ) ;
popNotifications - > hide ( ) ;
connect ( topBarWidget , & TopBarWidget : : warnBtnClicked , [ = ] ( ) {
auto pos = topBarWidget - > mapToGlobal ( QPoint ( topBarWidget - > width ( ) , topBarWidget - > height ( ) ) ) ;
popNotifications - > setPopupArgs ( height ( ) , pos . x ( ) , pos . y ( ) ) ;
popNotifications - > show ( ) ;
} ) ;
2022-07-13 11:34:26 +08:00
layout - > addWidget ( topBarWidget ) ;
layout - > addWidget ( mTabWidget ) ;
2023-08-31 14:26:54 +08:00
layout - > addWidget ( mInitializWidget ) ;
mTabWidget - > setVisible ( false ) ;
2023-09-11 16:29:30 +08:00
mShutdownWidget - > setVisible ( false ) ;
2022-06-08 17:06:38 +08:00
}
2024-05-09 16:33:57 +08:00
void MainWindow : : checkEmptyScanValidity ( )
{
QDate lastScanDate = SQLHelper : : queryValue ( " SELECT ScanDateTime FROM EScan ORDER BY ScanDateTime DESC LIMIT 1 " ) . toDate ( ) ;
QDate expirationScanDate = lastScanDate . addMonths ( 1 ) ;
QDate currentDate = QDate : : currentDate ( ) ;
if ( currentDate . daysTo ( expirationScanDate ) < 0 )
{
mTabWidget - > setTabEnabled ( 0 , false ) ;
mTabWidget - > setTabEnabled ( 1 , false ) ;
mTabWidget - > setTabEnabled ( 2 , false ) ;
mTabWidget - > setCurrentIndex ( 3 ) ;
DialogManager : : Default ( ) - > requestAlertMessage ( tr ( " Please execute the empty scan, assist with system calibration, when empty scan is completed, the system should operate normally. " ) , OkOnly , tr ( " Warning " ) ) ;
return ;
}
if ( currentDate . daysTo ( expirationScanDate ) < 3 )
{
DialogManager : : Default ( ) - > requestAlertMessage ( tr ( " There are %1 days left until the next empty scan. Please remind users to conduct the empty scan in time. " ) . arg ( currentDate . daysTo ( expirationScanDate ) + 1 ) , OkOnly , tr ( " Warning " ) ) ;
return ;
}
}
2022-07-13 11:34:26 +08:00
void MainWindow : : initializeTabWidget ( )
2022-06-08 17:06:38 +08:00
{
2022-07-13 11:34:26 +08:00
mTabWidget - > setTabPosition ( QTabWidget : : South ) ;
mTabWidget - > setContentsMargins ( 0 , 0 , 0 , 0 ) ;
2024-05-24 13:49:54 +08:00
auto * systemForm = new SettingFormWidget ( this ) ;
mTabWidget - > insertTab ( 0 , systemForm , tr ( " Settings " ) ) ;
2023-08-21 11:21:35 +08:00
auto verifyForm = new ReconFormWidget ( this ) ;
2023-11-13 17:54:40 +08:00
mTabWidget - > insertTab ( 0 , verifyForm , tr ( " Recon " ) ) ;
auto selectForm = new SelectFormWidget ( this ) ;
mTabWidget - > insertTab ( 0 , selectForm , tr ( " Select " ) ) ;
2024-05-06 13:26:57 +08:00
auto scanForm = new ScanFormWidget ( this ) ;
mTabWidget - > insertTab ( 0 , scanForm , tr ( " Scan " ) ) ;
2023-11-13 17:54:40 +08:00
2022-07-13 11:34:26 +08:00
mTabWidget - > setSizePolicy ( QSizePolicy : : Expanding , QSizePolicy : : Expanding ) ;
2024-05-09 16:33:57 +08:00
2022-07-13 11:34:26 +08:00
}
2022-06-08 17:06:38 +08:00
2022-07-13 11:34:26 +08:00
void MainWindow : : reloadLanguage ( ) {
2024-05-06 13:26:57 +08:00
mTabWidget - > setTabText ( 0 , tr ( " Scan " ) ) ;
mTabWidget - > setTabText ( 1 , tr ( " Select " ) ) ;
2023-08-24 15:10:46 +08:00
mTabWidget - > setTabText ( 2 , tr ( " Recon " ) ) ;
2022-07-13 11:34:26 +08:00
mTabWidget - > setTabText ( 3 , tr ( " Settings " ) ) ;
2022-06-08 17:06:38 +08:00
}
2023-09-11 16:29:30 +08:00
void MainWindow : : showShutdownWidget ( )
{
mShutdownWidget - > setVisible ( true ) ;
}
void MainWindow : : processShutdownDmsFailed ( )
{
mShutdownWidget - > setVisible ( false ) ;
triggerError ( tr ( " Shut down failed, please push emergency button to shutdown. " ) ) ;
}
2023-09-15 11:42:40 +08:00
void MainWindow : : switchToScanTab ( QObject * sender , QObject * data ) {
2024-05-06 13:26:57 +08:00
if ( data ) mTabWidget - > setCurrentIndex ( 0 ) ;
2023-09-15 11:42:40 +08:00
}
2022-07-13 11:34:26 +08:00
void MainWindow : : centerWidgetHide ( )
2022-06-08 17:06:38 +08:00
{
2022-07-13 11:34:26 +08:00
mUI - > mCentralWidget - > setVisible ( false ) ;
2022-06-08 17:06:38 +08:00
}
2022-07-13 11:34:26 +08:00
void MainWindow : : centerWidgetShow ( )
2022-06-08 17:06:38 +08:00
{
2022-07-13 11:34:26 +08:00
mUI - > mCentralWidget - > setVisible ( true ) ;
2022-06-08 17:06:38 +08:00
}
void MainWindow : : triggerError ( const QString & aMessage )
{
QString message ( aMessage ) ;
EventCenter : : Default ( ) - > triggerEvent ( GUIErrorRaise , nullptr , ( QObject * ) & message ) ;
}
2022-08-10 15:28:59 +08:00
void MainWindow : : triggerInfo ( const QPair < QString , unsigned int > & aInfoData )
{
QPair < QString , unsigned int > infoData = aInfoData ;
EventCenter : : Default ( ) - > triggerEvent ( DeviceInfoRaise , nullptr , ( QObject * ) & infoData ) ;
}
2022-07-13 11:34:26 +08:00
//------events-----------------------------------------------------------------
2022-06-08 17:06:38 +08:00
//! [event handler]
bool MainWindow : : event ( QEvent * aEvent )
{
if ( aEvent - > type ( ) = = QEvent : : Gesture )
{
return gestureEvent ( static_cast < QGestureEvent * > ( aEvent ) ) ;
}
2022-07-14 09:57:05 +08:00
return QMainWindow : : event ( aEvent ) ;
2022-06-08 17:06:38 +08:00
}
2022-07-13 11:34:26 +08:00
void MainWindow : : changeEvent ( QEvent * aEvent )
{
if ( aEvent - > type ( ) = = QEvent : : LanguageChange )
{
mUI - > retranslateUi ( this ) ;
}
QWidget : : changeEvent ( aEvent ) ;
}
2022-07-14 09:57:05 +08:00
2022-07-13 11:34:26 +08:00
void MainWindow : : keyPressEvent ( QKeyEvent * event ) {
if ( event - > modifiers ( ) = = Qt : : ControlModifier & & event - > key ( ) = = Qt : : Key_R ) {
QFile file ( " D: \\ workdir \\ GUI \\ src \\ stylesheet \\ Dark2.css " ) ;
file . open ( QFile : : ReadOnly ) ;
if ( file . isOpen ( ) )
{
QString styleSheet = this - > styleSheet ( ) ;
styleSheet + = QLatin1String ( file . readAll ( ) ) ;
this - > setStyleSheet ( styleSheet ) ;
}
this - > update ( ) ;
}
QWidget : : keyPressEvent ( event ) ;
}
2022-06-08 17:06:38 +08:00
bool MainWindow : : gestureEvent ( QGestureEvent * aGestureEvent )
{
if ( QGesture * swipe = aGestureEvent - > gesture ( Qt : : SwipeGesture ) )
{
swipeTriggered ( static_cast < QSwipeGesture * > ( swipe ) ) ;
}
if ( QGesture * pan = aGestureEvent - > gesture ( Qt : : PanGesture ) )
{
panTriggered ( static_cast < QPanGesture * > ( pan ) ) ;
}
return true ;
}
2022-07-13 11:34:26 +08:00
void MainWindow : : grabGestures ( const QList < Qt : : GestureType > & aGestures )
{
//! [enable gestures]
foreach ( Qt : : GestureType gesture , aGestures )
{
grabGesture ( gesture ) ;
}
//! [enable gestures]
}
2022-06-08 17:06:38 +08:00
void MainWindow : : panTriggered ( QPanGesture * aPanGesture )
{
if ( aPanGesture - > state ( ) = = Qt : : GestureFinished )
{
QPointF delta = aPanGesture - > offset ( ) ;
int index = mTabWidget - > currentIndex ( ) ;
if ( delta . x ( ) > 50 )
{
index - - ;
if ( index > = 0 )
{
mTabWidget - > setCurrentIndex ( index ) ;
}
}
if ( delta . x ( ) < - 50 )
{
index + + ;
if ( index < mTabWidget - > count ( ) )
{
mTabWidget - > setCurrentIndex ( index ) ;
}
}
}
}
void MainWindow : : swipeTriggered ( QSwipeGesture * aSwipeGesture )
{
if ( aSwipeGesture - > state ( ) = = Qt : : GestureFinished )
{
}
}
2022-07-12 16:13:09 +08:00
2022-07-13 11:34:26 +08:00
//------actions & slots--------------------------------------------------------
void MainWindow : : requestLogin ( )
{
2022-08-10 15:28:59 +08:00
DialogManager : : Default ( ) - > requestLogin ( this ) ;
2022-07-19 14:15:00 +08:00
QApplication : : setActiveWindow ( centralWidget ( ) ) ;
2022-07-13 11:34:26 +08:00
}
2022-07-12 16:13:09 +08:00
2022-08-18 17:09:16 +08:00
void MainWindow : : requestScreenSaver ( )
{
DialogManager : : Default ( ) - > requestScreenSaverPlay ( ) ;
}
2022-07-14 09:57:05 +08:00
void MainWindow : : resetRoleLayout ( ) {
2024-05-24 13:49:54 +08:00
SettingFormWidget * settingWidget = dynamic_cast < SettingFormWidget * > ( mTabWidget - > widget ( 3 ) ) ;
if ( settingWidget = = nullptr )
{
return ;
}
2022-07-14 09:57:05 +08:00
if ( User : : Current ( ) - > isAdmin ( ) )
{
2024-05-24 13:49:54 +08:00
settingWidget - > showAdminArea ( ) ;
2022-07-14 09:57:05 +08:00
}
else
{
2024-05-24 13:49:54 +08:00
settingWidget - > hideAdminArea ( ) ;
2022-07-14 09:57:05 +08:00
}
}
2024-05-09 16:33:57 +08:00
void MainWindow : : enableAllTabWidget ( )
{
for ( int i = 0 ; i < mTabWidget - > count ( ) ; + + i )
{
mTabWidget - > setTabEnabled ( i , true ) ;
}
}
2024-05-29 17:14:09 +08:00
void MainWindow : : handleEmptyScanDataCorrupted ( )
{
mTabWidget - > setTabEnabled ( 0 , false ) ;
mTabWidget - > setTabEnabled ( 1 , false ) ;
mTabWidget - > setTabEnabled ( 2 , false ) ;
mTabWidget - > setCurrentIndex ( 3 ) ;
DialogManager : : Default ( ) - > requestAlertMessage ( tr ( " Due to empty scan data corruption on the server, needs to be execute the empty scan. No other operations can be conducted until the scan is complete. " ) , OkOnly , tr ( " Warning " ) ) ;
}