X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetFoot.cpp;h=9df6f5d590f60073648efd7bc38475951f4c3244;hb=6da7ee1be170629aa6647aa8b2d6cf66ea928a9b;hp=fd8038f4ee654fef029a6bb9b4892f464fbef4d5;hpb=c6c0559be0566c921c279cbf78d51ac4bcca4fcd;p=lyx.git diff --git a/src/insets/InsetFoot.cpp b/src/insets/InsetFoot.cpp index fd8038f4ee..9df6f5d590 100644 --- a/src/insets/InsetFoot.cpp +++ b/src/insets/InsetFoot.cpp @@ -32,10 +32,16 @@ using namespace std; namespace lyx { InsetFoot::InsetFoot(Buffer * buf) - : InsetFootlike(buf) + : InsetFootlike(buf), intitle_(false) {} +docstring InsetFoot::layoutName() const +{ + return intitle_ ? from_ascii("Foot:InTitle") : from_ascii("Foot"); +} + + void InsetFoot::updateBuffer(ParIterator const & it, UpdateType utype) { BufferParams const & bp = buffer().masterBuffer()->params(); @@ -44,69 +50,58 @@ void InsetFoot::updateBuffer(ParIterator const & it, UpdateType utype) // the footnote counter is local to this inset cnts.saveLastCounter(); } - Paragraph const & outer = it.paragraph(); + + intitle_ = false; + for (size_type sl = 0 ; sl < it.depth() ; ++ sl) { + if (it[sl].text() && it[sl].paragraph().layout().intitle) { + intitle_ = true; + break; + } + } + + Language const * lang = it.paragraph().getParLanguage(bp); InsetLayout const & il = getLayout(); docstring const & count = il.counter(); - if (!outer.layout().intitle && cnts.hasCounter(count)) { + custom_label_ = translateIfPossible(il.labelstring()); + if (cnts.hasCounter(count)) cnts.step(count, utype); - custom_label_= translateIfPossible(il.labelstring()) - + ' ' + cnts.theCounter(count, outer.getParLanguage(bp)->code()); - setLabel(custom_label_); - } + custom_label_ += ' ' + cnts.theCounter(count, lang->code()); + setLabel(custom_label_); + InsetCollapsable::updateBuffer(it, utype); if (utype == OutputUpdate) - cnts.restoreLastCounter(); + cnts.restoreLastCounter(); } -void InsetFoot::addToToc(DocIterator const & cpit) +void InsetFoot::addToToc(DocIterator const & cpit, bool output_active) const { DocIterator pit = cpit; - pit.push_back(CursorSlice(*this)); + pit.push_back(CursorSlice(const_cast(*this))); Toc & toc = buffer().tocBackend().toc("footnote"); - docstring str; - str = custom_label_ + ": " + text().getPar(0).asString(); - toc.push_back(TocItem(pit, 0, str, toolTipText())); + docstring str = custom_label_ + ": "; + text().forOutliner(str, TOC_ENTRY_LENGTH); + toc.push_back(TocItem(pit, 0, str, output_active, toolTipText(docstring(), 3, 60))); // Proceed with the rest of the inset. - InsetFootlike::addToToc(cpit); + InsetFootlike::addToToc(cpit, output_active); } docstring InsetFoot::toolTip(BufferView const & bv, int x, int y) const { - docstring default_tip = InsetCollapsable::toolTip(bv, x, y); - if (!isOpen(bv)) - return custom_label_ + "\n" + default_tip; - return default_tip; -} - - -int InsetFoot::latex(odocstream & os, OutputParams const & runparams_in) const -{ - OutputParams runparams = runparams_in; - // footnotes in titling commands like \title have moving arguments - runparams.moving_arg |= runparams_in.intitle; - - // in titling commands, \thanks should be used instead of \footnote. - // some classes (e.g. memoir) do not understand \footnote. - if (runparams_in.intitle) - os << "%\n\\thanks{"; - else - os << "%\n\\footnote{"; - - int const i = InsetText::latex(os, runparams); - os << "%\n}"; - runparams_in.encoding = runparams.encoding; - - return i + 2; + if (isOpen(bv)) + // this will give us something useful if there is no button + return InsetCollapsable::toolTip(bv, x, y); + return toolTipText(custom_label_+ ": "); } -int InsetFoot::plaintext(odocstream & os, OutputParams const & runparams) const +int InsetFoot::plaintext(odocstringstream & os, + OutputParams const & runparams, size_t max_length) const { os << '[' << buffer().B_("footnote") << ":\n"; - InsetText::plaintext(os, runparams); + InsetText::plaintext(os, runparams, max_length); os << "\n]"; return PLAINTEXT_NEWLINE + 1; // one char on a separate line