Add DialogManager

This commit is contained in:
Krad
2022-07-19 14:15:00 +08:00
parent 3ccc8d7fa8
commit 6ba8b72cfa
4 changed files with 193 additions and 115 deletions

View File

@@ -0,0 +1,130 @@
//
// Created by Krad on 2022/7/19.
//
#include "DialogManager.h"
#include <QApplication>
#include <QWidget>
#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);
}
}