From 6ba8b72cfae33823205a75bbfe707c35103235fe Mon Sep 17 00:00:00 2001 From: Krad Date: Tue, 19 Jul 2022 14:15:00 +0800 Subject: [PATCH] Add DialogManager --- src/dialogs/DialogManager.cpp | 130 ++++++++++++++++++++++++++++++++++ src/dialogs/DialogManager.h | 39 ++++++++++ src/main.cpp | 17 ++++- src/windows/MainWindow.cpp | 122 +++---------------------------- 4 files changed, 193 insertions(+), 115 deletions(-) create mode 100644 src/dialogs/DialogManager.cpp create mode 100644 src/dialogs/DialogManager.h diff --git a/src/dialogs/DialogManager.cpp b/src/dialogs/DialogManager.cpp new file mode 100644 index 0000000..015c2cd --- /dev/null +++ b/src/dialogs/DialogManager.cpp @@ -0,0 +1,130 @@ +// +// Created by Krad on 2022/7/19. +// + +#include "DialogManager.h" + +#include +#include + +#include "event/EventCenter.h" +#include "dialogs/GUIMessageDialog.h" +#include "appvals/AppGlobalValues.h" + +void DialogManager::init() { + connect(EventCenter::Default(), &EventCenter::DeviceErrorRaise,this,&DialogManager::raiseDeviceError); + connect(EventCenter::Default(), &EventCenter::InvokeOperationStart,this,&DialogManager::invokeOperationStart); + connect(EventCenter::Default(), &EventCenter::InvokeOperationProgress,this,&DialogManager::invokeOperationProgress); + connect(EventCenter::Default(), &EventCenter::InvokeOperationPending,this,&DialogManager::invokeOperationPending); + connect(EventCenter::Default(), &EventCenter::InvokeOperationEnd,this,&DialogManager::invokeOperationEnd); +} + +QWidget *DialogManager::getTopWidget() { + if (!topWidgetStore.isEmpty()) return topWidgetStore.top(); + return QApplication::activeWindow(); +} + +void DialogManager::raiseDeviceError(QObject *parent, QObject *msg) { + if (!this->getTopWidget()->isVisible()) return; + //new dialog + auto dialog = new GUIMessageDialog(this->getTopWidget()); + if (msg) + { + QString* str = (QString*)msg; + dialog->showMessage(*str); + } + else + { + dialog->showMessage("Something went error!"); + } + dialog->stopLoading(); + dialog->showExitButton(); + if (dialog->isHidden()) + { + topWidgetStore.push(dialog); + dialog->setWindowModality(Qt::NonModal); + dialog->exec(); + topWidgetStore.pop(); + } +} + +void DialogManager::invokeOperationStart(QObject *parent, QObject *msg) { + if (mMessageDialog) + { + mMessageDialog->hide(); + delete mMessageDialog; + } + mMessageDialog = new GUIMessageDialog(this->getTopWidget()); + if (msg) + { + QString* str = (QString*)msg; + mMessageDialog->showMessage(*str); + } + else + { + mMessageDialog->hideMessage(); + } + mMessageDialog->hideExitButton(); + mMessageDialog->startLoading(); + AppGlobalValues::setInProcessing(true); + if (mMessageDialog->isHidden()) + { + mMessageDialog->open(); + } +} + +void DialogManager::invokeOperationProgress(QObject *parent, QObject *msg) { + if (!mMessageDialog) mMessageDialog = new GUIMessageDialog(this->getTopWidget()); + if (msg) + { + QVariant* var = (QVariant*)msg; + if (mMessageDialog->Pending()) + { + mMessageDialog->stopPending(); + } + mMessageDialog->showMessage(var->toString()); + } + else + { + mMessageDialog->hideMessage(); + } + if (mMessageDialog->isHidden()) + { + mMessageDialog->show(); + } +} + +void DialogManager::invokeOperationPending(QObject *parent, QObject *msg) { + if (!mMessageDialog) return; + if (!mMessageDialog->Pending()) + { + mMessageDialog->startPending(); + QVariant* var = (QVariant*)msg; + mMessageDialog->showMessage(var->toString()); + } +} + +void DialogManager::invokeOperationEnd(QObject *parent, QObject *msg) { + if (!mMessageDialog) + { + return; + } + if (!mMessageDialog->isHidden()) + { + if (msg && ((QVariant*)msg)->toBool()) + { + mMessageDialog->stopLoading(); + mMessageDialog->showMessage("Scan completed!"); + mMessageDialog->showExitButton(); + mMessageDialog->setWindowModality(Qt::WindowModal); + mMessageDialog->exec(); + } + else + { + mMessageDialog->accept(); + } + delete mMessageDialog; + mMessageDialog = nullptr; + AppGlobalValues::setInProcessing(false); + } +} diff --git a/src/dialogs/DialogManager.h b/src/dialogs/DialogManager.h new file mode 100644 index 0000000..ff29a46 --- /dev/null +++ b/src/dialogs/DialogManager.h @@ -0,0 +1,39 @@ +// +// Created by Krad on 2022/7/19. +// + +#ifndef GUI_DIALOGMANAGER_H +#define GUI_DIALOGMANAGER_H + +#include +#include + +class QWidget; +class QDialog; +class GUIMessageDialog; + +class DialogManager:public QObject { +public: + static DialogManager *Default() { + static DialogManager manager; + return &manager; + } + + DialogManager() = default; + + ~DialogManager() override = default; + + void init(); + QWidget* getTopWidget(); + void raiseDeviceError(QObject* parent, QObject* msg); + void invokeOperationStart(QObject* parent, QObject* msg); + void invokeOperationProgress(QObject* parent, QObject* msg); + void invokeOperationPending(QObject* parent, QObject* msg); + void invokeOperationEnd(QObject* parent, QObject* msg); +private: + QDialog* mDialog = nullptr; + GUIMessageDialog* mMessageDialog = nullptr; + QStack topWidgetStore; +}; + +#endif //GUI_DIALOGMANAGER_H diff --git a/src/main.cpp b/src/main.cpp index 8996c00..2094244 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,6 +11,7 @@ #include "log/UserOperationLog.h" #include #include +#include "dialogs/DialogManager.h" #include "json/jsonobject.h" #include "src/utilities/Locker.h" #include "src/utilities/LanguageSwitcher.h" @@ -60,6 +61,14 @@ int main(int argc, char* argv[]) QFont font(fontName); QApplication::setFont(font); + QFile file(":/stylesheet/Dark2.css"); + file.open(QFile::ReadOnly); + if (file.isOpen()) + { + a.setStyleSheet(QLatin1String(file.readAll())); + } + + SQLHelper::Open(); MainWindow w; UserOperationLog::Default()->init(); @@ -93,10 +102,11 @@ int main(int argc, char* argv[]) Timer.start(1000); thread.start(); - - DeviceManager::Default()->initDevice(); w.requestLogin(); + DialogManager::Default()->init(); + DeviceManager::Default()->initDevice(); + ret = a.exec(); thread.terminate(); @@ -104,8 +114,9 @@ int main(int argc, char* argv[]) else { w.showFullScreen(); - DeviceManager::Default()->initDevice(); w.requestLogin(); + DialogManager::Default()->init(); + DeviceManager::Default()->initDevice(); ret = a.exec(); } DeviceManager::Default()->close(); diff --git a/src/windows/MainWindow.cpp b/src/windows/MainWindow.cpp index 4fb2097..770f2ca 100644 --- a/src/windows/MainWindow.cpp +++ b/src/windows/MainWindow.cpp @@ -35,115 +35,11 @@ MainWindow::MainWindow(QWidget* aParent) , mIsDebugMode(false) { mUI->setupUi(this); - this->loadStyleSheet("Dark2"); this->setWindowFlags(Qt::Window); initializeTabWidget(); initializeLayout(); - - connect(EventCenter::Default(), &EventCenter::DeviceErrorRaise, [=](QObject* parent, QObject* msg) { - if (!this->isVisible()) return; - //默认旧模式 - if (!mMessageDialog) - { - mMessageDialog = new GUIMessageDialog(this); - } - if (msg) - { - QString* str = (QString*)msg; - mMessageDialog->showMessage(*str); - } - else - { - mMessageDialog->showMessage("Something went error!"); - } - mMessageDialog->stopLoading(); - mMessageDialog->showExitButton(); - if (mMessageDialog->isHidden()) - { - mMessageDialog->setWindowModality(Qt::NonModal); - mMessageDialog->exec(); - } - }); - connect(EventCenter::Default(), &EventCenter::InvokeOperationStart, [=](QObject*, QObject* msg) { - if (mMessageDialog) - { - mMessageDialog->hide(); - delete mMessageDialog; - } - mMessageDialog = new GUIMessageDialog(this); - if (msg) - { - QString* str = (QString*)msg; - mMessageDialog->showMessage(*str); - } - else - { - mMessageDialog->hideMessage(); - } - mMessageDialog->hideExitButton(); - mMessageDialog->startLoading(); - AppGlobalValues::setInProcessing(true); - // msgDialog->showFullScreen(); - if (mMessageDialog->isHidden()) - { - mMessageDialog->show(); - } - }); - connect(EventCenter::Default(), &EventCenter::InvokeOperationProgress, [=](QObject*, QObject* msg) { - if (!mMessageDialog) mMessageDialog = new GUIMessageDialog(this); - if (msg) - { - QVariant* var = (QVariant*)msg; - if (mMessageDialog->Pending()) - { - mMessageDialog->stopPending(); - } - mMessageDialog->showMessage(var->toString()); - } - else - { - mMessageDialog->hideMessage(); - } - if (mMessageDialog->isHidden()) - { - mMessageDialog->show(); - } - }); - connect(EventCenter::Default(), &EventCenter::InvokeOperationPending, [=](QObject*, QObject* msg) { - if (!mMessageDialog) return; - if (!mMessageDialog->Pending()) - { - mMessageDialog->startPending(); - QVariant* var = (QVariant*)msg; - mMessageDialog->showMessage(var->toString()); - } - }); - connect(EventCenter::Default(), &EventCenter::InvokeOperationEnd, [=](QObject*, QObject* v) { - if (!mMessageDialog) - { - return; - } - if (!mMessageDialog->isHidden()) - { - if (v && ((QVariant*)v)->toBool()) - { - mMessageDialog->stopLoading(); - mMessageDialog->showMessage("Scan completed!"); - mMessageDialog->showExitButton(); - mMessageDialog->setWindowModality(Qt::WindowModal); - mMessageDialog->exec(); - } - else - { - mMessageDialog->accept(); - } - delete mMessageDialog; - mMessageDialog = nullptr; - AppGlobalValues::setInProcessing(false); - } - }); connect(EventCenter::Default(), &EventCenter::PatientSelected, this,&MainWindow::switchToScanTab); connect(EventCenter::Default(), &EventCenter::RequestLogin, this,&MainWindow::requestLogin); connect(EventCenter::Default(), &EventCenter::LoginRoleChanged, this,&MainWindow::resetRoleLayout); @@ -182,14 +78,14 @@ MainWindow::~MainWindow() 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); - } +// 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() @@ -374,12 +270,14 @@ void MainWindow::requestLogin() mLoginDialog->setWindowModality(Qt::WindowModal); mLoginDialog->showFullScreen(); centerWidgetHide(); + QApplication::setActiveWindow(mLoginDialog); while (QDialog::Accepted != mLoginDialog->result()) { mLoginDialog->exec(); } mLoginDialog->setResult(QDialog::Rejected); centerWidgetShow(); + QApplication::setActiveWindow(centralWidget()); } void MainWindow::resetRoleLayout() {