Files
GUI/src/windows/MainWindow.cpp

299 lines
8.5 KiB
C++
Raw Normal View History

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"
#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"
#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"
#include "components/UTextEdit.h"
2023-09-15 11:42:40 +08:00
#include "json/jsonobject.h"
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))
2022-06-08 17:06:38 +08:00
, mAdminTabIndex(-1)
, mThread(nullptr)
, mTabInited(false)
2022-06-08 17:06:38 +08:00
{
mUI->setupUi(this);
this->setWindowFlags(Qt::Window);
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);
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);
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-08-31 14:26:54 +08:00
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);
}
2023-08-31 14:26:54 +08:00
mTabWidget->setVisible(true);
2022-07-13 11:34:26 +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()
{
mThread->terminate();
2022-06-08 17:06:38 +08:00
mThread->deleteLater();
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
{
auto layout = new QVBoxLayout(mUI->mCentralWidget);
2022-07-13 11:34:26 +08:00
layout->setMargin(0);
layout->setSpacing(0);
QWidget* topBarWidget = new TopBarWidget(this);
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
}
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);
2023-08-21 11:21:35 +08:00
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;
2022-07-13 11:34:26 +08:00
mTabWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
}
2022-06-08 17:06:38 +08:00
2022-07-13 11:34:26 +08:00
void MainWindow::reloadLanguage() {
mTabWidget->setTabText(0, tr("Select"));
mTabWidget->setTabText(1, tr("Scan"));
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) {
if (data)mTabWidget->setCurrentIndex(1);
}
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);
}
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));
}
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-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()
{
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();
}
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();
}