X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetCaption.cpp;h=bd891f6b4bc56ff01e182662a89b89bf61705b39;hb=2c357c1d23b7b83839a9beb8225d4f1ae4f793b4;hp=9447583ccf2223730ad06261139cfb3877176457;hpb=1026a87b72ee7f2b2e3fe69577b68c228ebbde88;p=lyx.git diff --git a/src/insets/InsetCaption.cpp b/src/insets/InsetCaption.cpp index 9447583ccf..bd891f6b4b 100644 --- a/src/insets/InsetCaption.cpp +++ b/src/insets/InsetCaption.cpp @@ -16,21 +16,22 @@ #include "Buffer.h" #include "BufferParams.h" -#include "Color.h" +#include "BufferView.h" #include "Counters.h" #include "Cursor.h" -#include "BufferView.h" +#include "Dimension.h" #include "Floating.h" #include "FloatList.h" #include "FuncRequest.h" #include "FuncStatus.h" -#include "gettext.h" +#include "support/gettext.h" #include "InsetList.h" #include "MetricsInfo.h" #include "output_latex.h" #include "OutputParams.h" #include "Paragraph.h" #include "paragraph_funcs.h" +#include "TextClass.h" #include "TocBackend.h" #include "frontends/FontMetrics.h" @@ -40,11 +41,8 @@ #include - -using std::endl; -using std::string; -using std::ostream; - +using namespace std; +using namespace lyx::support; namespace lyx { @@ -54,15 +52,19 @@ InsetCaption::InsetCaption(InsetCaption const & ic) { setAutoBreakRows(true); setDrawFrame(true); - setFrameColor(Color::captionframe); + setFrameColor(Color_captionframe); } + InsetCaption::InsetCaption(BufferParams const & bp) : InsetText(bp), textclass_(bp.getTextClass()) { setAutoBreakRows(true); setDrawFrame(true); - setFrameColor(Color::captionframe); + setFrameColor(Color_captionframe); + //FIXME Do we need to set all paragraphs here? or will there + //always only be one? + paragraphs().back().layout(bp.getTextClass().emptyLayout()); } @@ -104,7 +106,7 @@ void InsetCaption::cursorPos(BufferView const & bv, void InsetCaption::setCustomLabel(docstring const & label) { - if (!support::isAscii(label) || label.empty()) + if (!isAscii(label) || label.empty()) // This must be a user defined layout. We cannot translate // this, since gettext accepts only ascii keys. custom_label_ = label; @@ -113,14 +115,16 @@ void InsetCaption::setCustomLabel(docstring const & label) } -void InsetCaption::addToToc(TocList & toclist, Buffer const & buf, ParConstIterator const &) const +void InsetCaption::addToToc(Buffer const & buf, + ParConstIterator const & cpit) const { if (type_.empty()) return; - ParConstIterator pit = par_const_iterator_begin(*this); + ParConstIterator pit = cpit; + pit.push_back(*this); - Toc & toc = toclist[type_]; + Toc & toc = buf.tocBackend().toc(type_); docstring const str = full_label_ + ". " + pit->asString(buf, false); toc.push_back(TocItem(pit, 0, str)); } @@ -128,8 +132,8 @@ void InsetCaption::addToToc(TocList & toclist, Buffer const & buf, ParConstItera void InsetCaption::metrics(MetricsInfo & mi, Dimension & dim) const { - Font tmpfont = mi.base.font; - mi.base.font = mi.base.bv->buffer().params().getFont(); + FontInfo tmpfont = mi.base.font; + mi.base.font = mi.base.bv->buffer().params().getFont().fontInfo(); labelwidth_ = theFontMetrics(mi.base.font).width(full_label_); // add some space to separate the label from the inset text labelwidth_ += 2 * TEXT_TO_INSET_OFFSET; @@ -140,7 +144,7 @@ void InsetCaption::metrics(MetricsInfo & mi, Dimension & dim) const InsetText::metrics(mi, textdim); mi.base.font = tmpfont; mi.base.textwidth += dim.wid; - dim.des = std::max(dim.des - textdim.asc + dim.asc, textdim.des); + dim.des = max(dim.des - textdim.asc + dim.asc, textdim.des); dim.asc = textdim.asc; dim.wid += textdim.wid; } @@ -156,18 +160,18 @@ void InsetCaption::draw(PainterInfo & pi, int x, int y) const // Answer: the text inset (in buffer_funcs.cpp: setCaption). - Font tmpfont = pi.base.font; - pi.base.font = pi.base.bv->buffer().params().getFont(); + FontInfo tmpfont = pi.base.font; + pi.base.font = pi.base.bv->buffer().params().getFont().fontInfo(); pi.pain.text(x, y, full_label_, pi.base.font); InsetText::draw(pi, x + labelwidth_, y); pi.base.font = tmpfont; } -void InsetCaption::edit(Cursor & cur, bool left) +void InsetCaption::edit(Cursor & cur, bool front, EntryDirection entry_from) { cur.push(*this); - InsetText::edit(cur, left); + InsetText::edit(cur, front, entry_from); } @@ -185,7 +189,8 @@ bool InsetCaption::insetAllowed(InsetCode code) const case TABULAR_CODE: case WRAP_CODE: case CAPTION_CODE: - case PAGEBREAK_CODE: + case NEWPAGE_CODE: + case MATHMACRO_CODE: return false; default: return InsetText::insetAllowed(code); @@ -273,10 +278,11 @@ int InsetCaption::getOptArg(Buffer const & buf, odocstream & os, void InsetCaption::updateLabels(Buffer const & buf, ParIterator const & it) { - using support::bformat; TextClass const & tclass = buf.params().getTextClass(); Counters & cnts = tclass.counters(); string const & type = cnts.current_float(); + // Memorize type for addToToc(). + type_ = type; if (type.empty()) full_label_ = buf.B_("Senseless!!! "); else {