Add MultyMessageDialog.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user