Files
GUI/src/dialogs/MultyMessageDialogManager.cpp

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