]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiRef.cpp
Merge remote-tracking branch 'features/properpaint' into 2.3.2-staging
[lyx.git] / src / frontends / qt4 / GuiRef.cpp
index ecfe598c4cc64f8551339a1079a598dce15fed7f..ae440b05adcc8b22b8be37ce360570c9fafe40f1 100644 (file)
@@ -16,6 +16,7 @@
 #include "GuiApplication.h"
 
 #include "Buffer.h"
+#include "BufferParams.h"
 #include "BufferList.h"
 #include "FuncRequest.h"
 
@@ -52,16 +53,19 @@ GuiRef::GuiRef(GuiView & lv)
 
        // 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 available labels"));
-#endif
        filter_->setToolTip(qt_("Enter string to filter the list of available labels"));
+#if (QT_VERSION < 0x050000)
+       connect(filter_, SIGNAL(downPressed()),
+               refsTW, SLOT(setFocus()));
+#else
+       connect(filter_, &FancyLineEdit::downPressed,
+               refsTW, [=](){ focusAndHighlight(refsTW); });
+#endif
 
        filterBarL->addWidget(filter_, 0);
        findKeysLA->setBuddy(filter_);
@@ -87,6 +91,8 @@ GuiRef::GuiRef(GuiView & lv)
                this, SLOT(changed_adaptor()));
        connect(filter_, SIGNAL(textEdited(QString)),
                this, SLOT(filterLabels()));
+       connect(filter_, SIGNAL(rightButtonClicked()),
+               this, SLOT(resetFilter()));
        connect(csFindCB, SIGNAL(clicked()),
                this, SLOT(filterLabels()));
        connect(nameED, SIGNAL(textChanged(QString)),
@@ -107,6 +113,14 @@ GuiRef::GuiRef(GuiView & lv)
                this, SLOT(updateClicked()));
        connect(bufferCO, SIGNAL(activated(int)),
                this, SLOT(updateClicked()));
+       connect(pluralCB, SIGNAL(clicked()),
+               this, SLOT(changed_adaptor()));
+       connect(capsCB, SIGNAL(clicked()),
+               this, SLOT(changed_adaptor()));
+       connect(noprefixCB, SIGNAL(clicked()),
+               this, SLOT(changed_adaptor()));
+
+       enableBoxes();
 
        bc().setPolicy(ButtonPolicy::NoRepeatedApplyReadOnlyPolicy);
        bc().setOK(okPB);
@@ -116,6 +130,8 @@ GuiRef::GuiRef(GuiView & lv)
 
        restored_buffer_ = -1;
        active_buffer_ = -1;
+
+       setFocusProxy(filter_);
 }
 
 
@@ -128,9 +144,23 @@ void GuiRef::enableView(bool enable)
 }
 
 
+void GuiRef::enableBoxes()
+{
+       bool const isFormatted =
+           (InsetRef::getName(typeCO->currentIndex()) == "formatted");
+       bool const isLabelOnly =
+           (InsetRef::getName(typeCO->currentIndex()) == "labelonly");
+       bool const usingRefStyle = buffer().params().use_refstyle;
+       pluralCB->setEnabled(isFormatted && usingRefStyle);
+       capsCB->setEnabled(isFormatted && usingRefStyle);
+       noprefixCB->setEnabled(isLabelOnly);
+}
+
+
 void GuiRef::changed_adaptor()
 {
        changed();
+       enableBoxes();
 }
 
 
@@ -140,7 +170,7 @@ void GuiRef::gotoClicked()
        // to which we are going (or from which we are returning) is
        // restored in the dialog. It's a bit of a hack, but it works,
        // and no-one seems to have any better idea.
-       bool const toggled = 
+       bool const toggled =
                last_reference_.isEmpty() || last_reference_.isNull();
        if (toggled)
                last_reference_ = referenceED->text();
@@ -283,6 +313,10 @@ void GuiRef::updateContents()
        if (!typeAllowed())
                typeCO->setCurrentIndex(0);
 
+       pluralCB->setChecked(params_["plural"] == "true");
+       capsCB->setChecked(params_["caps"] == "true");
+       noprefixCB->setChecked(params_["noprefix"] == "true");
+
        // insert buffer list
        bufferCO->clear();
        FileNameList const buffers(theBufferList().fileNames());
@@ -305,6 +339,7 @@ void GuiRef::updateContents()
        active_buffer_ = thebuffer;
 
        updateRefs();
+       enableBoxes();
        // Activate OK/Apply buttons if the users inserts a new ref
        // and we have a valid pre-setting.
        bc().setValid(isValid() && new_inset);
@@ -318,7 +353,12 @@ void GuiRef::applyView()
        params_.setCmdName(InsetRef::getName(typeCO->currentIndex()));
        params_["reference"] = qstring_to_ucs4(last_reference_);
        params_["name"] = qstring_to_ucs4(nameED->text());
-
+       params_["plural"] = pluralCB->isChecked() ?
+             from_ascii("true") : from_ascii("false");
+       params_["caps"] = capsCB->isChecked() ?
+             from_ascii("true") : from_ascii("false");
+       params_["noprefix"] = noprefixCB->isChecked() ?
+             from_ascii("true") : from_ascii("false");
        restored_buffer_ = bufferCO->currentIndex();
 }
 
@@ -501,8 +541,6 @@ void GuiRef::updateRefs()
        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);
        redoRefs();
 }
 
@@ -541,6 +579,13 @@ void GuiRef::filterLabels()
 }
 
 
+void GuiRef::resetFilter()
+{
+       filter_->setText(QString());
+       filterLabels();
+}
+
+
 bool GuiRef::initialiseParams(std::string const & data)
 {
        InsetCommand::string2params(data, params_);