]> git.lyx.org Git - features.git/commitdiff
toggle debug levels between all/selected/none
authorPeter Kümmel <syntheticpp@gmx.net>
Tue, 5 Jan 2010 22:32:58 +0000 (22:32 +0000)
committerPeter Kümmel <syntheticpp@gmx.net>
Tue, 5 Jan 2010 22:32:58 +0000 (22:32 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@32785 a592a061-630c-0410-9148-cb99ea01b6c8

src/frontends/qt4/GuiProgressView.cpp
src/frontends/qt4/GuiProgressView.h

index 51bb3b0510c508b58bbedbb2a12e53b924a62dca..568e2111ee863ac3dcdc074658dda5ab0a67a96d 100644 (file)
@@ -25,6 +25,7 @@
 #include <QTime>
 
 #include <QCheckBox>
+#include <QDebug>
 
 using namespace std;
 using namespace lyx::support;
@@ -66,22 +67,21 @@ GuiProgressView::GuiProgressView(GuiView & parent, Qt::DockWidgetArea area,
        widget_->outTE->setFont(font);
        widget_->tabWidget->widget(0)->setContentsMargins(-5, -7, 0, -7);
 
-       Debug::Type const levels = lyxerr.level();
-       // number of initial items in settings tab
-       int const level_count = Debug::levelCount();
-       for (int i = 0 ; i < level_count; i++) {
+       toggle_button = new LevelButton("Toggle ALL messages");
+       toggle_button->level = Debug::ANY;
+       toggle_button->setTristate(true);
+       toggle_button->setCheckState(Qt::PartiallyChecked);
+       widget_->settingsLayout->addWidget(toggle_button);
+       connect(toggle_button, SIGNAL(stateChanged(int)), this, SLOT(tristateChanged(int)));
+
+       // ignore Debug::NONE and Debug::ANY
+       int const level_count = Debug::levelCount() - 1;
+       for (int i = 1 ; i < level_count; i++) {
                Debug::Type const level = Debug::value(i);
                LevelButton * box = new LevelButton(toqstr(Debug::description(level)));
                box->level = level;
                widget_->settingsLayout->addWidget(box, (i + 3) % 10, (i + 3) / 10);
-
                box->setChecked(false);
-               if ((levels == Debug::ANY) && (levels == level))
-                       box->setChecked(true);
-               else
-                       if ((level != Debug::ANY) && (levels & level))
-                               box->setChecked(true);
-
                level_buttons << box;
                connect(box, SIGNAL(stateChanged(int)), this, SLOT(levelChanged()));
        }
@@ -110,18 +110,39 @@ GuiProgressView::GuiProgressView(GuiView & parent, Qt::DockWidgetArea area,
 void GuiProgressView::levelChanged()
 {
        int level = Debug::NONE;
-       Q_FOREACH(const LevelButton* button, level_buttons) {
+       checked_buttons.clear();
+       Q_FOREACH(LevelButton* button, level_buttons) {
                if (button->isChecked()) {
-                       // Debug::NONE overwrites other levels
-                       if (button->level == Debug::NONE) {
-                               level = Debug::NONE;
-                               break;
-                       } else {
-                               level |= button->level;
-                       }
+                       level |= button->level;
+                       checked_buttons << button;
                }
        }
        dispatch(FuncRequest(LFUN_DEBUG_LEVEL_SET, convert<string>(level)));
+       
+       toggle_button->blockSignals(true);
+       toggle_button->setCheckState (Qt::PartiallyChecked);
+       toggle_button->blockSignals(false);
+}
+
+
+void GuiProgressView::tristateChanged(int state)
+{
+       if (state != Qt::PartiallyChecked) {
+               Q_FOREACH(LevelButton* button, level_buttons) {
+                       button->blockSignals(true);
+                       button->setChecked(toggle_button->checkState());
+                       button->blockSignals(false);
+               }
+               int level = (state == Qt::Checked ? Debug::ANY : Debug::NONE);
+               dispatch(FuncRequest(LFUN_DEBUG_LEVEL_SET, convert<string>(level)));
+       } else {
+               Q_FOREACH(LevelButton* button, checked_buttons) {
+                       button->blockSignals(true);
+                       button->setChecked(true);
+                       button->blockSignals(false);
+               }
+               levelChanged();
+       }
 }
 
 
index 9a08dac133fbd49205ac96291db24dd1d939bcea..6eb53cfa75d6259fc2be8b3f17527d76711c8508 100644 (file)
@@ -74,6 +74,7 @@ private Q_SLOTS:
        void clearText();
 
        void levelChanged();
+  void tristateChanged(int state);
 
 private:
        ProgressViewWidget * widget_;
@@ -82,6 +83,8 @@ private:
        void hideEvent(QHideEvent*);
 
        QList<LevelButton*> level_buttons;
+       QList<LevelButton*> checked_buttons;
+       LevelButton* toggle_button;
 };