1 /*********
2 *
3 * This file is part of BibleTime's source code, http://www.bibletime.info/.
4 *
5 * Copyright 1999-2016 by the BibleTime developers.
6 * The BibleTime source code is licensed under the GNU General Public License version 2.0.
7 *
8 **********/
9 
10 #include "messagedialog.h"
11 
12 #include <QAction>
13 #include <QDialogButtonBox>
14 #include <QMessageBox>
15 #include <QPushButton>
16 #include "util/btassert.h"
17 
18 
19 namespace message {
20 
21 namespace {
22 
replaceText(QDialogButtonBox * box,QDialogButtonBox::StandardButton flag,const QString & text)23 void replaceText(QDialogButtonBox *box, QDialogButtonBox::StandardButton flag,
24                  const QString &text) {
25     QPushButton *button(box->button(flag));
26     if (button != nullptr) {
27         button->setText(text);
28     }
29 }
30 
bt_messageBox(QMessageBox::Icon icon,QWidget * parent,const QString & title,const QString & text,QMessageBox::StandardButtons buttons,QMessageBox::StandardButton defaultButton)31 QMessageBox::StandardButton bt_messageBox(QMessageBox::Icon icon,
32                                           QWidget * parent,
33                                           const QString &title,
34                                           const QString &text,
35                                           QMessageBox::StandardButtons buttons,
36                                           QMessageBox::StandardButton defaultButton)
37 {
38     QMessageBox messageBox(icon, title, text, QMessageBox::Ok, parent);
39     messageBox.setTextFormat(Qt::RichText);
40     //We need the button box to translate the strings (the idea of this whole function)
41     QDialogButtonBox* box = dynamic_cast<QDialogButtonBox*>(messageBox.button(QMessageBox::Ok)->parent());
42     BT_ASSERT(box);
43     messageBox.setStandardButtons(buttons);
44     messageBox.setDefaultButton(defaultButton);
45     prepareDialogBox(box);
46     return static_cast<QMessageBox::StandardButton>(messageBox.exec());
47 }
48 
49 } // anonymous namespace
50 
setQActionCheckedNoTrigger(QAction * const action,const bool checked)51 void setQActionCheckedNoTrigger(QAction * const action, const bool checked) {
52     BT_ASSERT(action);
53     const bool signalsWereBlocked = action->blockSignals(true);
54     action->setChecked(checked);
55     action->blockSignals(signalsWereBlocked);
56 }
57 
prepareDialogBox(QDialogButtonBox * box)58 void prepareDialogBox(QDialogButtonBox *box) {
59     replaceText(box, QDialogButtonBox::Ok      , QPushButton::tr("OK"        , "Dialog Button"));
60     replaceText(box, QDialogButtonBox::Open    , QPushButton::tr("Open"      , "Dialog Button"));
61     replaceText(box, QDialogButtonBox::Save    , QPushButton::tr("Save"      , "Dialog Button"));
62     replaceText(box, QDialogButtonBox::Cancel  , QPushButton::tr("Cancel"    , "Dialog Button"));
63     replaceText(box, QDialogButtonBox::Close   , QPushButton::tr("Close"     , "Dialog Button"));
64     replaceText(box, QDialogButtonBox::Discard , QPushButton::tr("Discard"   , "Dialog Button"));
65     replaceText(box, QDialogButtonBox::Apply   , QPushButton::tr("Apply"     , "Dialog Button"));
66     replaceText(box, QDialogButtonBox::Reset   , QPushButton::tr("Reset"     , "Dialog Button"));
67     replaceText(box, QDialogButtonBox::RestoreDefaults, QPushButton::tr("Restore defaults", "Dialog Button"));
68     replaceText(box, QDialogButtonBox::Help    , QPushButton::tr("Help"      , "Dialog Button"));
69     replaceText(box, QDialogButtonBox::SaveAll , QPushButton::tr("Save All"  , "Dialog Button"));
70     replaceText(box, QDialogButtonBox::Yes     , QPushButton::tr("Yes"       , "Dialog Button"));
71     replaceText(box, QDialogButtonBox::YesToAll, QPushButton::tr("Yes to all", "Dialog Button"));
72     replaceText(box, QDialogButtonBox::No      , QPushButton::tr("No"        , "Dialog Button"));
73     replaceText(box, QDialogButtonBox::NoToAll , QPushButton::tr("No to all" , "Dialog Button"));
74 }
75 
showWarning(QWidget * parent,const QString & title,const QString & text,QMessageBox::StandardButtons buttons,QMessageBox::StandardButton defaultButton)76 QMessageBox::StandardButton showWarning(QWidget * parent, const QString & title, const QString & text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) {
77     return bt_messageBox(QMessageBox::Warning, parent, title, text, buttons, defaultButton);
78 }
79 
showInformation(QWidget * parent,const QString & title,const QString & text,QMessageBox::StandardButtons buttons,QMessageBox::StandardButton defaultButton)80 QMessageBox::StandardButton showInformation(QWidget * parent, const QString & title, const QString & text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) {
81     return bt_messageBox(QMessageBox::Information, parent, title, text, buttons, defaultButton);
82 }
83 
showCritical(QWidget * parent,const QString & title,const QString & text,QMessageBox::StandardButtons buttons,QMessageBox::StandardButton defaultButton)84 QMessageBox::StandardButton showCritical(QWidget * parent, const QString & title, const QString & text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) {
85     return bt_messageBox(QMessageBox::Critical, parent, title, text, buttons, defaultButton);
86 }
87 
showQuestion(QWidget * parent,const QString & title,const QString & text,QMessageBox::StandardButtons buttons,QMessageBox::StandardButton defaultButton)88 QMessageBox::StandardButton showQuestion(QWidget * parent, const QString & title, const QString & text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) {
89     return bt_messageBox(QMessageBox::Question, parent, title, text, buttons, defaultButton);
90 }
91 
92 } // namespace message
93