-#ifdef __GNUG__
-#pragma implementation
-#endif
-
#include "math_gridinset.h"
#include "math_mathmlstream.h"
#include "math_streamstr.h"
#include "funcrequest.h"
#include "frontends/Painter.h"
#include "debug.h"
+#include "Lsstream.h"
+
+#include "insets/mailinset.h"
using std::swap;
using std::max;
using std::min;
using std::vector;
+using std::istream;
+
+
+class GridInsetMailer : public MailInset {
+public:
+ GridInsetMailer(MathGridInset & inset) : inset_(inset) {}
+ ///
+ virtual string const & name() const
+ {
+ static const string theName = "tabular";
+ return theName;
+ }
+ ///
+ virtual string const inset2string() const
+ {
+ ostringstream data;
+ //data << name() << " active_cell " << inset.getActCell() << '\n';
+ data << name() << " active_cell " << 0 << '\n';
+ WriteStream ws(data);
+ inset_.write(ws);
+ return data.str();
+ }
+
+protected:
+ InsetBase & inset() const { return inset_; }
+ MathGridInset & inset_;
+};
void mathed_parse_normal(MathGridInset &, string const & argument);
return res;
}
+
+int extractInt(istream & is)
+{
+ int num = 1;
+ is >> num;
+ return (num == 0) ? 1 : num;
+}
+
}
+
//////////////////////////////////////////////////////////////
}
+MathGridInset::~MathGridInset()
+{
+ GridInsetMailer mailer(*this);
+ mailer.hideDialog();
+}
+
+
MathInset * MathGridInset::clone() const
{
return new MathGridInset(*this);
}
-void MathGridInset::metrics(MathMetricsInfo & mi) const
+void MathGridInset::metrics(MetricsInfo & mi) const
{
// let the cells adjust themselves
MathNestInset::metrics(mi);
}
-void MathGridInset::draw(MathPainterInfo & pi, int x, int y) const
+void MathGridInset::draw(PainterInfo & pi, int x, int y) const
{
for (idx_type idx = 0; idx < nargs(); ++idx)
cell(idx).draw(pi, x + cellXOffset(idx), y + cellYOffset(idx));
}
-MathInset::result_type MathGridInset::dispatch
+dispatch_result MathGridInset::dispatch
(FuncRequest const & cmd, idx_type & idx, pos_type & pos)
{
switch (cmd.action) {
+ case LFUN_MOUSE_RELEASE:
+ //if (cmd.button() == mouse_button::button3) {
+ // GridInsetMailer mailer(*this);
+ // mailer.showDialog();
+ // return DISPATCHED;
+ //}
+ break;
+
+ case LFUN_INSET_DIALOG_UPDATE: {
+ GridInsetMailer mailer(*this);
+ mailer.updateDialog(cmd.view());
+ break;
+ }
+
+ // insert file functions
case LFUN_DELETE_LINE_FORWARD:
//autocorrect_ = false;
//macroModeClose();
pos = cell(idx).size();
return DISPATCHED_POP;
- case LFUN_TABINSERT:
+ case LFUN_CELL_SPLIT:
//bv->lockedInsetStoreUndo(Undo::EDIT);
splitCell(idx, pos);
- //updateLocal(bv, true);
return DISPATCHED_POP;
case LFUN_BREAKLINE: {
pos = cell(idx).size();
//mathcursor->normalize();
- //updateLocal(bv, true);
return DISPATCHED_POP;
}
- case LFUN_TABULAR_FEATURE:
+ case LFUN_TABULAR_FEATURE: {
//lyxerr << "handling tabular-feature " << cmd.argument << "\n";
- if (cmd.argument == "valign-top")
+ istringstream is(cmd.argument);
+ string s;
+ is >> s;
+ if (s == "valign-top")
valign('t');
- else if (cmd.argument == "valign-center")
+ else if (s == "valign-center")
valign('c');
- else if (cmd.argument == "valign-bottom")
+ else if (s == "valign-bottom")
valign('b');
- else if (cmd.argument == "align-left")
+ else if (s == "align-left")
halign('l', col(idx));
- else if (cmd.argument == "align-right")
+ else if (s == "align-right")
halign('r', col(idx));
- else if (cmd.argument == "align-center")
+ else if (s == "align-center")
halign('c', col(idx));
- else if (cmd.argument == "append-row")
- addRow(row(idx));
- else if (cmd.argument == "delete-row") {
- delRow(row(idx));
- if (idx > nargs())
- idx -= ncols();
- } else if (cmd.argument == "copy-row")
- copyRow(row(idx));
- else if (cmd.argument == "swap-row")
+ else if (s == "append-row")
+ for (int i = 0, n = extractInt(is); i < n; ++i)
+ addRow(row(idx));
+ else if (s == "delete-row")
+ for (int i = 0, n = extractInt(is); i < n; ++i) {
+ delRow(row(idx));
+ if (idx > nargs())
+ idx -= ncols();
+ }
+ else if (s == "copy-row")
+ for (int i = 0, n = extractInt(is); i < n; ++i)
+ copyRow(row(idx));
+ else if (s == "swap-row")
swapRow(row(idx));
- else if (cmd.argument == "append-column") {
- row_type r = row(idx);
- col_type c = col(idx);
- addCol(c);
- idx = index(r, c);
- } else if (cmd.argument == "delete-column") {
- row_type r = row(idx);
- col_type c = col(idx);
- delCol(col(idx));
- idx = index(r, c);
- if (idx > nargs())
- idx -= ncols();
- } else if (cmd.argument == "copy-column")
+ else if (s == "append-column")
+ for (int i = 0, n = extractInt(is); i < n; ++i) {
+ row_type r = row(idx);
+ col_type c = col(idx);
+ addCol(c);
+ idx = index(r, c);
+ }
+ else if (s == "delete-column")
+ for (int i = 0, n = extractInt(is); i < n; ++i) {
+ row_type r = row(idx);
+ col_type c = col(idx);
+ delCol(col(idx));
+ idx = index(r, c);
+ if (idx > nargs())
+ idx -= ncols();
+ }
+ else if (s == "copy-column")
copyCol(col(idx));
- else if (cmd.argument == "swap-column")
+ else if (s == "swap-column")
swapCol(col(idx));
else
return UNDISPATCHED;
+ lyxerr << "returning DISPATCHED_POP\n";
return DISPATCHED_POP;
+ }
case LFUN_PASTE: {
//lyxerr << "pasting '" << cmd.argument << "'\n";