75 lines
2.0 KiB
C++
75 lines
2.0 KiB
C++
#include "MultyMessageDialogManager.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);
|
|
if(aMessageLevel == MessageLevel::Warning || aMessageLevel == MessageLevel::Error)
|
|
{
|
|
emit warningMessageAdded(aMessage);
|
|
}
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|