2 * \file InsetMathXYArrow.cpp
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
8 * Full author contact details are available in file CREDITS.
13 #include "InsetMathXYArrow.h"
14 #include "MathStream.h"
15 #include "MathSupport.h"
16 #include "frontends/Painter.h"
17 #include "support/debug.h"
24 InsetMathXYArrow::InsetMathXYArrow()
29 Inset
* InsetMathXYArrow::clone() const
31 return new InsetMathXYArrow(*this);
35 InsetMathXYMatrix
const * InsetMathXYArrow::targetMatrix() const
41 MathData
const & InsetMathXYArrow::targetCell() const
44 InsetMathXYMatrix
const * p
= targetMatrix();
47 MathData
const & t
= cell(0);
48 for (MathData::const_iterator it
= t
.begin(); it
!= t
.end(); ++it
) {
49 switch ((*it
)->getChar()) {
56 //lyxerr << "target: x: " << x << " y: " << y << endl;
57 InsetMath::idx_type n
= mi_
.idx
+ p
->ncols() * y
+ x
;
58 if (n
>= p
->nargs()) {
59 lyxerr
<< "source: n: " << mi_
.idx
<< "\n"
60 << "target: n: " << n
<< " out of range" << endl
;
65 static MathData dummy
;
71 MathData
const & InsetMathXYArrow::sourceCell() const
74 return targetMatrix()->cell(mi_
.idx
);
76 static MathData dummy
;
82 bool InsetMathXYArrow::metrics(MetricsInfo
& mi
) const
84 InsetMathNest::metrics(mi
);
86 FontSetChanger
dummy(mi
.base
, "textrm");
88 target_
= mi
.inset
? mi
.inset
->asXYMatrixInset() : 0;
91 int w
= mathed_string_width(mi
.base
.font
, from_ascii("target: "));
92 width_
= w
+ max(dim0
.width(), dim1
.wid
);
94 descent_
= dim0
.des
+ dim1
.height() + 10;
99 //mathed_string_dim(font_, "X", ascent_, descent_, width_);
105 void InsetMathXYArrow::draw(PainterInfo
& pi
, int x
, int y
) const
108 FontSetChanger
dummy(pi
.base
, "textrm");
117 mathed_string_dim(pi
.base
.font
, "target: ", lasc
, ldes
, lwid
);
119 cell(0).draw(pi
, x
+ lwid
, y
);
120 pi
.base
.text(x
+ 3, y
, "target");
121 y
+= max(dim0
.des
, ldes
) + 5;
123 y
+= max(dim1
.asc
, lasc
) + 5;
124 cell(1).draw(pi
, x
+ lwid
, y
);
125 pi
.base
.text(x
+ 3, y
, "label");
131 pi
.pain
.text(x
, y
, "X");
132 MathData
const & s
= sourceCell();
133 MathData
const & t
= targetCell();
134 pi
.pain
.line(s
.xm(), s
.ym(), t
.xm(), t
.ym(), Color_math
);
135 cell(1).draw(pi
, (s
.xm() + t
.xm())/2, (s
.ym() + t
.ym())/2);
141 void InsetMathXYArrow::write(WriteStream
& os
) const
143 MathEnsurer
ensurer(os
);
146 os
<< '[' << cell(0) << ']';
148 os
<< (up_
? '^' : '_') << '{' << cell(1) << '}';
153 void InsetMathXYArrow::normalize(NormalStream
& os
) const
156 InsetMathNest::normalize(os
);