X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetNewpage.cpp;h=caac17e27c70774ccd5ac70dd28bea5ce7499ba6;hb=HEAD;hp=b0e290600184852276acd6c51bbeeb15225d9f8c;hpb=d866717ef7503a1373dd1cb3925e1ac97b079192;p=lyx.git diff --git a/src/insets/InsetNewpage.cpp b/src/insets/InsetNewpage.cpp index b0e2906001..caac17e27c 100644 --- a/src/insets/InsetNewpage.cpp +++ b/src/insets/InsetNewpage.cpp @@ -16,10 +16,9 @@ #include "Cursor.h" #include "FuncRequest.h" #include "FuncStatus.h" -#include "Lexer.h" #include "MetricsInfo.h" -#include "OutputParams.h" -#include "output_xhtml.h" +#include "xml.h" +#include "texstream.h" #include "Text.h" #include "TextMetrics.h" @@ -30,24 +29,25 @@ #include "support/docstring.h" #include "support/docstream.h" #include "support/gettext.h" +#include "support/Lexer.h" using namespace std; - namespace lyx { - InsetNewpage::InsetNewpage() : Inset(0) +using support::Lexer; + +InsetNewpage::InsetNewpage() : Inset(nullptr) {} InsetNewpage::InsetNewpage(InsetNewpageParams const & params) - : Inset(0), params_(params) + : Inset(nullptr), params_(params) {} void InsetNewpageParams::write(ostream & os) const { - string command; switch (kind) { case InsetNewpageParams::NEWPAGE: os << "newpage"; @@ -61,6 +61,9 @@ void InsetNewpageParams::write(ostream & os) const case InsetNewpageParams::CLEARDOUBLEPAGE: os << "cleardoublepage"; break; + case InsetNewpageParams::NOPAGEBREAK: + os << "nopagebreak"; + break; } } @@ -79,6 +82,8 @@ void InsetNewpageParams::read(Lexer & lex) kind = InsetNewpageParams::CLEARPAGE; else if (token == "cleardoublepage") kind = InsetNewpageParams::CLEARDOUBLEPAGE; + else if (token == "nopagebreak") + kind = InsetNewpageParams::NOPAGEBREAK; else lex.printError("Unknown kind"); } @@ -100,16 +105,70 @@ void InsetNewpage::read(Lexer & lex) void InsetNewpage::metrics(MetricsInfo & mi, Dimension & dim) const { + if (params_.kind == InsetNewpageParams::NOPAGEBREAK) { + frontend::FontMetrics const & fm = theFontMetrics(mi.base.font); + dim.asc = fm.maxAscent(); + dim.des = fm.maxDescent(); + dim.wid = 3 * fm.width('n'); + return; + } + dim.asc = defaultRowHeight(); dim.des = defaultRowHeight(); dim.wid = mi.base.textwidth; - // Cache the inset dimension. - setDimCache(mi, dim); } void InsetNewpage::draw(PainterInfo & pi, int x, int y) const { + if (params_.kind == InsetNewpageParams::NOPAGEBREAK) { + + FontInfo font; + font.setColor(ColorName()); + + frontend::FontMetrics const & fm = theFontMetrics(pi.base.font); + int const wid = 3 * fm.width('n'); + int const asc = fm.maxAscent(); + + int xp[3]; + int yp[3]; + + //left side arrow + yp[0] = int(y - 0.875 * asc * 0.75); + yp[1] = int(y - 0.500 * asc * 0.75); + yp[2] = int(y - 0.125 * asc * 0.75); + xp[0] = int(x + wid * 0.25); + xp[1] = int(x + wid * 0.4); + xp[2] = int(x + wid * 0.25); + pi.pain.lines(xp, yp, 3, ColorName()); + + yp[0] = yp[1] = int(y - 0.500 * asc * 0.75); + xp[0] = int(x + wid * 0.03); + xp[1] = int(x + wid * 0.4); + pi.pain.lines(xp, yp, 2, ColorName()); + + //right side arrow + yp[0] = int(y - 0.875 * asc * 0.75); + yp[1] = int(y - 0.500 * asc * 0.75); + yp[2] = int(y - 0.125 * asc * 0.75); + xp[0] = int(x + wid * 0.75); + xp[1] = int(x + wid * 0.6); + xp[2] = int(x + wid * 0.75); + pi.pain.lines(xp, yp, 3, ColorName()); + + yp[0] = yp[1] = int(y - 0.500 * asc * 0.75); + xp[0] = int(x + wid * 0.97); + xp[1] = int(x + wid * 0.6); + pi.pain.lines(xp, yp, 2, ColorName()); + + //mid-rule + xp[0] = xp[1] = int(x + wid * 0.5); + yp[0] = int(y - 0.875 * asc * 0.75); + yp[1] = int(y - 0.125 * asc * 0.75); + pi.pain.lines(xp, yp, 2, ColorName()); + return; + } + using frontend::Painter; FontInfo font; @@ -165,7 +224,7 @@ bool InsetNewpage::getStatus(Cursor & cur, FuncRequest const & cmd, InsetNewpageParams params; string2params(to_utf8(cmd.argument()), params); status.setOnOff(params_.kind == params.kind); - } + } status.setEnabled(true); return true; default: @@ -179,19 +238,16 @@ docstring InsetNewpage::insetLabel() const switch (params_.kind) { case InsetNewpageParams::NEWPAGE: return _("New Page"); - break; case InsetNewpageParams::PAGEBREAK: return _("Page Break"); - break; case InsetNewpageParams::CLEARPAGE: return _("Clear Page"); - break; case InsetNewpageParams::CLEARDOUBLEPAGE: return _("Clear Double Page"); - break; + case InsetNewpageParams::NOPAGEBREAK: + return _("No Page Break"); default: return _("New Page"); - break; } } @@ -200,65 +256,78 @@ ColorCode InsetNewpage::ColorName() const { switch (params_.kind) { case InsetNewpageParams::PAGEBREAK: + case InsetNewpageParams::NOPAGEBREAK: return Color_pagebreak; - break; case InsetNewpageParams::NEWPAGE: case InsetNewpageParams::CLEARPAGE: case InsetNewpageParams::CLEARDOUBLEPAGE: return Color_newpage; - break; } // not really useful, but to avoids gcc complaints return Color_newpage; } -void InsetNewpage::latex(otexstream & os, OutputParams const &) const +void InsetNewpage::latex(otexstream & os, OutputParams const & runparams) const { - switch (params_.kind) { + if (runparams.inDeletedInset) { + os << "\\mbox{}\\\\\\makebox[\\columnwidth]{\\dotfill\\ " + << insetLabel() << "\\ \\dotfill}"; + } else { + switch (params_.kind) { case InsetNewpageParams::NEWPAGE: - os << "\\newpage{}"; + os << "\\newpage" << termcmd; break; case InsetNewpageParams::PAGEBREAK: - os << "\\pagebreak{}"; + if (runparams.moving_arg) + os << "\\protect"; + os << "\\pagebreak" << termcmd; break; case InsetNewpageParams::CLEARPAGE: - os << "\\clearpage{}"; + os << "\\clearpage" << termcmd; break; case InsetNewpageParams::CLEARDOUBLEPAGE: - os << "\\cleardoublepage{}"; + os << "\\cleardoublepage" << termcmd; + break; + case InsetNewpageParams::NOPAGEBREAK: + os << "\\nopagebreak" << termcmd; break; default: - os << "\\newpage{}"; + os << "\\newpage" << termcmd; break; + } } } -int InsetNewpage::plaintext(odocstream & os, OutputParams const &) const +int InsetNewpage::plaintext(odocstringstream & os, + OutputParams const &, size_t) const { + if (params_.kind == InsetNewpageParams::NOPAGEBREAK) + return 0; os << '\n'; return PLAINTEXT_NEWLINE; } -int InsetNewpage::docbook(odocstream & os, OutputParams const &) const +void InsetNewpage::docbook(XMLStream & os, OutputParams const &) const { - os << '\n'; - return 0; + if (params_.kind != InsetNewpageParams::NOPAGEBREAK) + os << xml::CR(); } -docstring InsetNewpage::xhtml(XHTMLStream & xs, OutputParams const &) const +docstring InsetNewpage::xhtml(XMLStream & xs, OutputParams const &) const { - xs << html::CompTag("br"); + if (params_.kind != InsetNewpageParams::NOPAGEBREAK) + xs << xml::CompTag("br"); return docstring(); } -docstring InsetNewpage::contextMenuName() const +string InsetNewpage::contextMenuName() const { - return from_ascii("context-newpage"); + return "context-newpage"; }