X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetcaption.C;h=f1ba9df2deaec60738e83e180d931f365bd05bc7;hb=4a5b7a5952ad2381fcdf4830511293e184c7c5a1;hp=8d89efaad5cc3acc71b824c5df66c76e8adb7501;hpb=0b1b6dfa4ed99f2b7c2a36cb56dcbb9d5553ac33;p=lyx.git diff --git a/src/insets/insetcaption.C b/src/insets/insetcaption.C index 8d89efaad5..f1ba9df2de 100644 --- a/src/insets/insetcaption.C +++ b/src/insets/insetcaption.C @@ -3,7 +3,7 @@ * * LyX, The Document Processor * - * Copyright 2000 The LyX Team. + * Copyright 2000-2001 The LyX Team. * * ====================================================== */ @@ -15,3 +15,116 @@ #endif #include "insetcaption.h" +#include "Painter.h" +#include "font.h" +#include "BufferView.h" +#include "FloatList.h" +#include "insets/insetfloat.h" +#include "debug.h" +#include "gettext.h" +#include "support/lstrings.h" + +using std::ostream; +using std::endl; + +InsetCaption::InsetCaption() + : InsetText() +{ + setAutoBreakRows(true); + setDrawFrame(0, InsetText::LOCKED); + setFrameColor(0, LColor::captionframe); +} + + +void InsetCaption::write(Buffer const * buf, ostream & os) const +{ + os << "Caption\n"; + writeParagraphData(buf, os); +} + + + +void InsetCaption::read(Buffer const * buf, LyXLex & lex) +{ +#if 0 + // We will enably this check again when the compability + // code is removed from Buffer::Read (Lgb) + string const token = lex.GetString(); + if (token != "Caption") { + lyxerr << "InsetCaption::Read: consistency check failed." + << endl; + } +#endif + InsetText::read(buf, lex); +} + + +string const InsetCaption::editMessage() const +{ + return _("Opened Caption Inset"); +} + + +void InsetCaption::draw(BufferView * bv, LyXFont const & f, + int baseline, float & x, bool cleared) const +{ + // We must draw the label, we should get the label string + // from the enclosing float inset. + // The question is: Who should draw the label, the caption inset, + // the text inset or the paragraph? + // We should also draw the float number (Lgb) + + // See if we can find the name of the float this caption + // belongs to. + Inset * i1 = owner(); + Inset * i2 = i1 ? i1->owner() : 0; + string const type = static_cast(i2)->type(); + string const fl = i2 ? floatList.getType(type).name() : N_("Float"); + + // Discover the number... + // ... + string const num = "#"; + + // Generate the label + string const label = _(fl) + " " + num + ":"; + + Painter & pain = bv->painter(); + int const w = lyxfont::width(label, f); + pain.text(int(x), baseline, label, f); + x += w; + + InsetText::draw(bv, f, baseline, x, cleared); +} + + +int InsetCaption::latex(Buffer const * buf, ostream & os, + bool fragile, bool free_spc) const +{ + // This is a bit too simplistic to take advantage of + // caption options we must add more later. (Lgb) + // This code is currently only able to handle the simple + // \caption{...}, later we will make it take advantage + // of the one of the caption packages. (Lgb) + ostringstream ost; + int const l = InsetText::latex(buf, ost, fragile, free_spc); + os << "\\caption{" << ost.str() << "}\n"; + return l + 1; +} + + +int InsetCaption::ascii(Buffer const * /*buf*/, + ostream & /*os*/, int /*linelen*/) const +{ + // FIX: Implement me! + return 0; +} + + +int InsetCaption::docbook(Buffer const * buf, ostream & os) const +{ + int ret; + os << ""; + ret = InsetText::docbook(buf, os); + os << "\n"; + return ret; +}