X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetWrap.cpp;h=244467ac86aa6bb0542b393af62f01bbc5d994c2;hb=2df6a6a37876dcfaa755c9aaf6a5ddc1ad58c63e;hp=45a5d8ebdfc14b2998e0296005c73695677b36f5;hpb=897436efbb9bd641b61467d185a2dfae9839e575;p=lyx.git diff --git a/src/insets/InsetWrap.cpp b/src/insets/InsetWrap.cpp index 45a5d8ebdf..244467ac86 100644 --- a/src/insets/InsetWrap.cpp +++ b/src/insets/InsetWrap.cpp @@ -4,6 +4,7 @@ * Licence details can be found in the file COPYING. * * \author Dekel Tsur + * \author Uwe Stöhr * * Full author contact details are available in file CREDITS. */ @@ -15,44 +16,37 @@ #include "Buffer.h" #include "BufferParams.h" #include "BufferView.h" +#include "Counters.h" #include "Cursor.h" -#include "debug.h" #include "DispatchResult.h" #include "Floating.h" #include "FloatList.h" #include "FuncRequest.h" #include "FuncStatus.h" -#include "gettext.h" #include "LaTeXFeatures.h" -#include "Color.h" #include "Lexer.h" #include "OutputParams.h" -#include "Paragraph.h" +#include "TextClass.h" #include "TocBackend.h" #include "support/convert.h" +#include "support/docstream.h" +#include "support/debug.h" +#include "support/gettext.h" +using namespace std; namespace lyx { -using std::string; -using std::endl; -using std::auto_ptr; -using std::istringstream; -using std::ostream; -using std::ostringstream; - -InsetWrap::InsetWrap(BufferParams const & bp, string const & type) - : InsetCollapsable(bp), name_(from_utf8(type)) +InsetWrap::InsetWrap(Buffer const & buf, string const & type) + : InsetCollapsable(buf), name_(from_utf8(type)) { - setLabel(_("wrap: ") + floatName(type, bp)); - Font font(Font::ALL_SANE); - font.decSize(); - font.decSize(); - font.setColor(Color::collapsable); - setLabelFont(font); + setLabel(_("wrap: ") + floatName(type, buf.params())); params_.type = type; + params_.lines = 0; + params_.placement = "o"; + params_.overhang = Length(0, Length::PCW); params_.width = Length(50, Length::PCW); } @@ -69,8 +63,10 @@ void InsetWrap::doDispatch(Cursor & cur, FuncRequest & cmd) case LFUN_INSET_MODIFY: { InsetWrapParams params; InsetWrapMailer::string2params(to_utf8(cmd.argument()), params); + params_.lines = params.lines; params_.placement = params.placement; - params_.width = params.width; + params_.overhang = params.overhang; + params_.width = params.width; break; } @@ -78,15 +74,6 @@ void InsetWrap::doDispatch(Cursor & cur, FuncRequest & cmd) InsetWrapMailer(*this).updateDialog(&cur.bv()); break; - case LFUN_MOUSE_RELEASE: { - if (cmd.button() == mouse_button::button3 && hitButton(cmd)) { - InsetWrapMailer(*this).showDialog(&cur.bv()); - break; - } - InsetCollapsable::doDispatch(cur, cmd); - break; - } - default: InsetCollapsable::doDispatch(cur, cmd); break; @@ -109,13 +96,28 @@ bool InsetWrap::getStatus(Cursor & cur, FuncRequest const & cmd, } -void InsetWrapParams::write(ostream & os) const +void InsetWrap::updateLabels(ParIterator const & it) { - os << "Wrap " << type << '\n'; + setLabel(_("wrap: ") + floatName(params_.type, buffer().params())); + Counters & cnts = buffer().params().documentClass().counters(); + string const saveflt = cnts.current_float(); + + // Tell to captions what the current float is + cnts.current_float(params().type); + + InsetCollapsable::updateLabels(it); + + // reset afterwards + cnts.current_float(saveflt); +} - if (!placement.empty()) - os << "placement " << placement << "\n"; +void InsetWrapParams::write(ostream & os) const +{ + os << "Wrap " << type << '\n'; + os << "lines " << lines << "\n"; + os << "placement " << placement << "\n"; + os << "overhang " << overhang.asString() << "\n"; os << "width \"" << width.asString() << "\"\n"; } @@ -123,11 +125,35 @@ void InsetWrapParams::write(ostream & os) const void InsetWrapParams::read(Lexer & lex) { string token; + + lex >> token; + if (token == "lines") + lex >> lines; + else { + lyxerr << "InsetWrap::Read:: Missing 'lines'-tag!" + << endl; + // take countermeasures + lex.pushToken(token); + } + if (!lex) + return; lex >> token; if (token == "placement") lex >> placement; else { - // take countermeasures + lyxerr << "InsetWrap::Read:: Missing 'placement'-tag!" + << endl; + lex.pushToken(token); + } + if (!lex) + return; + lex >> token; + if (token == "overhang") { + lex.next(); + overhang = Length(lex.getString()); + } else { + lyxerr << "InsetWrap::Read:: Missing 'overhang'-tag!" + << endl; lex.pushToken(token); } if (!lex) @@ -139,81 +165,78 @@ void InsetWrapParams::read(Lexer & lex) } else { lyxerr << "InsetWrap::Read:: Missing 'width'-tag!" << endl; - // take countermeasures lex.pushToken(token); } } -void InsetWrap::write(Buffer const & buf, ostream & os) const +void InsetWrap::write(ostream & os) const { params_.write(os); - InsetCollapsable::write(buf, os); + InsetCollapsable::write(os); } -void InsetWrap::read(Buffer const & buf, Lexer & lex) +void InsetWrap::read(Lexer & lex) { params_.read(lex); - InsetCollapsable::read(buf, lex); + InsetCollapsable::read(lex); } void InsetWrap::validate(LaTeXFeatures & features) const { - features.require("floatflt"); + features.require("wrapfig"); InsetCollapsable::validate(features); } -auto_ptr InsetWrap::doClone() const -{ - return auto_ptr(new InsetWrap(*this)); -} - - -docstring const InsetWrap::editMessage() const +docstring InsetWrap::editMessage() const { return _("Opened Wrap Inset"); } -int InsetWrap::latex(Buffer const & buf, odocstream & os, - OutputParams const & runparams) const +int InsetWrap::latex(odocstream & os, OutputParams const & runparams) const { - os << "\\begin{floating" << from_ascii(params_.type) << '}'; - if (!params_.placement.empty()) - os << '[' << from_ascii(params_.placement) << ']'; + os << "\\begin{wrap" << from_ascii(params_.type) << '}'; + // no optional argument when lines are zero + if (params_.lines != 0) + os << '[' << params_.lines << ']'; + os << '{' << from_ascii(params_.placement) << '}'; + Length over(params_.overhang); + // no optional argument when the value is zero + if (over.value() != 0) + os << '[' << from_ascii(params_.overhang.asLatexString()) << ']'; os << '{' << from_ascii(params_.width.asLatexString()) << "}%\n"; - int const i = InsetText::latex(buf, os, runparams); - os << "\\end{floating" << from_ascii(params_.type) << "}%\n"; + int const i = InsetText::latex(os, runparams); + os << "\\end{wrap" << from_ascii(params_.type) << "}%\n"; return i + 2; } -int InsetWrap::plaintext(Buffer const & buf, odocstream & os, - OutputParams const & runparams) const +int InsetWrap::plaintext(odocstream & os, OutputParams const & runparams) const { - os << '[' << buf.B_("wrap") << ' ' << floatName(params_.type, buf.params()) << ":\n"; - InsetText::plaintext(buf, os, runparams); + os << '[' << buffer().B_("wrap") << ' ' + << floatName(params_.type, buffer().params()) << ":\n"; + InsetText::plaintext(os, runparams); os << "\n]"; return PLAINTEXT_NEWLINE + 1; // one char on a separate line } -int InsetWrap::docbook(Buffer const & buf, odocstream & os, - OutputParams const & runparams) const +int InsetWrap::docbook(odocstream & os, OutputParams const & runparams) const { // FIXME UNICODE os << '<' << from_ascii(params_.type) << '>'; - int const i = InsetText::docbook(buf, os, runparams); + int const i = InsetText::docbook(os, runparams); os << "'; return i; } -bool InsetWrap::insetAllowed(Inset::Code code) const +bool InsetWrap::insetAllowed(InsetCode code) const { switch(code) { case FLOAT_CODE: @@ -234,13 +257,6 @@ bool InsetWrap::showInsetDialog(BufferView * bv) const } -void InsetWrap::addToToc(TocList & toclist, Buffer const & buf) const -{ - // Is there a need to provide a list of wrap insets? - return; -} - - string const InsetWrapMailer::name_("wrap"); InsetWrapMailer::InsetWrapMailer(InsetWrap & inset)