From: Jürgen Spitzmüller Date: Sun, 19 Apr 2009 11:57:52 +0000 (+0000) Subject: Implement a warning dialog with a "Do not show this warning again!" checkbox. X-Git-Tag: 2.0.0~6795 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=605f6bebf2b0403e82700f5e692eedf6bfc78390;p=features.git Implement a warning dialog with a "Do not show this warning again!" checkbox. Since Qt does not provide this, we have to roll our own dialog. Hidden warnings are stored in sessions. The dialog is currently only used in the case where an included file has a different textclass then the master (bug 3218). git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@29324 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/development/scons/scons_manifest.py b/development/scons/scons_manifest.py index f34ff1d1f3..a5e290acc5 100644 --- a/development/scons/scons_manifest.py +++ b/development/scons/scons_manifest.py @@ -963,6 +963,7 @@ src_frontends_qt4_ui_files = Split(''' TextLayoutUi.ui ThesaurusUi.ui TocUi.ui + ToggleWarningUi.ui VSpaceUi.ui ViewSourceUi.ui WrapUi.ui diff --git a/src/frontends/alert.h b/src/frontends/alert.h index b4e123731c..433369d1b9 100644 --- a/src/frontends/alert.h +++ b/src/frontends/alert.h @@ -37,8 +37,11 @@ int prompt(docstring const & title, docstring const & question, /** * Display a warning to the user. Title should be a short (general) summary. * Only use this if the user cannot perform some remedial action. + * \p askshowagain will display a check box where the user can turn off the + * warning for future cases. Ponder carefully if this is feasible. */ -void warning(docstring const & title, docstring const & message); +void warning(docstring const & title, docstring const & message, + bool const & askshowagain = false); /** * Display a warning to the user. Title should be a short (general) summary. diff --git a/src/frontends/qt4/GuiAlert.cpp b/src/frontends/qt4/GuiAlert.cpp index 5c128bc7d1..983d58d1c1 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. @@ -18,6 +19,7 @@ #include "qt_helpers.h" #include "LyX.h" // for lyx::use_gui #include "ui_AskForTextUi.h" +#include "ui_ToggleWarningUi.h" #include "support/gettext.h" #include "support/debug.h" @@ -25,9 +27,11 @@ #include "support/lstrings.h" #include +#include #include #include #include +#include #include #include @@ -39,6 +43,17 @@ namespace lyx { namespace frontend { +class GuiToggleWarningDialog : public QDialog, public Ui::ToggleWarningUi +{ +public: + GuiToggleWarningDialog(QWidget * parent) : QDialog(parent) + { + Ui::ToggleWarningUi::setupUi(this); + QDialog::setModal(true); + } +}; + + static docstring const formatted(docstring const & text) { const int w = 80; @@ -99,6 +114,29 @@ static docstring const formatted(docstring const & text) } +void toggleWarning(docstring const & title, docstring const & msg) +{ + if (!use_gui) + return; + + QSettings settings; + if (settings.value("hidden_warnings/" + toqstr(msg), false).toBool()) + return; + + GuiToggleWarningDialog * dlg = + new GuiToggleWarningDialog(qApp->focusWidget()); + + dlg->setWindowTitle(toqstr(title)); + dlg->messageLA->setText(toqstr(formatted(msg))); + dlg->dontShowAgainCB->setChecked(false); + + if (dlg->exec() == QDialog::Accepted) + if (dlg->dontShowAgainCB->isChecked()) + settings.setValue("hidden_warnings/" + + toqstr(msg), true); +} + + namespace Alert { int prompt(docstring const & title0, docstring const & question, @@ -145,7 +183,8 @@ 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: " << title0 << '\n' << "----------------------------------------\n" @@ -165,9 +204,12 @@ void warning(docstring const & title0, docstring const & message) toqstr(formatted(message))); return; } - QMessageBox::warning(qApp->focusWidget(), - toqstr(title), - toqstr(formatted(message))); + if (!askshowagain) + QMessageBox::warning(qApp->focusWidget(), + toqstr(title), + toqstr(formatted(message))); + else + toggleWarning(title, message); } diff --git a/src/frontends/qt4/Makefile.am b/src/frontends/qt4/Makefile.am index a14f8cec38..99319b1691 100644 --- a/src/frontends/qt4/Makefile.am +++ b/src/frontends/qt4/Makefile.am @@ -315,6 +315,7 @@ UIFILES = \ TextLayoutUi.ui \ ThesaurusUi.ui \ TocUi.ui \ + ToggleWarningUi.ui \ ViewSourceUi.ui \ VSpaceUi.ui \ WrapUi.ui diff --git a/src/frontends/qt4/ui/ToggleWarningUi.ui b/src/frontends/qt4/ui/ToggleWarningUi.ui new file mode 100644 index 0000000000..037b51a7e9 --- /dev/null +++ b/src/frontends/qt4/ui/ToggleWarningUi.ui @@ -0,0 +1,134 @@ + + ToggleWarningUi + + + + 0 + 0 + 269 + 140 + + + + LyX: Enter text + + + true + + + + 9 + + + 6 + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 247 + 16 + + + + + + + + If you check this, LyX will not warn you again in the given case. + + + &Do not show this message again! + + + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 247 + 16 + + + + + + + + Qt::Horizontal + + + + 81 + 20 + + + + + + + + &OK + + + true + + + + + + + Qt::Horizontal + + + + 81 + 20 + + + + + + + + qt_i18n.h + + + + + okPB + clicked() + ToggleWarningUi + accept() + + + 134 + 116 + + + 134 + 69 + + + + + diff --git a/src/insets/InsetInclude.cpp b/src/insets/InsetInclude.cpp index 2f2d22d7b0..ce4a12c2ba 100644 --- a/src/insets/InsetInclude.cpp +++ b/src/insets/InsetInclude.cpp @@ -508,7 +508,7 @@ int InsetInclude::latex(odocstream & os, OutputParams const & runparams) const included_file.displayName(), from_utf8(tmp->params().documentClass().name()), from_utf8(masterBuffer->params().documentClass().name())); - Alert::warning(_("Different textclasses"), text); + Alert::warning(_("Different textclasses"), text, true); } // Make sure modules used in child are all included in master