299 lines
8.5 KiB
C++
299 lines
8.5 KiB
C++
#include "MainWindow.h"
|
|
#include "ui_MainWindow.h"
|
|
|
|
#include <fstream>
|
|
#include <QHBoxLayout>
|
|
#include <QScrollBar>
|
|
#include <QDateTime>
|
|
#include <QGestureEvent>
|
|
#include <QDockWidget>
|
|
|
|
#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<QString, unsigned int>& aInfoData)
|
|
{
|
|
QPair<QString, unsigned int> 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<QGestureEvent*>(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<QSwipeGesture*>(swipe));
|
|
}
|
|
if (QGesture* pan = aGestureEvent->gesture(Qt::PanGesture))
|
|
{
|
|
panTriggered(static_cast<QPanGesture*>(pan));
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void MainWindow::grabGestures(const QList<Qt::GestureType>& 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();
|
|
}
|