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>
25 /// This provides an interface between "LyX insets" and "LyX math insets"
26 class InsetMathHull : public InsetMathGrid {
31 explicit InsetMathHull(HullType type);
35 InsetMathHull & operator=(InsetMathHull const &);
37 mode_type currentMode() const;
39 bool metrics(MetricsInfo & mi, Dimension & dim) const;
41 void draw(PainterInfo &, int x, int y) const;
43 void metricsT(TextMetricsInfo const & mi, Dimension & dim) const;
45 void drawT(TextPainter &, int x, int y) const;
47 docstring label(row_type row) const;
49 void label(row_type row, docstring const & label);
51 void numbered(row_type row, bool num);
53 bool numbered(row_type row) const;
55 bool numberedType() const;
58 /// Appends \c list with all labels found within this inset.
59 void getLabelList(Buffer const &,
60 std::vector<docstring> & list) const;
62 void validate(LaTeXFeatures & features) const;
63 /// identifies HullInset
64 InsetMathHull const * asHullInset() const { return this; }
65 /// identifies HullInset
66 InsetMathHull * asHullInset() { return this; }
69 void addRow(row_type row);
71 void delRow(row_type row);
73 void swapRow(row_type row);
75 void addCol(col_type col);
77 void delCol(col_type col);
80 HullType getType() const;
82 void mutate(HullType newtype);
85 int defaultColSpace(col_type col);
87 char defaultColAlign(col_type col);
89 bool idxFirst(Cursor &) const;
91 bool idxLast(Cursor &) const;
94 void write(WriteStream & os) const;
96 void mathmlize(MathStream &) const;
98 void normalize(NormalStream &) const;
100 void infoize(odocstream & os) const;
103 void write(Buffer const &, std::ostream & os) const;
105 void read(Buffer const &, Lexer & lex);
107 int plaintext(Buffer const &, odocstream &,
108 OutputParams const &) const;
110 int docbook(Buffer const &, odocstream &,
111 OutputParams const &) const;
112 /// the string that is passed to the TOC
113 virtual void textString(Buffer const &, odocstream &) const;
115 /// get notification when the cursor leaves this inset
116 bool notifyCursorLeaves(Cursor & cur);
118 //bool insetAllowed(Code code) const;
120 void addPreview(graphics::PreviewLoader &) const;
123 static int displayMargin() { return 12; }
125 InsetMathHull(InsetMathHull const &);
127 virtual void doDispatch(Cursor & cur, FuncRequest & cmd);
129 /// do we want to handle this event?
130 bool getStatus(Cursor & cur, FuncRequest const & cmd,
131 FuncStatus & status) const;
133 docstring eolString(row_type row, bool emptyline, bool fragile) const;
136 virtual std::auto_ptr<Inset> doClone() const;
138 void setType(HullType type);
140 void validate1(LaTeXFeatures & features);
142 void header_write(WriteStream &) const;
144 void footer_write(WriteStream &) const;
146 docstring nicelabel(row_type row) const;
148 void doExtern(Cursor & cur, FuncRequest & func);
152 * split every row at the first relation operator.
153 * The number of columns must be 1. One column is added.
154 * The first relation operator and everything after it goes to the
159 * split every row at the first relation operator.
160 * The number of columns must be < 3. One or two columns are added.
161 * The first relation operator goes to the second column.
162 * Everything after it goes to the third column.
165 /// change number of columns, split or combine columns if necessary.
166 void changeCols(col_type);
168 docstring standardFont() const;
169 /// consistency check
171 /// can this change its number of rows?
172 bool rowChangeOK() const;
173 /// can this change its number of cols?
174 bool colChangeOK() const;
176 /// "none", "simple", "display", "eqnarray",...
179 std::vector<int> nonum_;
181 std::vector<docstring> label_;
183 boost::scoped_ptr<RenderPreview> preview_;
185 mutable bool use_preview_;
187 /// mutable bool redraw_background_;
192 /// what appears in the minibuffer when opening
193 virtual docstring const editMessage() const;
195 virtual void mutateToText();
197 virtual void revealCodes(Cursor & cur) const;
199 EDITABLE editable() const { return HIGHLY_EDITABLE; }
201 void edit(Cursor & cur, bool left);
203 Inset * editXY(Cursor & cur, int x, int y);
205 bool display() const;
207 Code lyxCode() const;
211 void handleFont(Cursor & cur, docstring const & arg,
212 docstring const & font);
214 void handleFont2(Cursor & cur, docstring const & arg);
216 bool previewState(BufferView * bv) const;