X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiRef.cpp;h=d98a507b371d61ece7744b14900f688276016624;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=e685d00920506df795f934c68bcb9c00c228c4a4;hpb=90258a0dd34425631aa05b65e656b60ffed1711f;p=lyx.git diff --git a/src/frontends/qt4/GuiRef.cpp b/src/frontends/qt4/GuiRef.cpp index e685d00920..d98a507b37 100644 --- a/src/frontends/qt4/GuiRef.cpp +++ b/src/frontends/qt4/GuiRef.cpp @@ -47,24 +47,19 @@ GuiRef::GuiRef(GuiView & lv) at_ref_ = false; - //FIXME: when/if we support the xr package for cross-reference - //between independant files. Those can be re-enabled. - refsL->setEnabled(false); - refsL->hide(); - bufferCO->setEnabled(false); - bufferCO->hide(); - // Enabling is set in updateRefs. Disable for now in case no // call to updateContents follows (e.g. read-only documents). sortCB->setEnabled(false); + caseSensitiveCB->setEnabled(false); + caseSensitiveCB->setChecked(false); refsLW->setEnabled(false); gotoPB->setEnabled(false); connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK())); connect(applyPB, SIGNAL(clicked()), this, SLOT(slotApply())); connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose())); - connect(closePB, SIGNAL(clicked()), this, SLOT(reset_dialog())); - connect(this, SIGNAL(rejected()), this, SLOT(dialog_rejected())); + connect(closePB, SIGNAL(clicked()), this, SLOT(resetDialog())); + connect(this, SIGNAL(rejected()), this, SLOT(dialogRejected())); connect(typeCO, SIGNAL(activated(int)), this, SLOT(changed_adaptor())); @@ -76,10 +71,12 @@ GuiRef::GuiRef(GuiView & lv) this, SLOT(refHighlighted(QListWidgetItem *))); connect(refsLW, SIGNAL(itemSelectionChanged()), this, SLOT(selectionChanged())); - connect(refsLW, SIGNAL(itemActivated(QListWidgetItem *)), + connect(refsLW, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(refSelected(QListWidgetItem *))); - connect(sortCB, SIGNAL(clicked(bool)), - this, SLOT(sortToggled(bool))); + connect(sortCB, SIGNAL(clicked()), + this, SLOT(sortToggled())); + connect(caseSensitiveCB, SIGNAL(clicked()), + this, SLOT(caseSensitiveToggled())); connect(gotoPB, SIGNAL(clicked()), this, SLOT(gotoClicked())); connect(updatePB, SIGNAL(clicked()), @@ -93,6 +90,7 @@ GuiRef::GuiRef(GuiView & lv) bc().setCancel(closePB); bc().addReadOnly(refsLW); bc().addReadOnly(sortCB); + bc().addReadOnly(caseSensitiveCB); bc().addReadOnly(nameED); bc().addReadOnly(referenceED); bc().addReadOnly(typeCO); @@ -169,7 +167,14 @@ void GuiRef::refSelected(QListWidgetItem * sel) } -void GuiRef::sortToggled(bool on) +void GuiRef::sortToggled() +{ + caseSensitiveCB->setEnabled(sortCB->isChecked()); + redoRefs(); +} + + +void GuiRef::caseSensitiveToggled() { redoRefs(); } @@ -181,16 +186,16 @@ void GuiRef::updateClicked() } -void GuiRef::dialog_rejected() +void GuiRef::dialogRejected() { - reset_dialog(); + resetDialog(); // We have to do this manually, instead of calling slotClose(), because // the dialog has already been made invisible before rejected() triggers. Dialog::disconnect(); } -void GuiRef::reset_dialog() +void GuiRef::resetDialog() { at_ref_ = false; setGotoRef(); @@ -200,7 +205,7 @@ void GuiRef::reset_dialog() void GuiRef::closeEvent(QCloseEvent * e) { slotClose(); - reset_dialog(); + resetDialog(); e->accept(); } @@ -306,6 +311,11 @@ void GuiRef::gotoRef() at_ref_ = !at_ref_; } +inline bool caseInsensitiveLessThan(QString const & s1, QString const & s2) +{ + return s1.toLower() < s2.toLower(); +} + void GuiRef::redoRefs() { @@ -321,13 +331,20 @@ void GuiRef::redoRefs() // the first item inserted QString const oldSelection(referenceED->text()); - for (vector::const_iterator iter = refs_.begin(); - iter != refs_.end(); ++iter) { - refsLW->addItem(toqstr(*iter)); + QStringList refsStrings; + vector::const_iterator iter; + for (iter = refs_.begin(); iter != refs_.end(); ++iter) + refsStrings.append(toqstr(*iter)); + + if (sortCB->isEnabled() && sortCB->isChecked()) { + if(caseSensitiveCB->isEnabled() && caseSensitiveCB->isChecked()) + qSort(refsStrings.begin(), refsStrings.end()); + else + qSort(refsStrings.begin(), refsStrings.end(), + caseInsensitiveLessThan /*defined above*/); } - if (sortCB->isEnabled() && sortCB->isChecked()) - refsLW->sortItems(); + refsLW->addItems(refsStrings); referenceED->setText(oldSelection); @@ -368,6 +385,7 @@ void GuiRef::updateRefs() buf->getLabelList(refs_); } sortCB->setEnabled(!refs_.empty()); + caseSensitiveCB->setEnabled(sortCB->isEnabled() && sortCB->isChecked()); refsLW->setEnabled(!refs_.empty()); // refsLW should only be the focus proxy when it is enabled setFocusProxy(refs_.empty() ? 0 : refsLW);