From 774becf693c8bbfcf475cb7046358c7a326571fb Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Sat, 17 Sep 2016 13:03:33 +0200 Subject: [PATCH] Clean up the crossrefs dialog. --- src/frontends/qt4/GuiRef.cpp | 76 ++++--- src/frontends/qt4/GuiRef.h | 6 +- src/frontends/qt4/ui/RefUi.ui | 413 +++++++++++++++++----------------- 3 files changed, 266 insertions(+), 229 deletions(-) diff --git a/src/frontends/qt4/GuiRef.cpp b/src/frontends/qt4/GuiRef.cpp index 7a1335affa..178fdcd5f8 100644 --- a/src/frontends/qt4/GuiRef.cpp +++ b/src/frontends/qt4/GuiRef.cpp @@ -13,6 +13,8 @@ #include "GuiRef.h" +#include "GuiApplication.h" + #include "Buffer.h" #include "BufferList.h" #include "FuncRequest.h" @@ -48,6 +50,26 @@ GuiRef::GuiRef(GuiView & lv) at_ref_ = false; + // The filter bar + filter_ = new FancyLineEdit(this); +#if QT_VERSION >= 0x040600 + filter_->setButtonPixmap(FancyLineEdit::Right, getPixmap("images/", "editclear", "svgz,png")); + filter_->setButtonVisible(FancyLineEdit::Right, true); + filter_->setButtonToolTip(FancyLineEdit::Right, qt_("Clear text")); + filter_->setAutoHideButton(FancyLineEdit::Right, true); +#endif +#if QT_VERSION >= 0x040700 + filter_->setPlaceholderText(qt_("All avail. Labels")); +#endif + filter_->setToolTip(qt_("Enter string to filter the list of available labels")); + + filterBarL->addWidget(filter_, 0); + findKeysLA->setBuddy(filter_); + + sortingCO->addItem(qt_("By Occurrence"), "unsorted"); + sortingCO->addItem(qt_("Alphabetically (Case-Insensitive)"), "nocase"); + sortingCO->addItem(qt_("Alphabetically (Case-Sensitive)"), "case"); + refsTW->setColumnCount(1); refsTW->header()->setVisible(false); @@ -59,9 +81,11 @@ GuiRef::GuiRef(GuiView & lv) connect(typeCO, SIGNAL(activated(int)), this, SLOT(changed_adaptor())); + connect(referenceED, SIGNAL(textChanged(QString)), + this, SLOT(refTextChanged(QString))); connect(referenceED, SIGNAL(textChanged(QString)), this, SLOT(changed_adaptor())); - connect(findLE, SIGNAL(textEdited(QString)), + connect(filter_, SIGNAL(textEdited(QString)), this, SLOT(filterLabels())); connect(csFindCB, SIGNAL(clicked()), this, SLOT(filterLabels())); @@ -73,10 +97,8 @@ GuiRef::GuiRef(GuiView & lv) this, SLOT(selectionChanged())); connect(refsTW, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(refSelected(QTreeWidgetItem *))); - connect(sortCB, SIGNAL(clicked()), + connect(sortingCO, SIGNAL(activated(int)), this, SLOT(sortToggled())); - connect(caseSensitiveCB, SIGNAL(clicked()), - this, SLOT(caseSensitiveToggled())); connect(groupCB, SIGNAL(clicked()), this, SLOT(groupToggled())); connect(gotoPB, SIGNAL(clicked()), @@ -167,6 +189,14 @@ void GuiRef::refHighlighted(QTreeWidgetItem * sel) } +void GuiRef::refTextChanged(QString const & str) +{ + gotoPB->setEnabled(!str.isEmpty()); + typeCO->setEnabled(!str.isEmpty()); + typeLA->setEnabled(!str.isEmpty()); +} + + void GuiRef::refSelected(QTreeWidgetItem * sel) { if (isBufferReadonly()) @@ -190,13 +220,6 @@ void GuiRef::refSelected(QTreeWidgetItem * sel) void GuiRef::sortToggled() -{ - caseSensitiveCB->setEnabled(sortCB->isChecked()); - redoRefs(); -} - - -void GuiRef::caseSensitiveToggled() { redoRefs(); } @@ -316,16 +339,14 @@ bool GuiRef::typeAllowed() void GuiRef::setGoBack() { gotoPB->setText(qt_("&Go Back")); - gotoPB->setToolTip(""); - gotoPB->setToolTip(qt_("Jump back")); + gotoPB->setToolTip(qt_("Jump back to the original cursor location")); } void GuiRef::setGotoRef() { gotoPB->setText(qt_("&Go to Label")); - gotoPB->setToolTip(""); - gotoPB->setToolTip(qt_("Jump to label")); + gotoPB->setToolTip(qt_("Jump to the selected label")); } @@ -392,13 +413,14 @@ void GuiRef::redoRefs() if (noprefix) refsCategories.insert(0, qt_("")); - if (sortCB->isEnabled() && sortCB->isChecked()) { - if(caseSensitiveCB->isEnabled() && caseSensitiveCB->isChecked()) - qSort(refsStrings.begin(), refsStrings.end()); - else - qSort(refsStrings.begin(), refsStrings.end(), - caseInsensitiveLessThan /*defined above*/); - } + QString const sort = sortingCO->isEnabled() ? + sortingCO->itemData(sortingCO->currentIndex()).toString() + : QString(); + if (sort == "nocase") + qSort(refsStrings.begin(), refsStrings.end(), + caseInsensitiveLessThan /*defined above*/); + else if (sort == "case") + qSort(refsStrings.begin(), refsStrings.end()); if (groupCB->isChecked()) { QList refsCats; @@ -459,6 +481,10 @@ void GuiRef::redoRefs() // Re-activate the emission of signals by these widgets. refsTW->blockSignals(false); referenceED->blockSignals(false); + + gotoPB->setEnabled(!referenceED->text().isEmpty()); + typeCO->setEnabled(!referenceED->text().isEmpty()); + typeLA->setEnabled(!referenceED->text().isEmpty()); } @@ -472,13 +498,11 @@ void GuiRef::updateRefs() Buffer const * buf = theBufferList().getBuffer(name); buf->getLabelList(refs_); } - sortCB->setEnabled(!refs_.empty()); - caseSensitiveCB->setEnabled(sortCB->isEnabled() && sortCB->isChecked()); + sortingCO->setEnabled(!refs_.empty()); refsTW->setEnabled(!refs_.empty()); groupCB->setEnabled(!refs_.empty()); // refsTW should only be the focus proxy when it is enabled setFocusProxy(refs_.empty() ? 0 : refsTW); - gotoPB->setEnabled(!refs_.empty()); redoRefs(); } @@ -510,7 +534,7 @@ void GuiRef::filterLabels() while (*it) { (*it)->setHidden( (*it)->childCount() == 0 - && !(*it)->text(0).contains(findLE->text(), cs) + && !(*it)->text(0).contains(filter_->text(), cs) ); ++it; } diff --git a/src/frontends/qt4/GuiRef.h b/src/frontends/qt4/GuiRef.h index 250d407645..2873046352 100644 --- a/src/frontends/qt4/GuiRef.h +++ b/src/frontends/qt4/GuiRef.h @@ -14,6 +14,7 @@ #include "GuiDialog.h" #include "ui_RefUi.h" +#include "FancyLineEdit.h" #include "insets/InsetCommandParams.h" @@ -41,9 +42,9 @@ private Q_SLOTS: void filterLabels(); void refHighlighted(QTreeWidgetItem *); void selectionChanged(); + void refTextChanged(QString const &); void refSelected(QTreeWidgetItem *); void sortToggled(); - void caseSensitiveToggled(); void groupToggled(); void updateClicked(); void resetDialog(); @@ -93,6 +94,9 @@ private: /// InsetCommandParams params_; + /// contains the search box + FancyLineEdit * filter_; + /// went to a reference ? bool at_ref_; /// the last reference entered or examined diff --git a/src/frontends/qt4/ui/RefUi.ui b/src/frontends/qt4/ui/RefUi.ui index daad34192c..3e457266d6 100644 --- a/src/frontends/qt4/ui/RefUi.ui +++ b/src/frontends/qt4/ui/RefUi.ui @@ -1,3 +1,4 @@ + RefUi @@ -6,7 +7,7 @@ 0 0 435 - 500 + 539 @@ -15,45 +16,80 @@ true - - - - - La&bels in: - - - bufferCO - - - - - - - - 0 - 0 - - - - - - - - Qt::Horizontal - - + + + + + + + + + &Filter: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + &In[[buffer]]: + + + bufferCO + + + + + + + + + + + + + + + + Filter case-sensitively + + + Case Sensiti&ve + + + + + + + + + + 0 + 0 + + + + The (sub-)document from which the available labels are displayed + + + + + + - + - &References + Available &Labels: refsTW - + @@ -62,121 +98,98 @@ - + 6 - + + 0 + + + 0 + + + 0 + + 0 - + - Fil&ter: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + So&rt: - findLE + sortingCO - + - Enter string to filter the label list - - - + Sorting of the list of available labels - + - Filter case-sensitively + Group the list of available labels by prefix (e.g. "sec:") - Case-sensiti&ve + Grou&p - - - - - - 6 - - - 0 - - - - - 6 - - - 0 - - - - - Sort labels in alphabetical order (case-insensitively unless the Case-sensitive option is checked) - - - &Sort - - - - - - - false - - - Sort labels case-sensitively in alphabetical order - - - Cas&e-sensitive - - - - - - - Group labels by prefix (e.g. "sec:") - - - Grou&p - - - - - - + Qt::Horizontal - 20 + 40 20 + + + + + + + + Sele&cted Label: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + referenceED + + + + + + + Select a label from the list above or enter a label manually + + + - + 0 0 + + Jump to the selected label + &Go to Label @@ -184,105 +197,119 @@ - - - - &Label: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - referenceED - - - - - - - - - - - 0 - 0 - - - - Cross-reference as it appears in output - + + - - <reference> - - - - - (<reference>) - - - - - <page> - - - - - on page <page> - + + + Reference For&mat: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + typeCO + + - - <reference> on page <page> - + + + + 0 + 0 + + + + Adjust the style of the cross-reference + + + + <reference> + + + + + (<reference>) + + + + + <page> + + + + + on page <page> + + + + + <reference> on page <page> + + + + + Formatted reference + + + + + Textual reference + + + + + + + - - Formatted reference - + + + false + + + &Name: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + nameED + + - - Textual reference - + + + false + + - - - - - - false - - - &Name: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - nameED - - - - - - - false - - + - + 6 - + + 0 + + + 0 + + + 0 + + 0 - + 0 0 @@ -349,30 +376,12 @@ - - - - &Format: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - typeCO - - - - bufferCO refsTW - findLE csFindCB - sortCB - caseSensitiveCB groupCB - gotoPB referenceED typeCO nameED -- 2.39.2