]> git.lyx.org Git - lyx.git/blob - src/mathed/InsetMathSplit.C
Fix bug 2789 (as discussed)
[lyx.git] / src / mathed / InsetMathSplit.C
1 /**
2  * \file InsetMathSplit.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author André Pönitz
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11 #include <config.h>
12
13 #include "InsetMathSplit.h"
14 #include "MathData.h"
15 #include "MathMLStream.h"
16 #include "MathStream.h"
17
18 #include "funcrequest.h"
19 #include "FuncStatus.h"
20 #include "gettext.h"
21 #include "LaTeXFeatures.h"
22
23 #include "support/lstrings.h"
24 #include "support/std_ostream.h"
25
26
27 using lyx::docstring;
28 using lyx::support::bformat;
29 using std::string;
30 using std::auto_ptr;
31
32
33 InsetMathSplit::InsetMathSplit(string const & name)
34         : InsetMathGrid(1, 1), name_(name)
35 {
36         setDefaults();
37 }
38
39
40 auto_ptr<InsetBase> InsetMathSplit::doClone() const
41 {
42         return auto_ptr<InsetBase>(new InsetMathSplit(*this));
43 }
44
45
46 char InsetMathSplit::defaultColAlign(col_type col)
47 {
48         if (name_ == "split")
49                 return 'l';
50         if (name_ == "gathered")
51                 return 'c';
52         if (name_ == "aligned")
53                 return (col & 1) ? 'l' : 'r';
54         if (name_ == "alignedat")
55                 return (col & 1) ? 'l' : 'r';
56         return 'l';
57 }
58
59
60 void InsetMathSplit::draw(PainterInfo & pi, int x, int y) const
61 {
62         InsetMathGrid::draw(pi, x, y);
63         setPosCache(pi, x, y);
64 }
65
66
67 bool InsetMathSplit::getStatus(LCursor & cur, FuncRequest const & cmd,
68                 FuncStatus & flag) const
69 {
70         switch (cmd.action) {
71         case LFUN_TABULAR_FEATURE: {
72                 docstring const & s = cmd.argument();
73                 if (s == "add-vline-left" || s == "add-vline-right") {
74                         flag.message(bformat(
75                         lyx::from_utf8(N_("Can't add vertical grid lines in '%1$s'")),
76                         lyx::from_utf8(name_)));
77                         flag.enabled(false);
78                         return true;
79                 }
80                 return InsetMathGrid::getStatus(cur, cmd, flag);
81         }
82         default:
83                 return InsetMathGrid::getStatus(cur, cmd, flag);
84         }
85 }
86
87
88 void InsetMathSplit::write(WriteStream & ws) const
89 {
90         if (ws.fragile())
91                 ws << "\\protect";
92         ws << "\\begin{" << name_ << '}';
93         if (name_ == "alignedat")
94                 ws << '{' << static_cast<unsigned int>((ncols() + 1)/2) << '}';
95         InsetMathGrid::write(ws);
96         if (ws.fragile())
97                 ws << "\\protect";
98         ws << "\\end{" << name_ << "}\n";
99 }
100
101
102 void InsetMathSplit::infoize(std::ostream & os) const
103 {
104         string name = name_;
105         name[0] = lyx::support::uppercase(name[0]);
106         os << name << ' ';
107 }
108
109
110 void InsetMathSplit::validate(LaTeXFeatures & features) const
111 {
112         features.require("amsmath");
113         InsetMathNest::validate(features);
114 }