X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetcharstyle.C;h=444f647e9245afd76e877877299a9f6eab2cfcee;hb=10ba1b8918e7da14334bb5573ce2a707671c8b51;hp=da213d2483f6ed5da3ae642f87c54248c6bf21f5;hpb=68b7ef25fb7d2da230d3eb11d6737701abfc2e64;p=lyx.git diff --git a/src/insets/insetcharstyle.C b/src/insets/insetcharstyle.C index da213d2483..444f647e92 100644 --- a/src/insets/insetcharstyle.C +++ b/src/insets/insetcharstyle.C @@ -17,6 +17,8 @@ #include "BufferView.h" #include "dispatchresult.h" #include "funcrequest.h" +#include "FuncStatus.h" +#include "cursor.h" #include "gettext.h" #include "LaTeXFeatures.h" #include "LColor.h" @@ -24,10 +26,13 @@ #include "lyxtext.h" #include "metricsinfo.h" #include "paragraph.h" +#include "paragraph_funcs.h" +#include "sgml.h" #include "frontends/font_metrics.h" #include "frontends/Painter.h" -#include "support/std_sstream.h" + +#include using std::string; @@ -41,12 +46,14 @@ void InsetCharStyle::init() { setInsetName("CharStyle"); setStatus(Inlined); + setDrawFrame(false); + has_label_ = true; } InsetCharStyle::InsetCharStyle(BufferParams const & bp, CharStyles::iterator cs) - : InsetCollapsable(bp), has_label_(true) + : InsetCollapsable(bp) { params_.type = cs->name; params_.latextype = cs->latextype; @@ -59,13 +66,13 @@ InsetCharStyle::InsetCharStyle(BufferParams const & bp, InsetCharStyle::InsetCharStyle(InsetCharStyle const & in) - : InsetCollapsable(in), params_(in.params_), has_label_(true) + : InsetCollapsable(in), params_(in.params_) { init(); } -auto_ptr InsetCharStyle::clone() const +auto_ptr InsetCharStyle::doClone() const { return auto_ptr(new InsetCharStyle(*this)); } @@ -95,7 +102,7 @@ void InsetCharStyle::metrics(MetricsInfo & mi, Dimension & dim) const { LyXFont tmpfont = mi.base.font; getDrawFont(mi.base.font); - InsetCollapsable::metrics(mi, dim); + InsetText::metrics(mi, dim); mi.base.font = tmpfont; dim_ = dim; if (has_label_) @@ -107,20 +114,22 @@ void InsetCharStyle::draw(PainterInfo & pi, int x, int y) const { setPosCache(pi, x, y); - // FIXME: setStatus(Inlined); this is not a const operation LyXFont tmpfont = pi.base.font; - //setDrawFrame(InsetText::NEVER); getDrawFont(pi.base.font); InsetText::draw(pi, x, y); pi.base.font = tmpfont; - pi.pain.line(x + 2, y + InsetText::descent() - 4, x + 2, - y + InsetText::descent(), params_.labelfont.color()); - pi.pain.line(x + 2, y + InsetText::descent(), x + dim_.wid - 2, - y + InsetText::descent(), params_.labelfont.color()); - pi.pain.line(x + dim_.wid - 2, y + InsetText::descent(), x + dim_.wid - 2, - y + InsetText::descent() - 4, params_.labelfont.color()); + int desc = InsetText::descent(); + if (has_label_) + desc -= ascent(); + + pi.pain.line(x, y + desc - 4, x, y + desc, params_.labelfont.color()); + pi.pain.line(x, y + desc, x + dim_.wid - 2, y + desc, + params_.labelfont.color()); + pi.pain.line(x + dim_.wid - 2, y + desc, x + dim_.wid - 2, y + desc - 4, + params_.labelfont.color()); + // the name of the charstyle. Can be toggled. if (has_label_) { LyXFont font(params_.labelfont); font.realize(LyXFont(LyXFont::ALL_SANE)); @@ -130,10 +139,21 @@ void InsetCharStyle::draw(PainterInfo & pi, int x, int y) const int a = 0; int d = 0; font_metrics::rectText(params_.type, font, w, a, d); - pi.pain.rectText(x + (dim_.wid - w) / 2, - y + InsetText::descent() + a, + pi.pain.rectText(x + (dim_.wid - w) / 2, y + desc + a, params_.type, font, LColor::none, LColor::none); } + + // a visual clue when the cursor is inside the inset + LCursor & cur = pi.base.bv->cursor(); + if (cur.isInside(this)) { + y -= ascent(); + pi.pain.line(x, y + 4, x, y, params_.labelfont.color()); + pi.pain.line(x + 4, y, x, y, params_.labelfont.color()); + pi.pain.line(x + dim_.wid - 2, y + 4, x + dim_.wid - 2, y, + params_.labelfont.color()); + pi.pain.line(x + dim_.wid - 6, y, x + dim_.wid - 2, y, + params_.labelfont.color()); + } } @@ -143,7 +163,7 @@ void InsetCharStyle::getDrawFont(LyXFont & font) const } -void InsetCharStyle::priv_dispatch(LCursor & cur, FuncRequest & cmd) +void InsetCharStyle::doDispatch(LCursor & cur, FuncRequest & cmd) { setStatus(Inlined); switch (cmd.action) { @@ -151,89 +171,79 @@ void InsetCharStyle::priv_dispatch(LCursor & cur, FuncRequest & cmd) if (cmd.button() == mouse_button::button3) has_label_ = !has_label_; else - InsetText::dispatch(cur, cmd); + InsetText::doDispatch(cur, cmd); break; default: - InsetCollapsable::priv_dispatch(cur, cmd); + InsetCollapsable::doDispatch(cur, cmd); break; } } -namespace { - -int outputVerbatim(std::ostream & os, InsetText const & inset) +bool InsetCharStyle::getStatus(LCursor & cur, FuncRequest const & cmd, + FuncStatus & status) const { - int lines = 0; - ParagraphList::const_iterator par = inset.paragraphs().begin(); - ParagraphList::const_iterator end = inset.paragraphs().end(); - while (par != end) { - lyx::pos_type siz = par->size(); - for (lyx::pos_type i = 0; i < siz; ++i) { - if (par->isNewline(i)) { - os << '\n'; - ++lines; - } else { - os << par->getChar(i); - } - } - ++par; - if (par != end) { - os << "\n"; - lines ++; + switch (cmd.action) { + // paragraph breaks not allowed in charstyle insets + case LFUN_BREAKPARAGRAPH: + case LFUN_BREAKPARAGRAPHKEEPLAYOUT: + case LFUN_BREAKPARAGRAPH_SKIP: + status.enabled(false); + return true; + + default: + return InsetCollapsable::getStatus(cur, cmd, status); } - } - return lines; } -} // namespace anon - -int InsetCharStyle::latex(Buffer const &, ostream & os, - OutputParams const &) const +int InsetCharStyle::latex(Buffer const & buf, ostream & os, + OutputParams const & runparams) const { - os << "%\n\\" << params_.latexname; + os << "\\" << params_.latexname; if (!params_.latexparam.empty()) os << params_.latexparam; os << "{"; - int i = outputVerbatim(os, *this); - os << "}%\n"; - i += 2; + int i = InsetText::latex(buf, os, runparams); + os << "}"; return i; } -int InsetCharStyle::linuxdoc(Buffer const &, std::ostream & os, - OutputParams const &) const +int InsetCharStyle::linuxdoc(Buffer const & buf, ostream & os, + OutputParams const & runparams) const { - os << "<" << params_.latexname; - if (!params_.latexparam.empty()) - os << " " << params_.latexparam; - os << ">"; - int const i = outputVerbatim(os, *this); - os << ""; + sgml::openTag(os, params_.latexname, params_.latexparam); + int i = InsetText::linuxdoc(buf, os, runparams); + sgml::closeTag(os, params_.latexname); return i; } -int InsetCharStyle::docbook(Buffer const &, std::ostream & os, - OutputParams const &) const +int InsetCharStyle::docbook(Buffer const & buf, ostream & os, + OutputParams const & runparams) const { - os << "<" << params_.latexname; - if (!params_.latexparam.empty()) - os << " " << params_.latexparam; - os << ">"; - int const i = outputVerbatim(os, *this); - os << ""; - return i; + ParagraphList::const_iterator par = paragraphs().begin(); + ParagraphList::const_iterator end = paragraphs().end(); + + sgml::openTag(os, params_.latexname, par->getID(buf, runparams) + params_.latexparam); + + for (; par != end; ++par) { + par->simpleDocBookOnePar(buf, os, runparams, + outerFont(par - paragraphs().begin(), + paragraphs())); + } + + sgml::closeTag(os, params_.latexname); + return 0; } -int InsetCharStyle::plaintext(Buffer const &, std::ostream & os, - OutputParams const & /*runparams*/) const +int InsetCharStyle::plaintext(Buffer const & buf, ostream & os, + OutputParams const & runparams) const { - return outputVerbatim(os, *this); + return InsetText::plaintext(buf, os, runparams); }