X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiAlert.cpp;h=2a8affa33a6cfc1b2927bf28d23695d49487892c;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=512700421b882953e356fc968cad6bdc355ebca9;hpb=9383f4c3c6f9cfab2d658701ba66e2b54cd68bea;p=lyx.git diff --git a/src/frontends/qt4/GuiAlert.cpp b/src/frontends/qt4/GuiAlert.cpp index 512700421b..2a8affa33a 100644 --- a/src/frontends/qt4/GuiAlert.cpp +++ b/src/frontends/qt4/GuiAlert.cpp @@ -4,6 +4,7 @@ * Licence details can be found in the file COPYING. * * \author John Levon + * \author Jürgen Spitzmüller * \author Abdelrazak Younes * * Full author contact details are available in file CREDITS. @@ -13,30 +14,36 @@ #include "alert.h" + #include "frontends/Application.h" #include "qt_helpers.h" -#include "support/debug.h" #include "LyX.h" // for lyx::use_gui -#include "ui_AskForTextUi.h" #include "support/gettext.h" +#include "support/debug.h" #include "support/docstring.h" #include "support/lstrings.h" +#include "support/ProgressInterface.h" #include +#include #include #include #include +#include #include +#include using namespace std; +using namespace lyx::support; namespace lyx { namespace frontend { -using support::bformat; + + static docstring const formatted(docstring const & text) { @@ -52,7 +59,7 @@ static docstring const formatted(docstring const & text) while (true) { size_t const nxtpos1 = text.find(' ', curpos); size_t const nxtpos2 = text.find('\n', curpos); - size_t const nxtpos = std::min(nxtpos1, nxtpos2); + size_t const nxtpos = min(nxtpos1, nxtpos2); docstring const word = nxtpos == docstring::npos ? @@ -98,22 +105,38 @@ static docstring const formatted(docstring const & text) } +void noAppDialog(QString const & title, QString const & msg, QMessageBox::Icon mode) +{ + int argc = 1; + char * argv[1]; + QApplication app(argc, argv); + switch (mode) + { + case QMessageBox::Information: QMessageBox::information(0, title, msg); break; + case QMessageBox::Warning: QMessageBox::warning(0, title, msg); break; + case QMessageBox::Critical: QMessageBox::critical(0, title, msg); break; + default: break; + } +} + + namespace Alert { int prompt(docstring const & title0, docstring const & question, int default_button, int cancel_button, docstring const & b1, docstring const & b2, docstring const & b3) { + //lyxerr << "PROMPT" << title0 << "FOCUS: " << qApp->focusWidget() << endl; if (!use_gui || lyxerr.debugging()) { - lyxerr << to_utf8(title0) << '\n' + lyxerr << title0 << '\n' << "----------------------------------------\n" - << to_utf8(question) << endl; + << question << endl; lyxerr << "Assuming answer is "; switch (default_button) { - case 0: lyxerr << to_utf8(b1) << endl; - case 1: lyxerr << to_utf8(b2) << endl; - case 2: lyxerr << to_utf8(b3) << endl; + case 0: lyxerr << b1 << endl; + case 1: lyxerr << b2 << endl; + case 2: lyxerr << b3 << endl; } if (!use_gui) return default_button; @@ -121,12 +144,12 @@ int prompt(docstring const & title0, docstring const & question, docstring const title = bformat(_("LyX: %1$s"), title0); - // For some reason, sometimes Qt uses an hourglass or watch cursor when + // For some reason, sometimes Qt uses a hourglass or watch cursor when // displaying the alert. Hence, we ask for the standard cursor shape. - // This call has no effect if the cursor has not been overridden. - qApp->changeOverrideCursor(Qt::ArrowCursor); + qApp->setOverrideCursor(Qt::ArrowCursor); // FIXME replace that with guiApp->currentView() + //LYXERR0("FOCUS: " << qApp->focusWidget()); int res = QMessageBox::information(qApp->focusWidget(), toqstr(title), toqstr(formatted(question)), @@ -135,6 +158,8 @@ int prompt(docstring const & title0, docstring const & question, b3.empty() ? QString::null : toqstr(b3), default_button, cancel_button); + qApp->restoreOverrideCursor(); + // Qt bug: can return -1 on cancel or WM close, despite the docs. if (res == -1) res = cancel_button; @@ -142,11 +167,12 @@ int prompt(docstring const & title0, docstring const & question, } -void warning(docstring const & title0, docstring const & message) +void warning(docstring const & title0, docstring const & message, + bool const & askshowagain) { - lyxerr << "Warning: " << to_utf8(title0) << '\n' + lyxerr << "Warning: " << title0 << '\n' << "----------------------------------------\n" - << to_utf8(message) << endl; + << message << endl; if (!use_gui) return; @@ -154,59 +180,80 @@ void warning(docstring const & title0, docstring const & message) docstring const title = bformat(_("LyX: %1$s"), title0); if (theApp() == 0) { - int argc = 1; - char * argv[1]; - QApplication app(argc, argv); - QMessageBox::warning(0, - toqstr(title), - toqstr(formatted(message))); + noAppDialog(toqstr(title), toqstr(formatted(message)), QMessageBox::Warning); return; } - QMessageBox::warning(qApp->focusWidget(), - toqstr(title), - toqstr(formatted(message))); + + // Don't use a hourglass cursor while displaying the alert + qApp->setOverrideCursor(Qt::ArrowCursor); + + if (!askshowagain) { + ProgressInterface::instance()->warning( + toqstr(title), + toqstr(formatted(message))); + } else { + ProgressInterface::instance()->toggleWarning( + toqstr(title), + toqstr(message), + toqstr(formatted(message))); + } + + qApp->restoreOverrideCursor(); } void error(docstring const & title0, docstring const & message) { - lyxerr << "Error: " << to_utf8(title0) << '\n' + lyxerr << "Error: " << title0 << '\n' << "----------------------------------------\n" - << to_utf8(message) << endl; + << message << endl; if (!use_gui) return; docstring const title = bformat(_("LyX: %1$s"), title0); + if (theApp() == 0) { - int argc = 1; - char * argv[1]; - QApplication app(argc, argv); - QMessageBox::critical(0, - toqstr(title), - toqstr(formatted(message))); + noAppDialog(toqstr(title), toqstr(formatted(message)), QMessageBox::Critical); return; } - QMessageBox::critical(qApp->focusWidget(), - toqstr(title), - toqstr(formatted(message))); + + // Don't use a hourglass cursor while displaying the alert + qApp->setOverrideCursor(Qt::ArrowCursor); + + ProgressInterface::instance()->error( + toqstr(title), + toqstr(formatted(message))); + + qApp->restoreOverrideCursor(); } void information(docstring const & title0, docstring const & message) { if (!use_gui || lyxerr.debugging()) - lyxerr << to_utf8(title0) << '\n' + lyxerr << title0 << '\n' << "----------------------------------------\n" - << to_utf8(message) << endl; + << message << endl; if (!use_gui) return; docstring const title = bformat(_("LyX: %1$s"), title0); - QMessageBox::information(qApp->focusWidget(), - toqstr(title), - toqstr(formatted(message))); + + if (theApp() == 0) { + noAppDialog(toqstr(title), toqstr(formatted(message)), QMessageBox::Information); + return; + } + + // Don't use a hourglass cursor while displaying the alert + qApp->setOverrideCursor(Qt::ArrowCursor); + + ProgressInterface::instance()->information( + toqstr(title), + toqstr(formatted(message))); + + qApp->restoreOverrideCursor(); } @@ -215,8 +262,8 @@ bool askForText(docstring & response, docstring const & msg, { if (!use_gui || lyxerr.debugging()) { lyxerr << "----------------------------------------\n" - << to_utf8(msg) << '\n' - << "Assuming answer is " << to_utf8(dflt) << '\n' + << msg << '\n' + << "Assuming answer is " << dflt << '\n' << "----------------------------------------" << endl; if (!use_gui) { response = dflt; @@ -233,7 +280,7 @@ bool askForText(docstring & response, docstring const & msg, QLineEdit::Normal, toqstr(dflt), &ok); - if (ok && !text.isEmpty()) { + if (ok) { response = qstring_to_ucs4(text); return true; }