/* * Copyright (C) 2013 Felix Geyer * Copyright (C) 2018 KeePassXC Team * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "MessageBox.h" MessageBox::Button MessageBox::m_nextAnswer(MessageBox::NoButton); QMap MessageBox::m_addedButtonLookup = QMap(); QMap> MessageBox::m_buttonDefs = QMap>(); void MessageBox::initializeButtonDefs() { m_buttonDefs = QMap>{ // Reimplementation of Qt StandardButtons {Ok, {stdButtonText(QMessageBox::Ok), QMessageBox::ButtonRole::AcceptRole}}, {Open, {stdButtonText(QMessageBox::Open), QMessageBox::ButtonRole::AcceptRole}}, {Save, {stdButtonText(QMessageBox::Save), QMessageBox::ButtonRole::AcceptRole}}, {Cancel, {stdButtonText(QMessageBox::Cancel), QMessageBox::ButtonRole::RejectRole}}, {Close, {stdButtonText(QMessageBox::Close), QMessageBox::ButtonRole::RejectRole}}, {Discard, {stdButtonText(QMessageBox::Discard), QMessageBox::ButtonRole::DestructiveRole}}, {Apply, {stdButtonText(QMessageBox::Apply), QMessageBox::ButtonRole::ApplyRole}}, {Reset, {stdButtonText(QMessageBox::Reset), QMessageBox::ButtonRole::ResetRole}}, {RestoreDefaults, {stdButtonText(QMessageBox::RestoreDefaults), QMessageBox::ButtonRole::ResetRole}}, {Help, {stdButtonText(QMessageBox::Help), QMessageBox::ButtonRole::HelpRole}}, {SaveAll, {stdButtonText(QMessageBox::SaveAll), QMessageBox::ButtonRole::AcceptRole}}, {Yes, {stdButtonText(QMessageBox::Yes), QMessageBox::ButtonRole::YesRole}}, {YesToAll, {stdButtonText(QMessageBox::YesToAll), QMessageBox::ButtonRole::YesRole}}, {No, {stdButtonText(QMessageBox::No), QMessageBox::ButtonRole::NoRole}}, {NoToAll, {stdButtonText(QMessageBox::NoToAll), QMessageBox::ButtonRole::NoRole}}, {Abort, {stdButtonText(QMessageBox::Abort), QMessageBox::ButtonRole::RejectRole}}, {Retry, {stdButtonText(QMessageBox::Retry), QMessageBox::ButtonRole::AcceptRole}}, {Ignore, {stdButtonText(QMessageBox::Ignore), QMessageBox::ButtonRole::AcceptRole}}, // KeePassXC Buttons {Overwrite, {QMessageBox::tr("Overwrite"), QMessageBox::ButtonRole::AcceptRole}}, {Delete, {QMessageBox::tr("Delete"), QMessageBox::ButtonRole::AcceptRole}}, {Move, {QMessageBox::tr("Move"), QMessageBox::ButtonRole::AcceptRole}}, {Empty, {QMessageBox::tr("Empty"), QMessageBox::ButtonRole::AcceptRole}}, {Remove, {QMessageBox::tr("Remove"), QMessageBox::ButtonRole::AcceptRole}}, {Skip, {QMessageBox::tr("Skip"), QMessageBox::ButtonRole::AcceptRole}}, {Disable, {QMessageBox::tr("Disable"), QMessageBox::ButtonRole::AcceptRole}}, {Merge, {QMessageBox::tr("Merge"), QMessageBox::ButtonRole::AcceptRole}}, }; } QString MessageBox::stdButtonText(QMessageBox::StandardButton button) { QMessageBox buttonHost; return buttonHost.addButton(button)->text(); } MessageBox::Button MessageBox::messageBox(QWidget* parent, QMessageBox::Icon icon, const QString& title, const QString& text, MessageBox::Buttons buttons, MessageBox::Button defaultButton, MessageBox::Action action) { if (m_nextAnswer == MessageBox::NoButton) { QMessageBox msgBox(parent); msgBox.setIcon(icon); msgBox.setWindowTitle(title); msgBox.setText(text); for (uint64_t b = First; b <= Last; b <<= 1) { if (b & buttons) { QString text = m_buttonDefs[static_cast