Add MultyMessageDialog.
This commit is contained in:
71
src/dialogs/MultyMessageDialogManager.cpp
Normal file
71
src/dialogs/MultyMessageDialogManager.cpp
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user