#include "gettext.h"
#include "LaTeXFeatures.h"
#include "debug.h"
+#include "math_mathmlstream.h"
+#include "Lsstream.h"
+#include "math_parser.h"
+#include "support/lstrings.h"
RefInset::RefInset()
}
-MathInset::result_type
+dispatch_result
RefInset::dispatch(FuncRequest const & cmd, idx_type & idx, pos_type & pos)
{
switch (cmd.action) {
return DISPATCHED;
}
if (cmd.button() == mouse_button::button1) {
- lyxerr << "trying to open ref" << cell(0) << "\n";
- // Eventually trigger dialog with button 3 not 1
- // cmd.view()->owner()->getDialogs()->showRef(this);
+ // Eventually trigger dialog with button 3
+ // not 1
+ ostringstream data;
+ data << "ref LatexCommand ";
+ WriteStream wsdata(data);
+ write(wsdata);
+ wsdata << "\n\\end_inset\n\n";
+
+ cmd.view()->owner()->getDialogs().
+ show("ref", data.str(), this);
return DISPATCHED;
}
break;
}
+dispatch_result RefInset::localDispatch(FuncRequest const & cmd)
+{
+ if (cmd.action != LFUN_INSET_MODIFY || cmd.getArg(0) != "ref")
+ return UNDISPATCHED;
+
+ MathArray ar;
+ if (!string2RefInset(cmd.argument, ar))
+ return UNDISPATCHED;
+
+ *this = *ar[0].nucleus()->asRefInset();
+// if (cmd.view())
+// // This does not compile because updateInset expects
+// // an Inset* and 'this' isn't.
+// cmd.view()->updateInset(this, true);
+ return DISPATCHED;
+}
+
+
+bool string2RefInset(string const & str, MathArray & ar)
+{
+ string name;
+ string body = split(str, name, ' ');
+
+ if (name != "ref")
+ return false;
+
+ // body comes with a head "LatexCommand " and a
+ // tail "\nend_inset\n\n". Strip them off.
+ string trimmed;
+ body = split(body, trimmed, ' ');
+ split(body, trimmed, '\n');
+
+ mathed_parse_cell(ar, trimmed);
+ if (ar.size() != 1)
+ return false;
+
+ return ar[0].nucleus()->asRefInset();
+}
+
+
RefInset::ref_type_info RefInset::types[] = {
{ "ref", N_("Standard"), N_("Ref: ")},
{ "pageref", N_("Page Number"), N_("Page: ")},