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

@@ -0,0 +1,71 @@
#include "MultyMessageDialogManager.h"
#include "MultyMessageDialog.h"
#include <QMutexLocker>
namespace
{
const int DIALOGS_MARGIN = 30;
const int GEOMETY_X = 1620;
const int GEOMETY_Y = 30;
}
MultyMessageDialogManager* MultyMessageDialogManager::getInstance()
{
static MultyMessageDialogManager instance;
return &instance;
}
MultyMessageDialogManager::MultyMessageDialogManager()
: QObject()
, mDialogParent(nullptr)
, mDialogList()
, mMutex()
{
}
MultyMessageDialogManager::~MultyMessageDialogManager()
{
}
void MultyMessageDialogManager::setDialogParent(QWidget* aParent)
{
mDialogParent = aParent;
}
void MultyMessageDialogManager::raiseDialog(const QString& aMessage,MessageLevel aMessageLevel)
{
QMutexLocker locker(&mMutex);
MultyMessageDialog* dialog = new MultyMessageDialog(aMessage,aMessageLevel,mDialogParent);
mDialogList.append(dialog);
int yDistance = GEOMETY_Y;
for (int i = 0; i < mDialogList.count() - 1; ++i)
{
yDistance += mDialogList.at(i)->size().height() + DIALOGS_MARGIN;
}
dialog->move(GEOMETY_X,yDistance);
dialog->show();
connect(dialog,&MultyMessageDialog::dialogDestroyed,this,&MultyMessageDialogManager::removeDestoryedDialog);
}
void MultyMessageDialogManager::removeDestoryedDialog()
{
QMutexLocker locker(&mMutex);
MultyMessageDialog* dialog = qobject_cast<MultyMessageDialog*>(sender());
if (nullptr == dialog)
{
return;
}
int index = mDialogList.indexOf(dialog);
if (index >= 0)
{
mDialogList.removeAt(index);
for (int i = 0; i < mDialogList.count(); ++i)
{
MultyMessageDialog* target = mDialogList.at(i);
target->stopShowAnimation();
QPoint position = target->mapToGlobal(QPoint(0, 0));
target->move(position.x(),position.y()-dialog->height()-DIALOGS_MARGIN);
}
}
}