Add MultyMessageDialog.

This commit is contained in:
sunwen
2022-07-28 16:27:51 +08:00
parent b86b19e91d
commit 9b96af094b
15 changed files with 382 additions and 34 deletions

View File

@@ -7,60 +7,67 @@
#include <QApplication>
#include <QWidget>
#include <QThread>
#include <qDebug>
#include <QDebug>
#include "event/EventCenter.h"
#include "dialogs/GUIMessageDialog.h"
#include "dialogs/ChangePasswordFormDialog.h"
#include "dialogs/AccountFormDialog.h"
#include "dialogs/MultyMessageDialogManager.h"
#include "appvals/AppGlobalValues.h"
#include "windows/LoginDialog.h"
#include "shimlib/ShimLib.h"
void messageCallback(const char* aMessage,unsigned int aMessageLevel)
{
DialogManager::Default()->raiseMultyMessageDialog(QString::fromLatin1(aMessage),MessageLevel(aMessageLevel));
}
DialogManager::DialogManager()
: QObject()
, mFunctionDialog(nullptr)
, mMessageDialog(nullptr)
, topWidget(nullptr)
, mTopWidget(nullptr)
{
}
void DialogManager::init() {
void DialogManager::init(QWidget* aParent) {
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);
MultyMessageDialogManager::getInstance()->setDialogParent(aParent);
SetMessageCallback(messageCallback);
}
//得考虑多线程的问题
void DialogManager::setTopWidget(QWidget* widget) {
std::lock_guard<std::mutex> lockGuard(mutex);
if (!topWidget&& QApplication::activeWindow()){
topWidget = QApplication::activeWindow();
std::lock_guard<std::mutex> lockGuard(mMutex);
if (nullptr == widget)
{
return;
}
qDebug()<<"last top:"<<topWidget->objectName()<<", new top:"<<widget->objectName();
widget->setParent(topWidget,widget->windowFlags());
topWidget = widget;
if (!mTopWidget&& QApplication::activeWindow()){
mTopWidget = QApplication::activeWindow();
}
qDebug()<<"last top:"<<mTopWidget->objectName()<<", new top:"<<widget->objectName();
widget->setParent(mTopWidget,widget->windowFlags());
mTopWidget = widget;
++mDialogCount;
}
void DialogManager::releaseTopWidget(QWidget* expectedTopWidget) {
std::lock_guard<std::mutex> lockGuard(mutex);
if (topWidget == expectedTopWidget){
topWidget = expectedTopWidget->parentWidget();
std::lock_guard<std::mutex> lockGuard(mMutex);
if (nullptr == expectedTopWidget)
{
return;
}
else{
while (auto tempWidget = topWidget->parentWidget()){
if (tempWidget->parentWidget() == expectedTopWidget){
tempWidget->setParent(expectedTopWidget->parentWidget());
break;
}
}
if (mTopWidget == expectedTopWidget){
mTopWidget = expectedTopWidget->parentWidget();
--mDialogCount;
}
--mDialogCount;
}
void DialogManager::requestLogin()
@@ -119,7 +126,6 @@ void DialogManager::requestChangePassword() {
//考虑以后使用另外的dialog显示错误
void DialogManager::raiseDeviceError(QObject *parent, QObject *msg) {
clearMessageDialog();
//new dialog
auto dialog = new GUIMessageDialog;
if (msg) {
@@ -132,6 +138,7 @@ void DialogManager::raiseDeviceError(QObject *parent, QObject *msg) {
dialog->showExitButton();
setTopWidget(dialog);
dialog->setWindowModality(Qt::NonModal);
dialog->showFullScreen ();
dialog->exec();
releaseTopWidget(dialog);
dialog->deleteLater();
@@ -214,7 +221,6 @@ void DialogManager::invokeOperationEnd(QObject *parent, QObject *msg) {
mMessageDialog->accept();
}
delete mMessageDialog;
mMessageDialog = nullptr;
AppGlobalValues::setInProcessing(false);
}
}
@@ -223,10 +229,14 @@ void DialogManager::clearMessageDialog() {
if (mMessageDialog){
if (!mMessageDialog->isHidden()) mMessageDialog->hide();
delete mMessageDialog;
mMessageDialog = nullptr;
}
}
DialogManager::~DialogManager() {
clearMessageDialog();
}
void DialogManager::raiseMultyMessageDialog(const QString aMessage, MessageLevel aMessageLevel)
{
MultyMessageDialogManager::getInstance()->raiseDialog(aMessage, aMessageLevel);
}