#include "InsetNewpage.h"
+#include "Cursor.h"
#include "FuncRequest.h"
#include "FuncStatus.h"
#include "Lexer.h"
#include "MetricsInfo.h"
-#include "OutputParams.h"
+#include "xml.h"
+#include "texstream.h"
#include "Text.h"
#include "TextMetrics.h"
namespace lyx {
-InsetNewpage::InsetNewpage()
+ InsetNewpage::InsetNewpage() : Inset(nullptr)
{}
InsetNewpage::InsetNewpage(InsetNewpageParams const & params)
- : params_(params)
+ : Inset(nullptr), params_(params)
{}
void InsetNewpageParams::write(ostream & os) const
{
- string command;
switch (kind) {
case InsetNewpageParams::NEWPAGE:
os << "newpage";
case InsetNewpageParams::CLEARDOUBLEPAGE:
os << "cleardoublepage";
break;
+ case InsetNewpageParams::NOPAGEBREAK:
+ os << "nopagebreak";
+ break;
}
}
kind = InsetNewpageParams::CLEARPAGE;
else if (token == "cleardoublepage")
kind = InsetNewpageParams::CLEARDOUBLEPAGE;
+ else if (token == "nopagebreak")
+ kind = InsetNewpageParams::NOPAGEBREAK;
else
lex.printError("Unknown kind");
}
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;
void InsetNewpage::doDispatch(Cursor & cur, FuncRequest & cmd)
{
- switch (cmd.action) {
+ switch (cmd.action()) {
case LFUN_INSET_MODIFY: {
InsetNewpageParams params;
+ cur.recordUndo();
string2params(to_utf8(cmd.argument()), params);
params_.kind = params.kind;
break;
bool InsetNewpage::getStatus(Cursor & cur, FuncRequest const & cmd,
FuncStatus & status) const
{
- switch (cmd.action) {
+ switch (cmd.action()) {
// we handle these
case LFUN_INSET_MODIFY:
if (cmd.getArg(0) == "newpage") {
InsetNewpageParams params;
string2params(to_utf8(cmd.argument()), params);
status.setOnOff(params_.kind == params.kind);
- }
+ }
status.setEnabled(true);
return true;
default:
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;
}
}
{
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;
}
-int InsetNewpage::latex(odocstream & 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;
+ }
}
- return 0;
}
-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(odocstream & os, OutputParams const &) const
+docstring InsetNewpage::xhtml(XMLStream & xs, OutputParams const &) const
{
- os << "<br />\n";
+ if (params_.kind != InsetNewpageParams::NOPAGEBREAK)
+ xs << xml::CompTag("br");
return docstring();
}
-docstring InsetNewpage::contextMenu(BufferView const &, int, int) const
+string InsetNewpage::contextMenuName() const
{
- return from_ascii("context-newpage");
+ return "context-newpage";
}