* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
- * \author André Pönitz
+ * \author André Pönitz
*
* Full author contact details are available in file CREDITS.
*/
#include <config.h>
-#include "LaTeXFeatures.h"
#include "InsetMathAMSArray.h"
-#include "MathArray.h"
-#include "MathStream.h"
+
+#include "LaTeXFeatures.h"
+#include "MathData.h"
#include "MathStream.h"
#include "MathSupport.h"
+#include "MetricsInfo.h"
#include "FuncRequest.h"
#include "FuncStatus.h"
-#include "gettext.h"
+#include "support/gettext.h"
#include "support/lstrings.h"
-#include "support/std_ostream.h"
-using std::auto_ptr;
+#include <sstream>
+#include <ostream>
-namespace lyx {
-using support::bformat;
+using namespace std;
+using namespace lyx::support;
+
+namespace lyx {
-InsetMathAMSArray::InsetMathAMSArray(docstring const & name, int m, int n)
- : InsetMathGrid(m, n), name_(name)
+InsetMathAMSArray::InsetMathAMSArray(Buffer * buf, docstring const & name,
+ int m, int n)
+ : InsetMathGrid(buf, m, n), name_(name)
{}
-InsetMathAMSArray::InsetMathAMSArray(docstring const & name)
- : InsetMathGrid(1, 1), name_(name)
+InsetMathAMSArray::InsetMathAMSArray(Buffer * buf, docstring const & name)
+ : InsetMathGrid(buf, 1, 1), name_(name)
{}
-auto_ptr<InsetBase> InsetMathAMSArray::doClone() const
+Inset * InsetMathAMSArray::clone() const
{
- return auto_ptr<InsetBase>(new InsetMathAMSArray(*this));
+ return new InsetMathAMSArray(*this);
}
}
-bool InsetMathAMSArray::metrics(MetricsInfo & mi, Dimension & dim) const
+void InsetMathAMSArray::metrics(MetricsInfo & mi, Dimension & dim) const
{
- ArrayChanger dummy(mi.base);
+ FontInfo & f = mi.base.font;
+ Changer dummy = f.changeStyle(LM_ST_TEXT, f.style() == LM_ST_DISPLAY);
InsetMathGrid::metrics(mi, dim);
- dim.wid += 14;
- bool const changed = dim_ != dim;
- dim_ = dim;
- return changed;
}
void InsetMathAMSArray::draw(PainterInfo & pi, int x, int y) const
{
- int const yy = y - dim_.ascent();
- // Drawing the deco after an ArrayChanger does not work
- mathed_draw_deco(pi, x + 1, yy, 5, dim_.height(), from_ascii(name_left()));
- mathed_draw_deco(pi, x + dim_.width() - 8, yy, 5, dim_.height(), from_ascii(name_right()));
- ArrayChanger dummy(pi.base);
- InsetMathGrid::drawWithMargin(pi, x, y, 6, 8);
+ Dimension const dim = dimension(*pi.base.bv);
+ int const yy = y - dim.ascent();
+ // Drawing the deco after changeStyle does not work
+ mathed_draw_deco(pi, x + 1, yy, 5, dim.height(), from_ascii(name_left()));
+ mathed_draw_deco(pi, x + dim.width() - 8, yy, 5, dim.height(), from_ascii(name_right()));
+ FontInfo & f = pi.base.font;
+ Changer dummy = f.changeStyle(LM_ST_TEXT, f.style() == LM_ST_DISPLAY);
+ InsetMathGrid::draw(pi, x, y);
}
bool InsetMathAMSArray::getStatus(Cursor & cur, FuncRequest const & cmd,
FuncStatus & flag) const
{
- switch (cmd.action) {
+ switch (cmd.action()) {
case LFUN_TABULAR_FEATURE: {
- docstring const & s = cmd.argument();
+ string s = cmd.getArg(0);
if (s == "add-vline-left" || s == "add-vline-right") {
flag.message(bformat(
- from_utf8(N_("Can't add vertical grid lines in '%1$s'")), name_));
- flag.enabled(false);
+ from_utf8(N_("Can't add vertical grid lines in '%1$s'")),
+ name_));
+ flag.setEnabled(false);
return true;
}
- return InsetMathGrid::getStatus(cur, cmd, flag);
+ break;
}
default:
- return InsetMathGrid::getStatus(cur, cmd, flag);
+ break;
}
+ return InsetMathGrid::getStatus(cur, cmd, flag);
}
void InsetMathAMSArray::write(WriteStream & os) const
{
+ MathEnsurer ensurer(os);
os << "\\begin{" << name_ << '}';
+ bool open = os.startOuterRow();
InsetMathGrid::write(os);
os << "\\end{" << name_ << '}';
+ if (open)
+ os.startOuterRow();
}
void InsetMathAMSArray::validate(LaTeXFeatures & features) const
{
- features.require("amsmath");
+ if (name_ == "CD")
+ // amscd is independent of amsmath although it is part of
+ // the amsmath bundle
+ features.require("amscd");
+ else
+ features.require("amsmath");
InsetMathGrid::validate(features);
}