lyx_mirror/src/insets/InsetFoot.cpp
Guillaume Munch d5a5fbb8ee Enhancements and bugfixes to the TOCs
* New TOC "math-macro". This means that math macros can now be accessed in the
  outline pane in their order of appearance or in alphabetical order, and can be
  searched using the filter.

* Lists of floats now show subfloats deeper in the navigation menu

* The arbitrary 30 element cut-off after which nothing is shown except "Open
  Navigator..." is removed. Menus now have no limit in size, so Qt may display
  them scrollable. In exchange, we always show "Open outliner..." at the
  beginning. I tested for performance issues with a rather complex document and
  it is fine; but this does not exclude corner cases with lots of TOC entries of
  a certain kind. If necessary, populating the navigation sub-menu should be
  delayed like the main menu.

* Elements that do not contribute to the output (e.g. in a note, a disabled
  branch) are now preceded with a symbol indicating this status. (The machinery
  was already there; I wonder why it was not implemented already.) I have chosen
  U+274E NEGATIVE SQUARED CROSS MARK.

* Fix the contextual menus in the outliner (bug introduced at 94e992c5).

* Toc item now move to the caption when present, but first center on the float,
  to prevent the situation where the caption is at the top of the screen and the
  contents of the float is off-screen above the caption.
  (Internally, the action of the toc items can now be customised)

* Fix the LyXHTML output. Disabled captions no longer appear in the list of
  figures.
2015-10-01 21:44:22 +01:00

122 lines
2.9 KiB
C++

/**
* \file InsetFoot.cpp
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author Jürgen Vigna
* \author Lars Gullik Bjønnes
*
* Full author contact details are available in file CREDITS.
*/
#include <config.h>
#include "InsetFoot.h"
#include "Buffer.h"
#include "BufferParams.h"
#include "Counters.h"
#include "Language.h"
#include "Layout.h"
#include "OutputParams.h"
#include "ParIterator.h"
#include "TextClass.h"
#include "TocBackend.h"
#include "support/debug.h"
#include "support/docstream.h"
#include "support/gettext.h"
using namespace std;
namespace lyx {
InsetFoot::InsetFoot(Buffer * 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();
Counters & cnts = bp.documentClass().counters();
if (utype == OutputUpdate) {
// the footnote counter is local to this inset
cnts.saveLastCounter();
}
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();
custom_label_ = translateIfPossible(il.labelstring());
if (cnts.hasCounter(count))
cnts.step(count, utype);
custom_label_ += ' ' + cnts.theCounter(count, lang->code());
setLabel(custom_label_);
InsetCollapsable::updateBuffer(it, utype);
if (utype == OutputUpdate)
cnts.restoreLastCounter();
}
void InsetFoot::addToToc(DocIterator const & cpit, bool output_active,
UpdateType utype) const
{
DocIterator pit = cpit;
pit.push_back(CursorSlice(const_cast<InsetFoot &>(*this)));
shared_ptr<Toc> toc = buffer().tocBackend().toc("footnote");
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, output_active, utype);
}
docstring InsetFoot::toolTip(BufferView const & bv, int x, int y) const
{
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(odocstringstream & os,
OutputParams const & runparams, size_t max_length) const
{
os << '[' << buffer().B_("footnote") << ":\n";
InsetText::plaintext(os, runparams, max_length);
os << "\n]";
return PLAINTEXT_NEWLINE + 1; // one char on a separate line
}
int InsetFoot::docbook(odocstream & os, OutputParams const & runparams) const
{
os << "<footnote>";
int const i = InsetText::docbook(os, runparams);
os << "</footnote>";
return i;
}
} // namespace lyx