]> git.lyx.org Git - features.git/commitdiff
Implement a warning dialog with a "Do not show this warning again!" checkbox.
authorJürgen Spitzmüller <spitz@lyx.org>
Sun, 19 Apr 2009 11:57:52 +0000 (11:57 +0000)
committerJürgen Spitzmüller <spitz@lyx.org>
Sun, 19 Apr 2009 11:57:52 +0000 (11:57 +0000)
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

development/scons/scons_manifest.py
src/frontends/alert.h
src/frontends/qt4/GuiAlert.cpp
src/frontends/qt4/Makefile.am
src/frontends/qt4/ui/ToggleWarningUi.ui [new file with mode: 0644]
src/insets/InsetInclude.cpp

index f34ff1d1f328866f35fe6559a7791cdf224403aa..a5e290acc590b5a65251200cfc1f719577cbc278 100644 (file)
@@ -963,6 +963,7 @@ src_frontends_qt4_ui_files = Split('''
     TextLayoutUi.ui
     ThesaurusUi.ui
     TocUi.ui
+    ToggleWarningUi.ui
     VSpaceUi.ui
     ViewSourceUi.ui
     WrapUi.ui
index b4e123731c0878cfb4d303578fbf20bb1c2a422d..433369d1b9bdecd73ee0e9bdd4837182ae59839f 100644 (file)
@@ -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.
index 5c128bc7d13973bd896f7c64921cac312239a51f..983d58d1c1056f6d05268c481ea7f88fc849a9b7 100644 (file)
@@ -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"
 #include "support/lstrings.h"
 
 #include <QApplication>
+#include <QCheckBox>
 #include <QMessageBox>
 #include <QLineEdit>
 #include <QInputDialog>
+#include <QSettings>
 
 #include <iomanip>
 #include <iostream>
@@ -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);
 }
 
 
index a14f8cec389ea7eda3178d9b6e5cd18592ed6c64..99319b1691180d55d9406da9449aa8a36f79e015 100644 (file)
@@ -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 (file)
index 0000000..037b51a
--- /dev/null
@@ -0,0 +1,134 @@
+<ui version="4.0" >
+ <class>ToggleWarningUi</class>
+ <widget class="QDialog" name="ToggleWarningUi" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>269</width>
+    <height>140</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>LyX: Enter text</string>
+  </property>
+  <property name="sizeGripEnabled" >
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" >
+   <property name="margin" >
+    <number>9</number>
+   </property>
+   <property name="spacing" >
+    <number>6</number>
+   </property>
+   <item row="2" column="0" colspan="3" >
+    <spacer>
+     <property name="orientation" >
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType" >
+      <enum>QSizePolicy::Expanding</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>247</width>
+       <height>16</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="3" column="0" colspan="3" >
+    <widget class="QCheckBox" name="dontShowAgainCB" >
+     <property name="toolTip" >
+      <string>If you check this, LyX will not warn you again in the given case.</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Do not show this message again!</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" colspan="3" >
+    <widget class="QLabel" name="messageLA" >
+     <property name="text" >
+      <string/>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0" colspan="3" >
+    <spacer>
+     <property name="orientation" >
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType" >
+      <enum>QSizePolicy::Expanding</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>247</width>
+       <height>16</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="4" column="0" >
+    <spacer>
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>81</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="4" column="1" >
+    <widget class="QPushButton" name="okPB" >
+     <property name="text" >
+      <string>&amp;OK</string>
+     </property>
+     <property name="default" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="2" >
+    <spacer>
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>81</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <includes>
+  <include location="local" >qt_i18n.h</include>
+ </includes>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>okPB</sender>
+   <signal>clicked()</signal>
+   <receiver>ToggleWarningUi</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>134</x>
+     <y>116</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>134</x>
+     <y>69</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
index 2f2d22d7b08098f5d9a8225628151e39b9b717dd..ce4a12c2ba9bfba5867bf198e9b3850ce69cd9db 100644 (file)
@@ -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