#include "support/debug.h"
#include "support/docstring.h"
#include "support/lstrings.h"
+#include "support/lassert.h"
#include "support/ProgressInterface.h"
#include <QApplication>
namespace frontend {
-
-
-static docstring const formatted(docstring const & text)
-{
- const int w = 80;
- docstring sout;
-
- if (text.empty())
- return sout;
-
- size_t curpos = 0;
- docstring line;
-
- while (true) {
- size_t const nxtpos1 = text.find(' ', curpos);
- size_t const nxtpos2 = text.find('\n', curpos);
- size_t const nxtpos = min(nxtpos1, nxtpos2);
-
- docstring const word =
- nxtpos == docstring::npos ?
- text.substr(curpos) :
- text.substr(curpos, nxtpos - curpos);
-
- bool const newline = (nxtpos2 != docstring::npos &&
- nxtpos2 < nxtpos1);
-
- docstring const line_plus_word =
- line.empty() ? word : line + char_type(' ') + word;
-
- // FIXME: make w be size_t
- if (int(line_plus_word.length()) >= w) {
- sout += line + char_type('\n');
- if (newline) {
- sout += word + char_type('\n');
- line.erase();
- } else {
- line = word;
- }
-
- } else if (newline) {
- sout += line_plus_word + char_type('\n');
- line.erase();
-
- } else {
- if (!line.empty())
- line += char_type(' ');
- line += word;
- }
-
- if (nxtpos == docstring::npos) {
- if (!line.empty())
- sout += line;
- break;
- }
-
- curpos = nxtpos + 1;
- }
-
- return sout;
-}
-
-
void noAppDialog(QString const & title, QString const & msg, QMessageBox::Icon mode)
{
int argc = 1;
lyxerr << "Assuming answer is ";
switch (default_button) {
- case 0: lyxerr << b1 << endl;
- case 1: lyxerr << b2 << endl;
- case 2: lyxerr << b3 << endl;
+ case 0: lyxerr << b1 << endl; break;
+ case 1: lyxerr << b2 << endl; break;
+ case 2: lyxerr << b3 << endl; break;
case 3: lyxerr << b4 << endl;
}
if (!use_gui)
docstring const title = bformat(_("LyX: %1$s"), title0);
+ /// Long operation in progress prevents user from Ok-ing the error dialog
+ bool long_op = theApp()->longOperationStarted();
+ if (long_op)
+ theApp()->stopLongOperation();
+
// For some reason, sometimes Qt uses a hourglass or watch cursor when
// displaying the alert. Hence, we ask for the standard cursor shape.
qApp->setOverrideCursor(Qt::ArrowCursor);
//LYXERR0("FOCUS: " << qApp->focusWidget());
QPushButton * b[4] = { 0, 0, 0, 0 };
QMessageBox msg_box(QMessageBox::Information,
- toqstr(title), toqstr(formatted(question)),
+ toqstr(title), toqstr(question),
QMessageBox::NoButton, qApp->focusWidget());
b[0] = msg_box.addButton(b1.empty() ? "OK" : toqstr(b1),
QMessageBox::ActionRole);
qApp->restoreOverrideCursor();
+ if (long_op)
+ theApp()->startLongOperation();
+
// Qt bug: can return -1 on cancel or WM close, despite the docs.
if (res == -1)
res = cancel_button;
docstring const title = bformat(_("LyX: %1$s"), title0);
if (theApp() == 0) {
- noAppDialog(toqstr(title), toqstr(formatted(message)), QMessageBox::Warning);
+ noAppDialog(toqstr(title), toqstr(message), QMessageBox::Warning);
return;
}
+ /// Long operation in progress prevents user from Ok-ing the error dialog
+ bool long_op = theApp()->longOperationStarted();
+ if (long_op)
+ theApp()->stopLongOperation();
+
// Don't use a hourglass cursor while displaying the alert
qApp->setOverrideCursor(Qt::ArrowCursor);
if (!askshowagain) {
ProgressInterface::instance()->warning(
toqstr(title),
- toqstr(formatted(message)));
+ toqstr(message));
} else {
ProgressInterface::instance()->toggleWarning(
toqstr(title),
toqstr(message),
- toqstr(formatted(message)));
+ toqstr(message));
}
qApp->restoreOverrideCursor();
+
+ if (long_op)
+ theApp()->startLongOperation();
}
void warning(docstring const & title0, docstring const & message,
title0, message, askshowagain);
}
-void doError(docstring const & title0, docstring const & message)
+void doError(docstring const & title0, docstring const & message, bool backtrace)
{
lyxerr << "Error: " << title0 << '\n'
<< "----------------------------------------\n"
<< message << endl;
+ QString details;
+ if (backtrace) {
+ details = QString::fromLocal8Bit(to_local8bit(printCallStack()).c_str());
+ }
+
if (!use_gui)
return;
docstring const title = bformat(_("LyX: %1$s"), title0);
if (theApp() == 0) {
- noAppDialog(toqstr(title), toqstr(formatted(message)), QMessageBox::Critical);
+ noAppDialog(toqstr(title), toqstr(message), QMessageBox::Critical);
return;
}
+ /// Long operation in progress prevents user from Ok-ing the error dialog
+ bool long_op = theApp()->longOperationStarted();
+ if (long_op)
+ theApp()->stopLongOperation();
+
// Don't use a hourglass cursor while displaying the alert
qApp->setOverrideCursor(Qt::ArrowCursor);
ProgressInterface::instance()->error(
toqstr(title),
- toqstr(formatted(message)));
+ toqstr(message),
+ details);
qApp->restoreOverrideCursor();
+
+ if (long_op)
+ theApp()->startLongOperation();
}
-void error(docstring const & title0, docstring const & message)
+void error(docstring const & title0, docstring const & message, bool backtrace)
{
#ifdef EXPORT_in_THREAD
InGuiThread<void>().call(&doError,
#else
doError(
#endif
- title0, message);
+ title0, message, backtrace);
}
void doInformation(docstring const & title0, docstring const & message)
docstring const title = bformat(_("LyX: %1$s"), title0);
if (theApp() == 0) {
- noAppDialog(toqstr(title), toqstr(formatted(message)), QMessageBox::Information);
+ noAppDialog(toqstr(title), toqstr(message), QMessageBox::Information);
return;
}
+ /// Long operation in progress prevents user from Ok-ing the error dialog
+ bool long_op = theApp()->longOperationStarted();
+ if (long_op)
+ theApp()->stopLongOperation();
+
// Don't use a hourglass cursor while displaying the alert
qApp->setOverrideCursor(Qt::ArrowCursor);
ProgressInterface::instance()->information(
toqstr(title),
- toqstr(formatted(message)));
+ toqstr(message));
qApp->restoreOverrideCursor();
+
+ if (long_op)
+ theApp()->startLongOperation();
}
void information(docstring const & title0, docstring const & message)
docstring const title = bformat(_("LyX: %1$s"), msg);
+ /// Long operation in progress prevents user from Ok-ing the error dialog
+ bool long_op = theApp()->longOperationStarted();
+ if (long_op)
+ theApp()->stopLongOperation();
+
bool ok;
QString text = QInputDialog::getText(qApp->focusWidget(),
toqstr(title),
QLineEdit::Normal,
toqstr(dflt), &ok);
+ if (long_op)
+ theApp()->startLongOperation();
+
if (ok) {
response = qstring_to_ucs4(text);
return true;