]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/GuiAlert.cpp
Remove unused UI file.
[lyx.git] / src / frontends / qt4 / GuiAlert.cpp
1 /**
2  * \file qt4/GuiAlert.cpp
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author John Levon
7  * \author Jürgen Spitzmüller
8  * \author Abdelrazak Younes
9  *
10  * Full author contact details are available in file CREDITS.
11  */
12
13 #include <config.h>
14
15 #include "alert.h"
16
17
18 #include "frontends/Application.h"
19
20 #include "qt_helpers.h"
21 #include "LyX.h" // for lyx::use_gui
22 #include "support/gettext.h"
23
24 #include "support/debug.h"
25 #include "support/docstring.h"
26 #include "support/lstrings.h"
27 #include "support/ProgressInterface.h"
28
29 #include <QApplication>
30 #include <QCheckBox>
31 #include <QMessageBox>
32 #include <QLineEdit>
33 #include <QInputDialog>
34 #include <QSettings>
35
36 #include <iomanip>
37 #include <iostream>
38
39 using namespace std;
40 using namespace lyx::support;
41
42 namespace lyx {
43 namespace frontend {
44
45
46
47
48 static docstring const formatted(docstring const & text)
49 {
50         const int w = 80;
51         docstring sout;
52
53         if (text.empty())
54                 return sout;
55
56         size_t curpos = 0;
57         docstring line;
58
59         while (true) {
60                 size_t const nxtpos1 = text.find(' ',  curpos);
61                 size_t const nxtpos2 = text.find('\n', curpos);
62                 size_t const nxtpos = min(nxtpos1, nxtpos2);
63
64                 docstring const word =
65                         nxtpos == docstring::npos ?
66                         text.substr(curpos) :
67                         text.substr(curpos, nxtpos - curpos);
68
69                 bool const newline = (nxtpos2 != docstring::npos &&
70                                       nxtpos2 < nxtpos1);
71
72                 docstring const line_plus_word =
73                         line.empty() ? word : line + char_type(' ') + word;
74
75                 // FIXME: make w be size_t
76                 if (int(line_plus_word.length()) >= w) {
77                         sout += line + char_type('\n');
78                         if (newline) {
79                                 sout += word + char_type('\n');
80                                 line.erase();
81                         } else {
82                                 line = word;
83                         }
84
85                 } else if (newline) {
86                         sout += line_plus_word + char_type('\n');
87                         line.erase();
88
89                 } else {
90                         if (!line.empty())
91                                 line += char_type(' ');
92                         line += word;
93                 }
94
95                 if (nxtpos == docstring::npos) {
96                         if (!line.empty())
97                                 sout += line;
98                         break;
99                 }
100
101                 curpos = nxtpos + 1;
102         }
103
104         return sout;
105 }
106
107
108 void noAppDialog(QString const & title, QString const & msg, QMessageBox::Icon mode)
109 {
110         int argc = 1;
111         char * argv[1];
112         QApplication app(argc, argv);
113         switch (mode)
114         {
115                 case QMessageBox::Information: QMessageBox::information(0, title, msg); break;
116                 case QMessageBox::Warning: QMessageBox::warning(0, title, msg); break;
117                 case QMessageBox::Critical: QMessageBox::critical(0, title, msg); break;
118                 default: break;
119         }
120 }
121
122
123 namespace Alert {
124
125 int prompt(docstring const & title0, docstring const & question,
126                   int default_button, int cancel_button,
127                   docstring const & b1, docstring const & b2, docstring const & b3)
128 {
129         //lyxerr << "PROMPT" << title0 << "FOCUS: " << qApp->focusWidget() << endl;
130         if (!use_gui || lyxerr.debugging()) {
131                 lyxerr << title0 << '\n'
132                        << "----------------------------------------\n"
133                        << question << endl;
134
135                 lyxerr << "Assuming answer is ";
136                 switch (default_button) {
137                 case 0: lyxerr << b1 << endl;
138                 case 1: lyxerr << b2 << endl;
139                 case 2: lyxerr << b3 << endl;
140                 }
141                 if (!use_gui)
142                         return default_button;
143         }
144
145         docstring const title = bformat(_("LyX: %1$s"), title0);
146
147         // For some reason, sometimes Qt uses an hourglass or watch cursor when
148         // displaying the alert. Hence, we ask for the standard cursor shape.
149         // This call has no effect if the cursor has not been overridden.
150         qApp->changeOverrideCursor(Qt::ArrowCursor);
151
152         // FIXME replace that with guiApp->currentView()
153         //LYXERR0("FOCUS: " << qApp->focusWidget());
154         int res = QMessageBox::information(qApp->focusWidget(),
155                                            toqstr(title),
156                                            toqstr(formatted(question)),
157                                            toqstr(b1),
158                                            toqstr(b2),
159                                            b3.empty() ? QString::null : toqstr(b3),
160                                            default_button, cancel_button);
161
162         // Qt bug: can return -1 on cancel or WM close, despite the docs.
163         if (res == -1)
164                 res = cancel_button;
165         return res;
166 }
167
168
169 void warning(docstring const & title0, docstring const & message,
170              bool const & askshowagain)
171 {
172         lyxerr << "Warning: " << title0 << '\n'
173                << "----------------------------------------\n"
174                << message << endl;
175
176         if (!use_gui)
177                 return;
178
179         docstring const title = bformat(_("LyX: %1$s"), title0);
180
181         if (theApp() == 0) {
182                 noAppDialog(toqstr(title), toqstr(formatted(message)), QMessageBox::Warning);
183                 return;
184         }
185
186         if (!askshowagain) {
187                 ProgressInterface::instance()->warning(
188                                 toqstr(title),
189                                 toqstr(formatted(message)));
190         } else {
191                 ProgressInterface::instance()->toggleWarning(
192                                 toqstr(title),
193                                 toqstr(message),
194                                 toqstr(formatted(message)));
195         }
196 }
197
198
199 void error(docstring const & title0, docstring const & message)
200 {
201         lyxerr << "Error: " << title0 << '\n'
202                << "----------------------------------------\n"
203                << message << endl;
204
205         if (!use_gui)
206                 return;
207
208         docstring const title = bformat(_("LyX: %1$s"), title0);
209
210         if (theApp() == 0) {
211                 noAppDialog(toqstr(title), toqstr(formatted(message)), QMessageBox::Critical);
212                 return;
213         }
214
215         ProgressInterface::instance()->error(
216                 toqstr(title),
217                 toqstr(formatted(message)));
218 }
219
220
221 void information(docstring const & title0, docstring const & message)
222 {
223         if (!use_gui || lyxerr.debugging())
224                 lyxerr << title0 << '\n'
225                        << "----------------------------------------\n"
226                        << message << endl;
227
228         if (!use_gui)
229                 return;
230
231         docstring const title = bformat(_("LyX: %1$s"), title0);
232
233         if (theApp() == 0) {
234                 noAppDialog(toqstr(title), toqstr(formatted(message)), QMessageBox::Information);
235                 return;
236         }
237
238         ProgressInterface::instance()->information(
239                 toqstr(title),
240                 toqstr(formatted(message)));
241 }
242
243
244 bool askForText(docstring & response, docstring const & msg,
245         docstring const & dflt)
246 {
247         if (!use_gui || lyxerr.debugging()) {
248                 lyxerr << "----------------------------------------\n"
249                        << msg << '\n'
250                        << "Assuming answer is " << dflt << '\n'
251                        << "----------------------------------------" << endl;
252                 if (!use_gui) {
253                         response = dflt;
254                         return true;
255                 }
256         }
257
258         docstring const title = bformat(_("LyX: %1$s"), msg);
259
260         bool ok;
261         QString text = QInputDialog::getText(qApp->focusWidget(),
262                 toqstr(title),
263                 toqstr(char_type('&') + msg),
264                 QLineEdit::Normal,
265                 toqstr(dflt), &ok);
266
267         if (ok) {
268                 response = qstring_to_ucs4(text);
269                 return true;
270         }
271         response.clear();
272         return false;
273 }
274
275
276 } // namespace Alert
277 } // namespace frontend
278 } // namespace lyx