#include "GuiApplication.h"
#include "GuiSelectionManager.h"
-#include "LyXToolBox.h"
#include "qt_helpers.h"
#include "Buffer.h"
GuiCitation::GuiCitation(GuiView & lv)
: DialogView(lv, "citation", qt_("Citation")),
- style_(0), params_(insetCode("citation"))
+ style_(QString()), literal_(false), params_(insetCode("citation"))
{
setupUi(this);
void GuiCitation::applyView()
{
int const choice = max(0, citationStyleCO->currentIndex());
- style_ = choice;
+ style_ = citationStyleCO->itemData(citationStyleCO->currentIndex()).toString();
bool const full = starredCB->isChecked();
bool const force = forceuppercaseCB->isChecked();
}
+void GuiCitation::on_literalCB_clicked()
+{
+ literal_ = literalCB->isChecked();
+ changed();
+}
+
+
void GuiCitation::updateControls()
{
BiblioInfo const & bi = bibInfo();
QModelIndex idx = selectionManager->getSelectedIndex(1);
updateInfo(bi, idx);
int i = citationStyleCO->currentIndex();
- if (i == -1)
+ if (i == -1 || i > int(citeStyles_.size()))
i = 0;
updateFormatting(citeStyles_[i]);
selectionManager->update();
}
-void GuiCitation::updateFormatting(CitationStyle currentStyle)
+void GuiCitation::updateFormatting(CitationStyle const & currentStyle)
{
BufferParams const bp = documentBuffer().params();
bool const force = currentStyle.forceUpperCase;
forceuppercaseCB->setEnabled(force && haveSelection);
if (force && haveSelection)
- forceuppercaseCB->setToolTip("Force upper case in names (\"Del Piero\", not \"del Piero\").");
+ forceuppercaseCB->setToolTip(qt_("Force upper case in names (\"Del Piero\", not \"del Piero\")."));
else
- forceuppercaseCB->setToolTip("Force upper case in names (\"Del Piero\", not \"del Piero\"), "
- "if the current citation style supports this.");
+ forceuppercaseCB->setToolTip(qt_("Force upper case in names (\"Del Piero\", not \"del Piero\"), "
+ "if the current citation style supports this."));
starredCB->setEnabled(full && haveSelection);
textBeforeED->setEnabled(textbefore && haveSelection);
textBeforeLA->setEnabled(textbefore && haveSelection);
}
static const size_t max_length = 80;
- QStringList sty = citationStyles(bi, max_length);
+ BiblioInfo::CiteStringMap sty = citationStyles(bi, max_length);
- if (sty.isEmpty()) {
+ if (sty.empty()) {
// some error
citationStyleCO->setEnabled(false);
citationStyleLA->setEnabled(false);
citationStyleCO->blockSignals(true);
- // save old index
- int const curindex = citationStyleCO->currentIndex();
- int const oldIndex = (curindex < 0) ? style_ : curindex;
+ // save old style selection
+ QString const curdata =
+ citationStyleCO->itemData(citationStyleCO->currentIndex()).toString();
+ QString const olddata = (curdata.isEmpty()) ? style_ : curdata;
citationStyleCO->clear();
- citationStyleCO->insertItems(0, sty);
+ BiblioInfo::CiteStringMap::const_iterator cit = sty.begin();
+ BiblioInfo::CiteStringMap::const_iterator end = sty.end();
+ for (int ii = 1; cit != end; ++cit, ++ii)
+ citationStyleCO->addItem(toqstr(cit->second), toqstr(cit->first));
citationStyleCO->setEnabled(true);
citationStyleLA->setEnabled(true);
- // restore old index
- if (oldIndex != -1 && oldIndex < citationStyleCO->count())
- citationStyleCO->setCurrentIndex(oldIndex);
+ // restore old style selection
+ int const i = citationStyleCO->findData(olddata);
+ if (i != -1)
+ citationStyleCO->setCurrentIndex(i);
citationStyleCO->blockSignals(false);
}
documentBuffer().params().fullAuthorList());
textBeforeED->setText(toqstr(params_["before"]));
textAfterED->setText(toqstr(params_["after"]));
- literalCB->setChecked(params_["literal"] == "true");
+
+ // if this is a new citation, we set the literal checkbox
+ // to its last set value.
+ if (cited_keys_.isEmpty())
+ literalCB->setChecked(literal_);
+ else
+ literalCB->setChecked(params_["literal"] == "true");
setPreTexts(getVectorFromString(params_["pretextlist"], from_ascii("\t")));
setPostTexts(getVectorFromString(params_["posttextlist"], from_ascii("\t")));
}
-QStringList GuiCitation::citationStyles(BiblioInfo const & bi, size_t max_size)
+BiblioInfo::CiteStringMap GuiCitation::citationStyles(BiblioInfo const & bi, size_t max_size)
{
vector<docstring> const keys = to_docstring_vector(cited_keys_);
vector<CitationStyle> styles = citeStyles_;
ci.isQualified = qualified;
ci.pretexts = pres;
ci.posttexts = posts;
- vector<docstring> ret = bi.getCiteStrings(keys, styles, documentBuffer(), ci);
- return to_qstring_list(ret);
+ BiblioInfo::CiteStringMap ret = bi.getCiteStrings(keys, styles, documentBuffer(), ci);
+ return ret;
}
}
-void GuiCitation::saveSession() const
+void GuiCitation::saveSession(QSettings & settings) const
{
- Dialog::saveSession();
- QSettings settings;
+ Dialog::saveSession(settings);
settings.setValue(
sessionKey() + "/regex", regexp_->isChecked());
settings.setValue(
sessionKey() + "/autofind", instant_->isChecked());
settings.setValue(
sessionKey() + "/citestyle", style_);
+ settings.setValue(
+ sessionKey() + "/literal", literal_);
}
regexp_->setChecked(settings.value(sessionKey() + "/regex").toBool());
casesense_->setChecked(settings.value(sessionKey() + "/casesensitive").toBool());
instant_->setChecked(settings.value(sessionKey() + "/autofind", true).toBool());
- style_ = settings.value(sessionKey() + "/citestyle").toInt();
+ style_ = settings.value(sessionKey() + "/citestyle").toString();
+ literal_ = settings.value(sessionKey() + "/literal", false).toBool();
updateFilterHint();
}