3 * \file InsetMathHull.h
4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
9 * Full author contact details are available in file CREDITS.
12 #ifndef MATH_HULLINSET_H
13 #define MATH_HULLINSET_H
15 #include "InsetMathGrid.h"
16 #include <boost/scoped_ptr.hpp>
24 /// This provides an interface between "LyX insets" and "LyX math insets"
25 class InsetMathHull : public InsetMathGrid {
30 explicit InsetMathHull(HullType type);
34 InsetMathHull & operator=(InsetMathHull const &);
36 mode_type currentMode() const;
38 void metrics(MetricsInfo & mi, Dimension & dim) const;
40 void draw(PainterInfo &, int x, int y) const;
42 void metricsT(TextMetricsInfo const & mi, Dimension & dim) const;
44 void drawT(TextPainter &, int x, int y) const;
46 docstring label(row_type row) const;
48 void label(row_type row, docstring const & label);
50 void numbered(row_type row, bool num);
52 bool numbered(row_type row) const;
54 bool numberedType() const;
57 /// Appends \c list with all labels found within this inset.
58 void getLabelList(Buffer const &,
59 std::vector<docstring> & list) const;
61 void validate(LaTeXFeatures & features) const;
62 /// identifies HullInset
63 InsetMathHull const * asHullInset() const { return this; }
64 /// identifies HullInset
65 InsetMathHull * asHullInset() { return this; }
68 void addRow(row_type row);
70 void delRow(row_type row);
72 void swapRow(row_type row);
74 void addCol(col_type col);
76 void delCol(col_type col);
79 HullType getType() const;
81 void mutate(HullType newtype);
84 int defaultColSpace(col_type col);
86 char defaultColAlign(col_type col);
88 bool idxFirst(Cursor &) const;
90 bool idxLast(Cursor &) const;
93 void write(WriteStream & os) const;
95 void mathmlize(MathStream &) const;
97 void normalize(NormalStream &) const;
99 void infoize(odocstream & os) const;
102 void write(Buffer const &, std::ostream & os) const;
104 void read(Buffer const &, Lexer & lex);
106 int plaintext(Buffer const &, odocstream &,
107 OutputParams const &) const;
109 int docbook(Buffer const &, odocstream &,
110 OutputParams const &) const;
111 /// the string that is passed to the TOC
112 virtual void textString(Buffer const &, odocstream &) const;
114 /// get notification when the cursor leaves this inset
115 bool notifyCursorLeaves(Cursor & cur);
117 //bool insetAllowed(InsetCode code) const;
119 void addPreview(graphics::PreviewLoader &) const;
122 static int displayMargin() { return 12; }
124 /// Force inset into LTR environment if surroundings are RTL?
125 virtual bool forceLTR() const { return true; }
128 InsetMathHull(InsetMathHull const &);
130 virtual void doDispatch(Cursor & cur, FuncRequest & cmd);
132 /// do we want to handle this event?
133 bool getStatus(Cursor & cur, FuncRequest const & cmd,
134 FuncStatus & status) const;
136 docstring eolString(row_type row, bool emptyline, bool fragile) const;
139 virtual Inset * clone() const;
141 void setType(HullType type);
143 void validate1(LaTeXFeatures & features);
145 void header_write(WriteStream &) const;
147 void footer_write(WriteStream &) const;
149 docstring nicelabel(row_type row) const;
151 void doExtern(Cursor & cur, FuncRequest & func);
155 * split every row at the first relation operator.
156 * The number of columns must be 1. One column is added.
157 * The first relation operator and everything after it goes to the
162 * split every row at the first relation operator.
163 * The number of columns must be < 3. One or two columns are added.
164 * The first relation operator goes to the second column.
165 * Everything after it goes to the third column.
168 /// change number of columns, split or combine columns if necessary.
169 void changeCols(col_type);
171 docstring standardFont() const;
172 /// consistency check
174 /// can this change its number of rows?
175 bool rowChangeOK() const;
176 /// can this change its number of cols?
177 bool colChangeOK() const;
179 /// "none", "simple", "display", "eqnarray",...
182 std::vector<int> nonum_;
184 std::vector<docstring> label_;
186 boost::scoped_ptr<RenderPreview> preview_;
188 mutable bool use_preview_;
193 /// what appears in the minibuffer when opening
194 virtual docstring const editMessage() const;
196 virtual void mutateToText();
198 virtual void revealCodes(Cursor & cur) const;
200 EDITABLE editable() const { return HIGHLY_EDITABLE; }
202 void edit(Cursor & cur, bool front,
203 EntryDirection entry_from = ENTRY_DIRECTION_IGNORE);
205 Inset * editXY(Cursor & cur, int x, int y);
207 DisplayType display() const;
209 InsetCode lyxCode() const;
213 void handleFont(Cursor & cur, docstring const & arg,
214 docstring const & font);
216 void handleFont2(Cursor & cur, docstring const & arg);
218 bool previewState(BufferView * bv) const;