#include "MainWindow.h" #include "ui_MainWindow.h" #include #include #include #include #include #include #include "InitializeWidget.h" #include "ShutdownWidget.h" #include "event/EventCenter.h" #include "forms/TabFormWidget.h" #include "forms/recon/ReconFormWidget.h" #include "forms/select/SelectFormWidget.h" #include "forms/scan/ScanFormWidget.h" #include "forms/settings/SettingFormWidget.h" #include "forms/TopBarWidget.h" #include "dialogs/DialogManager.h" #include "device/DeviceManager.h" #include "errorhandle/GUIErrorHandle.h" #include "LoginDialog.h" #include "models/User.h" #include "appvals/AppGlobalValues.h" #include "components/UTextEdit.h" #include "json/jsonobject.h" MainWindow::MainWindow(QWidget* aParent) : QMainWindow(aParent) , mUI(new Ui::MainWindow) , mDebugConsoleWidget(nullptr) , mTabWidget(new QTabWidget(this)) , mInitializWidget(new InitializeWidget(this)) , mShutdownWidget(new ShutdownWidget(nullptr)) , mAdminTabIndex(-1) , mThread(nullptr) , mTabInited(false) { mUI->setupUi(this); this->setWindowFlags(Qt::Window); initializeLayout(); connect(EventCenter::Default(), &EventCenter::PatientSelected, this,&MainWindow::switchToScanTab); connect(EventCenter::Default(), &EventCenter::RequestLogin, this,&MainWindow::requestLogin, Qt::QueuedConnection); connect(EventCenter::Default(), &EventCenter::LoginRoleChanged, this,&MainWindow::resetRoleLayout); connect(DeviceManager::Default(), &DeviceManager::raiseGlobalError, this, &MainWindow::triggerError); connect(DeviceManager::Default(), &DeviceManager::raiseGlobalInfo, this, &MainWindow::triggerInfo); connect(EventCenter::Default(), &EventCenter::ReloadLanguage, this, &MainWindow::reloadLanguage); connect(EventCenter::Default(), &EventCenter::RequestScreenSaver, this, &MainWindow::requestScreenSaver); connect(DeviceManager::Default(), &DeviceManager::initializeFinished, this, &MainWindow::requestLogin); connect(DeviceManager::Default(), &DeviceManager::initializeProgress, mInitializWidget, &InitializeWidget::setMessage); connect(DeviceManager::Default(), &DeviceManager::shutdownDmsSended, this, &MainWindow::showShutdownWidget); connect(DeviceManager::Default(), &DeviceManager::shutdownDmsFailed, this, &MainWindow::processShutdownDmsFailed); connect(DialogManager::Default(), &DialogManager::loginDialogShown, this, [this]() { mInitializWidget->setVisible(false); }); connect(EventCenter::Default(), &EventCenter::LoginSuccess, this, [this]() { if(!mTabInited){ mTabInited = true; initializeTabWidget(); mTabWidget->setCurrentIndex(0); } mTabWidget->setVisible(true); }); GUIErrorHandle::Default()->init(); QApplication::setActiveWindow(centralWidget()); } MainWindow::~MainWindow() { mThread->terminate(); mThread->deleteLater(); delete mUI; delete mShutdownWidget; } //------Layout----------------------------------------------------------------- void MainWindow::loadStyleSheet(const QString& aSheetName) { // QFile file(":/stylesheet/" + aSheetName + ".css"); // file.open(QFile::ReadOnly); // if (file.isOpen()) // { // QString styleSheet = this->styleSheet(); // styleSheet += QLatin1String(file.readAll()); // this->setStyleSheet(styleSheet); // } } void MainWindow::initializeLayout() { auto layout = new QVBoxLayout(mUI->mCentralWidget); layout->setMargin(0); layout->setSpacing(0); QWidget* topBarWidget = new TopBarWidget(this); layout->addWidget(topBarWidget); layout->addWidget(mTabWidget); layout->addWidget(mInitializWidget); mTabWidget->setVisible(false); mShutdownWidget->setVisible(false); } void MainWindow::initializeTabWidget() { mTabWidget->setTabPosition(QTabWidget::South); mTabWidget->setContentsMargins(0, 0, 0, 0); auto verifyForm = new ReconFormWidget(this); mTabWidget->insertTab(0,verifyForm, tr("Recon")); auto scanForm = new ScanFormWidget(this); mTabWidget->insertTab(0,scanForm, tr("Scan")); auto selectForm = new SelectFormWidget(this); mTabWidget->insertTab(0,selectForm, tr("Select")); mAdminTabIndex+=3; mTabWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); } void MainWindow::reloadLanguage() { mTabWidget->setTabText(0, tr("Select")); mTabWidget->setTabText(1, tr("Scan")); mTabWidget->setTabText(2, tr("Recon")); mTabWidget->setTabText(3, tr("Settings")); } void MainWindow::showShutdownWidget() { mShutdownWidget->setVisible(true); } void MainWindow::processShutdownDmsFailed() { mShutdownWidget->setVisible(false); triggerError(tr("Shut down failed, please push emergency button to shutdown.")); } void MainWindow::switchToScanTab(QObject* sender, QObject* data) { if (data)mTabWidget->setCurrentIndex(1); } void MainWindow::centerWidgetHide() { mUI->mCentralWidget->setVisible(false); } void MainWindow::centerWidgetShow() { mUI->mCentralWidget->setVisible(true); } void MainWindow::triggerError(const QString& aMessage) { QString message(aMessage); EventCenter::Default()->triggerEvent(GUIErrorRaise, nullptr, (QObject*)&message); } void MainWindow::triggerInfo(const QPair& aInfoData) { QPair infoData = aInfoData; EventCenter::Default()->triggerEvent(DeviceInfoRaise, nullptr, (QObject*)&infoData); } //------events----------------------------------------------------------------- //! [event handler] bool MainWindow::event(QEvent* aEvent) { if (aEvent->type() == QEvent::Gesture) { return gestureEvent(static_cast(aEvent)); } return QMainWindow::event(aEvent); } void MainWindow::changeEvent(QEvent* aEvent) { if (aEvent->type() == QEvent::LanguageChange) { mUI->retranslateUi(this); } QWidget::changeEvent(aEvent); } 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); } bool MainWindow::gestureEvent(QGestureEvent* aGestureEvent) { if (QGesture* swipe = aGestureEvent->gesture(Qt::SwipeGesture)) { swipeTriggered(static_cast(swipe)); } if (QGesture* pan = aGestureEvent->gesture(Qt::PanGesture)) { panTriggered(static_cast(pan)); } return true; } void MainWindow::grabGestures(const QList& aGestures) { //! [enable gestures] foreach(Qt::GestureType gesture, aGestures) { grabGesture(gesture); } //! [enable gestures] } 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) { } } //------actions & slots-------------------------------------------------------- void MainWindow::requestLogin() { DialogManager::Default()->requestLogin(this); QApplication::setActiveWindow(centralWidget()); } void MainWindow::requestScreenSaver() { DialogManager::Default()->requestScreenSaverPlay(); } void MainWindow::resetRoleLayout() { if (User::Current()->isAdmin()) { if (mAdminTabIndex == -1) { SettingFormWidget* form = new SettingFormWidget(this); mAdminTabIndex = mTabWidget->addTab(form, tr("Settings")); } } else { if (mAdminTabIndex != -1) { mTabWidget->removeTab(mAdminTabIndex); mAdminTabIndex = -1; } } qApp->processEvents(); }