From 8d0378b75db28281f9eadd8b218917801a15d132 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Spitzm=C3=BCller?= Date: Mon, 11 Jan 2010 07:30:45 +0000 Subject: [PATCH] Proposal for a more structured UI. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@32962 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/frontends/qt4/GuiProgressView.cpp | 113 +++++++------- src/frontends/qt4/GuiProgressView.h | 12 +- src/frontends/qt4/ui/ProgressViewUi.ui | 204 ++++++++++++++----------- 3 files changed, 178 insertions(+), 151 deletions(-) diff --git a/src/frontends/qt4/GuiProgressView.cpp b/src/frontends/qt4/GuiProgressView.cpp index 2677c2997b..0e137c89c4 100644 --- a/src/frontends/qt4/GuiProgressView.cpp +++ b/src/frontends/qt4/GuiProgressView.cpp @@ -6,6 +6,7 @@ * * \author Peter Kümmel * \author Pavel Sanda + * \author Jürgen Spitzmüller * * Full author contact details are available in file CREDITS. */ @@ -34,23 +35,9 @@ namespace lyx { namespace frontend { -struct LevelButton : QCheckBox -{ - LevelButton(const QString& name) : QCheckBox(name) {} - Debug::Type level; - - void setCheckStatusSilent(Qt::CheckState state) { - blockSignals(true); - setCheckState(state); - blockSignals(false); - } -}; - - ProgressViewWidget::ProgressViewWidget() { setupUi(this); - } @@ -61,7 +48,8 @@ GuiProgressView::~GuiProgressView() GuiProgressView::GuiProgressView(GuiView & parent, Qt::DockWidgetArea area, - Qt::WindowFlags flags) : DockView(parent, "progress", "Debug/Progress window", area, flags) + Qt::WindowFlags flags) + : DockView(parent, "progress", "Debug/Progress window", area, flags) { widget_ = new ProgressViewWidget(); #if QT_VERSION < 0x040400 @@ -78,26 +66,33 @@ GuiProgressView::GuiProgressView(GuiView & parent, Qt::DockWidgetArea area, widget_->outTE->setFont(font); widget_->tabWidget->widget(0)->setContentsMargins(-5, -7, 0, -7); - 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))); + connect(widget_->debugNoneRB, SIGNAL(clicked()), + this, SLOT(debugSelectionChanged())); + connect(widget_->debugSelectedRB, SIGNAL(clicked()), + this, SLOT(debugSelectionChanged())); + connect(widget_->debugAnyRB, SIGNAL(clicked()), + this, SLOT(debugSelectionChanged())); + widget_->debugMessagesTW->setEnabled(false); + widget_->debugNoneRB->setChecked(true); // ignore Debug::NONE and Debug::ANY int const level_count = Debug::levelCount() - 1; + QTreeWidgetItem * item = 0; + widget_->debugMessagesTW->setColumnCount(2); + widget_->debugMessagesTW->headerItem()->setText(0, qt_("Debug Level")); + widget_->debugMessagesTW->headerItem()->setText(1, qt_("Display")); for (int i = 1 ; i < level_count; i++) { + item = new QTreeWidgetItem(widget_->debugMessagesTW); 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); - level_buttons << box; - connect(box, SIGNAL(stateChanged(int)), this, SLOT(levelChanged())); + item->setText(0, toqstr(Debug::description(level))); + item->setData(0, Qt::UserRole, int(level)); + item->setText(1, qt_("No")); } - widget_->settingsLayout->activate(); - + widget_->debugMessagesTW->resizeColumnToContents(0); + connect(widget_->debugMessagesTW, + SIGNAL(itemActivated(QTreeWidgetItem *, int)), + this, SLOT(debugMessageActivated(QTreeWidgetItem *, int))); + GuiProgress * progress = dynamic_cast(ProgressInterface::instance()); @@ -118,36 +113,46 @@ GuiProgressView::GuiProgressView(GuiView & parent, Qt::DockWidgetArea area, } -void GuiProgressView::levelChanged() +void GuiProgressView::debugMessageActivated(QTreeWidgetItem * item, int) { - int level = Debug::NONE; - checked_buttons.clear(); - Q_FOREACH(LevelButton* button, level_buttons) { - if (button->isChecked()) { - level |= button->level; - checked_buttons << button; - } - } - dispatch(FuncRequest(LFUN_DEBUG_LEVEL_SET, convert(level))); - - toggle_button->setCheckStatusSilent (Qt::PartiallyChecked); + if (item == 0) + return; + + QString const no = qt_("No"); + QString const yes = qt_("Yes"); + + bool selected = (item->text(1) == yes); + item->setText(1, selected ? no : yes); + + levelChanged(); } -void GuiProgressView::tristateChanged(int state) +void GuiProgressView::levelChanged() { - if (state != Qt::PartiallyChecked) { - Q_FOREACH(LevelButton* button, level_buttons) { - button->setCheckStatusSilent(toggle_button->checkState()); - } - 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->setCheckStatusSilent(Qt::Checked); - } - levelChanged(); + int level = Debug::NONE; + QTreeWidgetItemIterator it(widget_->debugMessagesTW); + while (*it) { + if ((*it)->text(1) == qt_("Yes")) + level |= (*it)->data(0, Qt::UserRole).toInt(); + ++it; } + dispatch(FuncRequest(LFUN_DEBUG_LEVEL_SET, convert(level))); +} + + +void GuiProgressView::debugSelectionChanged() +{ + int level = Debug::NONE; + if (widget_->debugAnyRB->isChecked()) + level = Debug::ANY; + else if (widget_->debugSelectedRB->isChecked()) { + widget_->debugMessagesTW->setEnabled(true); + levelChanged(); + return; + } + widget_->debugMessagesTW->setEnabled(false); + dispatch(FuncRequest(LFUN_DEBUG_LEVEL_SET, convert(level))); } @@ -220,8 +225,6 @@ void GuiProgressView::hideEvent(QHideEvent*) } - - Dialog * createGuiProgressView(GuiView & guiview) { #ifdef Q_WS_MACX diff --git a/src/frontends/qt4/GuiProgressView.h b/src/frontends/qt4/GuiProgressView.h index 99e545b0d6..4fbfa2b119 100644 --- a/src/frontends/qt4/GuiProgressView.h +++ b/src/frontends/qt4/GuiProgressView.h @@ -34,8 +34,6 @@ class QShowEvent; namespace lyx { namespace frontend { -struct LevelButton; - class ProgressViewWidget : public QWidget, public Ui::ProgressViewUi { @@ -76,19 +74,15 @@ private Q_SLOTS: void appendText(QString const & text); void appendLyXErrText(QString const & text); void clearText(); - - void levelChanged(); - void tristateChanged(int state); + void debugMessageActivated(QTreeWidgetItem *, int); + void debugSelectionChanged(); private: ProgressViewWidget * widget_; + void levelChanged(); void showEvent(QShowEvent*); void hideEvent(QHideEvent*); - - QList level_buttons; - QList checked_buttons; - LevelButton* toggle_button; }; diff --git a/src/frontends/qt4/ui/ProgressViewUi.ui b/src/frontends/qt4/ui/ProgressViewUi.ui index 103e408c85..31b99e8f8c 100644 --- a/src/frontends/qt4/ui/ProgressViewUi.ui +++ b/src/frontends/qt4/ui/ProgressViewUi.ui @@ -1,7 +1,7 @@ - + ProgressViewUi - - + + 0 0 @@ -9,149 +9,179 @@ 518 - + - - - - + + + + true - - - 13 - 7 + + 0 0 - + 0 0 - + false - + Qt::LeftToRight - + false - + QTabWidget::East - + QTabWidget::Rounded - + 0 - + 16 16 - + true - - + + Output - - - - - - 13 - 7 + + + + + 1 0 - + 16777215 16777215 - + QFrame::StyledPanel - + QFrame::Sunken - + 1 - + true - - + + Settings - - - - + + + + + Display statusbar messages? + + + &Statusbar messages + + true - - - - 0 - 0 - 480 - 474 - + + + + + + Select the debug messages that should be displayed + + + + 1 - - - - - - - Automatic cleanup of the window before LaTeX compilation proceeds - - - &Automatic clear - - - true - - - - - - - Statusbar messages - - - true - - - - - - - ----- Debugging levels ----- - - - - - - - + + + + + + + Debug messages + + + + + + Display no debug messages + + + &None + + + + + + + Display the debug messages selected to the right + + + S&elected + + + + + + + Display all debug messages + + + &All + + + + + + + + + + Qt::Vertical + + + + 187 + 404 + + + + + + + + Automatic cleanup of the window before LaTeX compilation proceeds + + + &Clear automatically + @@ -161,7 +191,7 @@ - qt_i18n.h + qt_i18n.h