From 8f449c7fd33c1b25f95aaba0d8c42adbe6c53592 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Peter=20K=C3=BCmmel?= Date: Tue, 5 Jan 2010 22:32:58 +0000 Subject: [PATCH] toggle debug levels between all/selected/none git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@32785 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/frontends/qt4/GuiProgressView.cpp | 59 ++++++++++++++++++--------- src/frontends/qt4/GuiProgressView.h | 3 ++ 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/src/frontends/qt4/GuiProgressView.cpp b/src/frontends/qt4/GuiProgressView.cpp index 51bb3b0510..568e2111ee 100644 --- a/src/frontends/qt4/GuiProgressView.cpp +++ b/src/frontends/qt4/GuiProgressView.cpp @@ -25,6 +25,7 @@ #include #include +#include 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(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(level))); + } else { + Q_FOREACH(LevelButton* button, checked_buttons) { + button->blockSignals(true); + button->setChecked(true); + button->blockSignals(false); + } + levelChanged(); + } } diff --git a/src/frontends/qt4/GuiProgressView.h b/src/frontends/qt4/GuiProgressView.h index 9a08dac133..6eb53cfa75 100644 --- a/src/frontends/qt4/GuiProgressView.h +++ b/src/frontends/qt4/GuiProgressView.h @@ -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 level_buttons; + QList checked_buttons; + LevelButton* toggle_button; }; -- 2.39.2