kwave  18.07.70
MessageBox.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  MessageBox.cpp - threasafe wrapper for KMessageBox
3  -------------------
4  begin : Sun Apr 13 2008
5  copyright : (C) 2008 by Thomas Eschenbacher
6  email : Thomas.Eschenbacher@gmx.de
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #include "config.h"
19 
20 #include <QApplication>
21 #include <QThread>
22 #include <QWidget>
23 
24 #include <KMessageBox>
25 
26 #include "libkwave/MessageBox.h"
27 
28 //***************************************************************************
29 Kwave::MessageBox::MessageBox(KMessageBox::DialogType mode, QWidget *parent,
30  QString message, QString caption,
31  const QString &button1, const QString &button2,
32  const QString &dontAskAgainName)
33  :QObject(Q_NULLPTR), m_semaphore(0), m_retval(-1),
34  m_mode(mode), m_parent(parent), m_message(message), m_caption(caption),
35  m_button1(button1), m_button2(button2),
36  m_dont_ask_again_name(dontAskAgainName)
37 {
38  if (QThread::currentThread() == QApplication::instance()->thread()) {
39  // we are already in the GUI thread -> direct call
40  show();
41  } else {
42  // schedule execution in the GUI thread ...
43  Trigger *trigger = new Trigger(*this);
44  trigger->deleteLater();
45 
46  // ... and wait
47  m_semaphore.acquire();
48  }
49 }
50 
51 //***************************************************************************
53 {
54  return m_retval;
55 }
56 
57 //***************************************************************************
59 {
60 }
61 
62 //***************************************************************************
64  QString message, QString caption,
65  const QString buttonYes, const QString buttonNo,
66  const QString &dontAskAgainName)
67 {
68  return Kwave::MessageBox::exec(KMessageBox::QuestionYesNo,
69  parent, message, caption, buttonYes, buttonNo,
70  dontAskAgainName);
71 }
72 
73 //***************************************************************************
75  QString message, QString caption,
76  const QString buttonYes, const QString buttonNo,
77  const QString &dontAskAgainName)
78 {
79  return Kwave::MessageBox::exec(KMessageBox::QuestionYesNoCancel,
80  parent, message, caption, buttonYes, buttonNo,
81  dontAskAgainName);
82 }
83 
84 //***************************************************************************
85 int Kwave::MessageBox::sorry(QWidget *parent,
86  QString message, QString caption)
87 {
88  return Kwave::MessageBox::exec(KMessageBox::Sorry,
89  parent, message, caption);
90 }
91 
92 //***************************************************************************
93 int Kwave::MessageBox::warningYesNo(QWidget *parent,
94  QString message, QString caption,
95  const QString buttonYes, const QString buttonNo,
96  const QString &dontAskAgainName)
97 {
98  return Kwave::MessageBox::exec(KMessageBox::WarningYesNo,
99  parent, message, caption, buttonYes, buttonNo,
100  dontAskAgainName);
101 }
102 
103 //***************************************************************************
105  QString message, QString caption,
106  const QString buttonYes, const QString buttonNo,
107  const QString &dontAskAgainName)
108 {
109  return Kwave::MessageBox::exec(KMessageBox::WarningYesNoCancel,
110  parent, message, caption, buttonYes, buttonNo,
111  dontAskAgainName);
112 }
113 
114 //***************************************************************************
116  QString message, QString caption,
117  const QString buttonContinue, const QString buttonCancel,
118  const QString &dontAskAgainName)
119 {
120  return Kwave::MessageBox::exec(KMessageBox::WarningContinueCancel,
121  parent, message, caption, buttonContinue, buttonCancel,
122  dontAskAgainName);
123 }
124 
125 //***************************************************************************
126 int Kwave::MessageBox::error(QWidget *parent,
127  QString message, QString caption)
128 {
129  return Kwave::MessageBox::exec(KMessageBox::Error,
130  parent, message, caption);
131 }
132 
133 //***************************************************************************
134 int Kwave::MessageBox::exec(KMessageBox::DialogType mode, QWidget *parent,
135  QString message, QString caption,
136  const QString &button1, const QString &button2,
137  const QString &dontAskAgainName)
138 {
139  Kwave::MessageBox box(
140  mode, parent, message, caption,
141  button1, button2,
142  dontAskAgainName
143  );
144  return box.retval();
145 }
146 
147 //***************************************************************************
149 {
150  switch (m_mode) {
151  // QuestionYesNo
152  case KMessageBox::QuestionYesNo:
153  m_retval = KMessageBox::questionYesNo(m_parent,
155  (!m_button1.isEmpty()) ? KGuiItem(m_button1) :
156  KStandardGuiItem::yes(),
157  (!m_button2.isEmpty()) ? KGuiItem(m_button2) :
158  KStandardGuiItem::no(),
160  break;
161  // QuestionYesNoCancel
162  case KMessageBox::QuestionYesNoCancel:
163  m_retval = KMessageBox::questionYesNoCancel(m_parent,
165  (!m_button1.isEmpty()) ? KGuiItem(m_button1) :
166  KStandardGuiItem::yes(),
167  (!m_button2.isEmpty()) ? KGuiItem(m_button2) :
168  KStandardGuiItem::no(),
169  KStandardGuiItem::cancel(),
171  break;
172  // Sorry
173  case KMessageBox::Sorry:
174  KMessageBox::sorry(m_parent, m_message, m_caption);
175  break;
176  // WarningYesNoCancel
177  case KMessageBox::WarningYesNoCancel:
178  m_retval = KMessageBox::warningYesNoCancel(m_parent,
180  (!m_button1.isEmpty()) ? KGuiItem(m_button1) :
181  KStandardGuiItem::yes(),
182  (!m_button2.isEmpty()) ? KGuiItem(m_button2) :
183  KStandardGuiItem::no(),
184  KStandardGuiItem::cancel(),
186  break;
187  // WarningYesNo
188  case KMessageBox::WarningYesNo:
189  m_retval = KMessageBox::warningYesNo(m_parent,
191  (!m_button1.isEmpty()) ? KGuiItem(m_button1) :
192  KStandardGuiItem::yes(),
193  (!m_button2.isEmpty()) ? KGuiItem(m_button2) :
194  KStandardGuiItem::no(),
196  break;
197  // WarningContinueCancel
198  case KMessageBox::WarningContinueCancel:
199  m_retval = KMessageBox::warningContinueCancel(m_parent,
201  (!m_button1.isEmpty()) ? KGuiItem(m_button1) :
202  KStandardGuiItem::cont(),
203  (!m_button2.isEmpty()) ? KGuiItem(m_button2) :
204  KStandardGuiItem::cancel(),
206  break;
207  // Error
208  case KMessageBox::Error:
209  KMessageBox::error(m_parent, m_message, m_caption);
210  break;
211  case KMessageBox::Information:
212  KMessageBox::information(m_parent, m_message, m_caption,
214  break;
215  default:
216  qWarning("unsupported messagebox mode");
217  Q_ASSERT(0);
218  }
219 
220  m_semaphore.release();
221 }
222 
223 //***************************************************************************
225  :QObject(Q_NULLPTR), m_box(box)
226 {
227  moveToThread(QApplication::instance()->thread());
228 }
229 
230 //***************************************************************************
232 {
233  m_box.show();
234 }
235 
236 //***************************************************************************
237 //***************************************************************************
static int questionYesNoCancel(QWidget *widget, QString message, QString caption=QString(), const QString buttonYes=QString(), const QString buttonNo=QString(), const QString &dontAskAgainName=QString())
Definition: MessageBox.cpp:74
static int exec(KMessageBox::DialogType mode, QWidget *parent, QString message, QString caption=QString(), const QString &button1=QString(), const QString &button2=QString(), const QString &dontAskAgainName=QString())
Definition: MessageBox.cpp:134
const QString m_button2
Definition: MessageBox.h:188
static int sorry(QWidget *widget, QString message, QString caption=QString())
Definition: MessageBox.cpp:85
KMessageBox::DialogType m_mode
Definition: MessageBox.h:173
static int questionYesNo(QWidget *widget, QString message, QString caption=QString(), const QString buttonYes=QString(), const QString buttonNo=QString(), const QString &dontAskAgainName=QString())
Definition: MessageBox.cpp:63
const QString m_button1
Definition: MessageBox.h:185
static int error(QWidget *widget, QString message, QString caption=QString())
Definition: MessageBox.cpp:126
Kwave::MessageBox & m_box
Definition: MessageBox.h:161
static int warningYesNoCancel(QWidget *widget, QString message, QString caption=QString(), const QString buttonYes=QString(), const QString buttonNo=QString(), const QString &dontAskAgainName=QString())
Definition: MessageBox.cpp:104
Trigger(Kwave::MessageBox &box)
Definition: MessageBox.cpp:224
virtual int retval() const
Definition: MessageBox.cpp:52
static int warningYesNo(QWidget *widget, QString message, QString caption=QString(), const QString buttonYes=QString(), const QString buttonNo=QString(), const QString &dontAskAgainName=QString())
Definition: MessageBox.cpp:93
static int warningContinueCancel(QWidget *widget, QString message, QString caption=QString(), const QString buttonContinue=QString(), const QString buttonCancel=QString(), const QString &dontAskAgainName=QString())
Definition: MessageBox.cpp:115
virtual ~MessageBox()
Definition: MessageBox.cpp:58
const QString m_dont_ask_again_name
Definition: MessageBox.h:191
QWidget * m_parent
Definition: MessageBox.h:176
QSemaphore m_semaphore
Definition: MessageBox.h:167