#include "MultyMessageDialogManager.h" #include 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(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); } } }