lyx_mirror/src/mathed/InsetMathBox.h
Jean-Marc Lasgouttes 0140348118 Linearize macros in box edit mode too.
The special mode used by macros where the macro name is displayed as
grey text in a box is now one of the possible marker types for any
inset. The new code puts the macro name below the text, which means
that only the text below the current line will be moved. This makes
edition much more comfortable.

The marker_type enum has been moved from Inset to InsetMath.

A new BOX_MARKER enum value has been added and is taken care of in
afterMetricsMarkers (renamed from metricsMarkerVertical) and
drawMarkers.

The InsetMath::marker() macro now takes a BufferView pointer as
argument, so that the marker type can depend on editing state.

MathRow::metrics now makes changes to the MathRow object when needed.

The specific metrics/draw code in MathMacro has been removed and
replaced by assertions. Code in addToMathRow and marker is adapted to
reflect the cases where linearization is possible.
2017-02-14 01:02:00 +01:00

146 lines
3.2 KiB
C++

// -*- C++ -*-
/**
* \file InsetMathBox.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 MATH_BOXINSET_H
#define MATH_BOXINSET_H
#include "InsetMathNest.h"
namespace lyx {
/// Support for \\mbox
class InsetMathBox : public InsetMathNest {
public:
///
explicit InsetMathBox(Buffer * buf, docstring const & name);
///
mode_type currentMode() const { return TEXT_MODE; }
///
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///
void write(WriteStream & os) const;
///
void normalize(NormalStream & ns) const;
///
void mathmlize(MathStream & ms) const;
///
void htmlize(HtmlStream & ms) const;
///
void infoize(odocstream & os) const;
///
void validate(LaTeXFeatures & features) const;
///
InsetCode lyxCode() const { return MATH_BOX_CODE; }
private:
Inset * clone() const { return new InsetMathBox(*this); }
///
docstring name_;
};
/// Non-AMS-style frame
class InsetMathFBox : public InsetMathNest {
public:
///
InsetMathFBox(Buffer * buf);
///
mode_type currentMode() const { return TEXT_MODE; }
///
marker_type marker(BufferView const *) const { return NO_MARKER; }
///
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///
void write(WriteStream & os) const;
/// write normalized content
void normalize(NormalStream & ns) const;
///
void mathmlize(MathStream & ms) const;
///
void htmlize(HtmlStream & ms) const;
///
void infoize(odocstream & os) const;
///
void validate(LaTeXFeatures & features) const;
private:
///
Inset * clone() const { return new InsetMathFBox(*this); }
};
/// Extra nesting: \\makebox or \\framebox.
class InsetMathMakebox : public InsetMathNest {
public:
///
InsetMathMakebox(Buffer * buf, bool framebox);
///
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///
void write(WriteStream & os) const;
/// write normalized content
void normalize(NormalStream & ns) const;
///
void mathmlize(MathStream & ms) const;
///
void htmlize(HtmlStream & ms) const;
///
mode_type currentMode() const { return TEXT_MODE; }
///
void infoize(odocstream & os) const;
///
void validate(LaTeXFeatures & features) const;
private:
Inset * clone() const { return new InsetMathMakebox(*this); }
///
bool framebox_;
};
/// AMS-style frame
class InsetMathBoxed : public InsetMathNest {
public:
///
InsetMathBoxed(Buffer * buf);
///
marker_type marker(BufferView const *) const { return NO_MARKER; }
///
void validate(LaTeXFeatures & features) const;
///
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///
void write(WriteStream & os) const;
///
void mathmlize(MathStream & ms) const;
///
void htmlize(HtmlStream & ms) const;
/// write normalized content
void normalize(NormalStream & ns) const;
///
void infoize(odocstream & os) const;
private:
Inset * clone() const { return new InsetMathBoxed(*this); }
};
} // namespace lyx
#endif // MATH_MBOX