lyx_mirror/src/insets/InsetNewpage.h
Jean-Marc Lasgouttes 963a0aa466 Implement Row::Element::row_flags
Move the enum definition RowFlags in its own include file, to avoid
loading Inset.h. Document it more thoroughly.

Rename RowAfter to AlwaysBreakAfter.

Add CanBreakInside (rows that can be themselves broken). This allow to
differentiate elements before bodyPos() and allows to remove a
parameter to shortenIfNeeded().

Make the Inset::rowFlags() method return int instead of RowFlags, as
should be done for all the bitwise flags. Remove the hand-made bitwise
operators.

Set R::E::row_flags when creating elements.
* INSET elements use the inset's rowFLags();
* virtual element forbid breaking before them, and inherit the *After
  flags from the previous element of the row;
* STRING elements usr CanBreakInside, except before bodyPos.

More stuff may be added later.
2021-12-07 17:04:47 +01:00

100 lines
2.1 KiB
C++

// -*- C++ -*-
/**
* \file InsetNewpage.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author André Pönitz
*
* Full author contact details are available in file CREDITS.
*/
#ifndef INSET_NEWPAGE_H
#define INSET_NEWPAGE_H
#include "Inset.h"
namespace lyx {
class InsetNewpageParams
{
public:
/// The different kinds of spaces we support
enum Kind {
///
NEWPAGE,
///
PAGEBREAK,
///
CLEARPAGE,
///
CLEARDOUBLEPAGE,
///
NOPAGEBREAK
};
///
InsetNewpageParams() : kind(NEWPAGE) {}
///
void write(std::ostream & os) const;
///
void read(Lexer & lex);
///
Kind kind;
};
class InsetNewpage : public Inset
{
public:
///
InsetNewpage();
///
explicit InsetNewpage(InsetNewpageParams const & par);
///
static void string2params(std::string const &, InsetNewpageParams &);
///
static std::string params2string(InsetNewpageParams const &);
private:
///
InsetCode lyxCode() const override { return NEWPAGE_CODE; }
///
void metrics(MetricsInfo &, Dimension &) const override;
///
void draw(PainterInfo & pi, int x, int y) const override;
///
void latex(otexstream &, OutputParams const &) const override;
///
int plaintext(odocstringstream & ods, OutputParams const & op,
size_t max_length = INT_MAX) const override;
///
void docbook(XMLStream &, OutputParams const &) const override;
///
docstring xhtml(XMLStream &, OutputParams const &) const override;
///
void read(Lexer & lex) override;
///
void write(std::ostream & os) const override;
///
int rowFlags() const override { return (params_.kind == InsetNewpageParams::NOPAGEBREAK) ? Inline : Display; }
///
docstring insetLabel() const;
///
ColorCode ColorName() const;
///
std::string contextMenuName() const override;
///
Inset * clone() const override { return new InsetNewpage(*this); }
///
void doDispatch(Cursor & cur, FuncRequest & cmd) override;
///
bool getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus &) const override;
///
InsetNewpageParams params_;
};
} // namespace lyx
#endif // INSET_NEWPAGE_H