#include "lts_message_dialog.h" #include "lts_message_dialog_helper.h" #include #include #include #include #include namespace LtsWidgets { namespace LtsMessageDialog { Button showMessage(QWidget* parent, const QString& message, const QString &title, const Behaviour behaviour, const Buttons buttons, const QHash &buttonTexts) { static QAtomicInt s_used = 0; if (s_used) qDebug() << "LtsMessageDialog: showMessage called while showMessage is in its Event Loop - do not open more than one Dialog at once !!"; s_used = 1; LtsMessageDialogHelper *dialog = new LtsMessageDialogHelper(); Button result = dialog->showMessage(parent, message, title, behaviour, buttons, buttonTexts); dialog->deleteLater(); s_used = 0; return result; } Button askApplyDiscardCancel(QWidget *parent) { const QString question = QCoreApplication::translate("LtsDialog", "
" "Apply - apply changes and close.
" "Discard - discard changes and close.
" "Cancel - do not close."); const QString title = QCoreApplication::translate("LtsDialog", "Unapplied changes made. Apply the changes?"); return LtsMessageDialog::showMessage(parent, question, title, Behaviour::Modal, Button::Apply | Button::Discard | Button::Cancel); } } LtsMessageDialogNew::LtsMessageDialogNew(QWidget *parent, const QString &message, const QString &title, const Behaviour behaviour, const Buttons buttons, const QHash &buttonTexts, bool deleteOnClose) { m_dialog = new LtsFramelessDialog(parent, behaviour); if (deleteOnClose) m_dialog->setAttribute(Qt::WA_DeleteOnClose); connect(m_dialog, &LtsFramelessDialog::destroyed, this, &LtsMessageDialogNew::deleteLater); QVBoxLayout *mainLayout = new QVBoxLayout(m_dialog); QString text; if (!title.isEmpty()) { text = QStringLiteral("%1

").arg(title); } text += message; QLabel *messageLabel = new QLabel(text, m_dialog); messageLabel->setTextInteractionFlags(Qt::TextSelectableByMouse); mainLayout->addWidget(messageLabel); QHBoxLayout *buttonLayout = new QHBoxLayout; buttonLayout->setMargin(0); if (buttons.testFlag(Button::Ok)) connect(addButton(buttonTexts.value(Button::Ok, tr("Ok")), buttonLayout, m_dialog, Button::Ok, parent), &QPushButton::clicked, this, &LtsMessageDialogNew::ok); if (buttons.testFlag(Button::Yes)) connect(addButton(buttonTexts.value(Button::Yes, tr("Yes")), buttonLayout, m_dialog, Button::Yes, parent), &QPushButton::clicked, this, &LtsMessageDialogNew::yes); if (buttons.testFlag(Button::No)) connect(addButton(buttonTexts.value(Button::No, tr("No")), buttonLayout, m_dialog, Button::No, parent), &QPushButton::clicked, this, &LtsMessageDialogNew::no); if (buttons.testFlag(Button::Apply)) connect(addButton(buttonTexts.value(Button::Apply, tr("Apply")), buttonLayout, m_dialog, Button::Apply, parent), &QPushButton::clicked, this, &LtsMessageDialogNew::apply); if (buttons.testFlag(Button::Discard)) connect(addButton(buttonTexts.value(Button::Discard, tr("Discard")), buttonLayout, m_dialog, Button::Discard, parent), &QPushButton::clicked, this, &LtsMessageDialogNew::discard); if (buttons.testFlag(Button::Cancel)) connect(addButton(buttonTexts.value(Button::Cancel, tr("Cancel")), buttonLayout, m_dialog, Button::Cancel, parent), &QPushButton::clicked, this, &LtsMessageDialogNew::cancel); QWidget *buttonLayoutWidget = new QWidget; buttonLayoutWidget->setLayout(buttonLayout); mainLayout->addWidget(buttonLayoutWidget); m_dialog->show(); m_dialog->raise(); } QPushButton* LtsMessageDialogNew::addButton(const QString &text, QHBoxLayout *thatLayout, LtsFramelessDialog *dialog, const Button &button, QWidget *parent) { QPushButton* btn = new QPushButton(text, parent); connect(btn, &QPushButton::clicked, dialog, &LtsFramelessDialog::accept); thatLayout->addWidget(btn); if (button == Button::Ok || button == Button::Cancel) { btn->setDefault(true); } return btn; } }