// // 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); } }