X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetBox.cpp;h=c96a7c9e7d11375d5a2fac0ec9537743a63fe0c1;hb=15ae3eb85c5494b4343936108cb3b5b7c53bafe4;hp=a396157caad575d7f8ca957d6a4f4ef8b637c263;hpb=f84eb64ac7bdd73cc5abace2f836091b0defa21c;p=lyx.git diff --git a/src/insets/InsetBox.cpp b/src/insets/InsetBox.cpp index a396157caa..c96a7c9e7d 100644 --- a/src/insets/InsetBox.cpp +++ b/src/insets/InsetBox.cpp @@ -17,6 +17,7 @@ #include "Buffer.h" #include "BufferParams.h" #include "BufferView.h" +#include "ColorSet.h" #include "Cursor.h" #include "DispatchResult.h" #include "FuncStatus.h" @@ -77,14 +78,14 @@ BoxTranslatorLoc initBoxtranslatorLoc() BoxTranslator const & boxtranslator() { - static BoxTranslator translator = initBoxtranslator(); + static BoxTranslator const translator = initBoxtranslator(); return translator; } BoxTranslatorLoc const & boxtranslator_loc() { - static BoxTranslatorLoc translator = initBoxtranslatorLoc(); + static BoxTranslatorLoc const translator = initBoxtranslatorLoc(); return translator; } @@ -161,7 +162,7 @@ void InsetBox::setButtonLabel() bool InsetBox::hasFixedWidth() const { - return params_.inner_box || params_.special != "width"; + return !params_.width.empty(); } @@ -184,16 +185,39 @@ bool InsetBox::forcePlainLayout(idx_type) const } +ColorCode InsetBox::backgroundColor(PainterInfo const &) const +{ + if (params_.type != "Shaded") + return getLayout().bgcolor(); + // FIXME: This hardcoded color is a hack! + if (buffer().params().boxbgcolor == lyx::rgbFromHexName("#ff0000")) + return getLayout().bgcolor(); + ColorCode c = lcolor.getFromLyXName("boxbgcolor"); + if (c == Color_none) + return getLayout().bgcolor(); + return c; +} + + void InsetBox::doDispatch(Cursor & cur, FuncRequest & cmd) { switch (cmd.action()) { case LFUN_INSET_MODIFY: { //lyxerr << "InsetBox::dispatch MODIFY" << endl; + string const first_arg = cmd.getArg(0); + bool const change_type = first_arg == "changetype"; + bool const for_box = first_arg == "box"; + if (!change_type && !for_box) { + // not for us + // this will not be handled higher up + cur.undispatched(); + return; + } cur.recordUndoInset(ATOMIC_UNDO, this); - if (cmd.getArg(0) == "changetype") { + if (change_type) params_.type = cmd.getArg(1); - } else + else // if (for_box) string2params(to_utf8(cmd.argument()), params_); setButtonLabel(); break; @@ -230,7 +254,7 @@ bool InsetBox::getStatus(Cursor & cur, FuncRequest const & cmd, flag.setEnabled(true); return true; - case LFUN_BREAK_PARAGRAPH: + case LFUN_PARAGRAPH_BREAK: if ((params_.inner_box && !params_.use_makebox) || params_.type == "Shaded" || params_.type == "Framed") return InsetCollapsable::getStatus(cur, cmd, flag); @@ -249,6 +273,7 @@ void InsetBox::latex(otexstream & os, OutputParams const & runparams) const string width_string = params_.width.asLatexString(); bool stdwidth = false; + // FIXME: do not test explicitely values of width_string if (params_.inner_box && (width_string.find("1.0\\columnwidth") != string::npos || width_string.find("1.0\\textwidth") != string::npos)) { @@ -292,20 +317,24 @@ void InsetBox::latex(otexstream & os, OutputParams const & runparams) const os << "\\begin{framed}%\n"; break; case Boxed: - os << "\\framebox"; - if (!params_.inner_box) { - // Special widths, see usrguide §3.5 - // FIXME UNICODE - if (params_.special != "none") { - os << "[" << params_.width.value() - << '\\' << from_utf8(params_.special) - << ']'; + if (!width_string.empty()) { + if (!params_.inner_box) { + os << "\\framebox"; + // Special widths, see usrguide sec. 3.5 + // FIXME UNICODE + if (params_.special != "none") { + os << "[" << params_.width.value() + << '\\' << from_utf8(params_.special) + << ']'; + } else + os << '[' << from_ascii(width_string) + << ']'; + if (params_.hor_pos != 'c') + os << "[" << params_.hor_pos << "]"; } else - os << '[' << from_ascii(width_string) - << ']'; - if (params_.hor_pos != 'c') - os << "[" << params_.hor_pos << "]"; - } + os << "\\fbox"; + } else + os << "\\fbox"; os << "{"; break; case ovalbox: @@ -330,18 +359,21 @@ void InsetBox::latex(otexstream & os, OutputParams const & runparams) const if (params_.use_parbox) os << "\\parbox"; else if (params_.use_makebox) { - os << "\\makebox"; - // FIXME UNICODE - // output the width and horizontal position - if (params_.special != "none") { - os << "[" << params_.width.value() - << '\\' << from_utf8(params_.special) - << ']'; + if (!width_string.empty()) { + os << "\\makebox"; + // FIXME UNICODE + // output the width and horizontal position + if (params_.special != "none") { + os << "[" << params_.width.value() + << '\\' << from_utf8(params_.special) + << ']'; + } else + os << '[' << from_ascii(width_string) + << ']'; + if (params_.hor_pos != 'c') + os << "[" << params_.hor_pos << "]"; } else - os << '[' << from_ascii(width_string) - << ']'; - if (params_.hor_pos != 'c') - os << "[" << params_.hor_pos << "]"; + os << "\\mbox"; os << "{"; } else @@ -416,7 +448,8 @@ void InsetBox::latex(otexstream & os, OutputParams const & runparams) const } -int InsetBox::plaintext(odocstream & os, OutputParams const & runparams) const +int InsetBox::plaintext(odocstringstream & os, + OutputParams const & runparams, size_t max_length) const { BoxType const btype = boxtranslator().find(params_.type); @@ -442,7 +475,7 @@ int InsetBox::plaintext(odocstream & os, OutputParams const & runparams) const break; } - InsetText::plaintext(os, runparams); + InsetText::plaintext(os, runparams, max_length); int len = 0; switch (btype) {