]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/ref_inset.C
Jean-Marc's fix for wrong descent
[lyx.git] / src / mathed / ref_inset.C
index 6edbae0e8dcf27a15563c8749cd14a8f2a54d841..ca7d8e67ec39a63b2f78c3e26fa7e32bd436c7f0 100644 (file)
@@ -1,6 +1,3 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
 
 #include <config.h>
 
 #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()
@@ -39,7 +40,7 @@ void RefInset::infoize(std::ostream & os) const
 }
 
 
-MathInset::result_type
+dispatch_result
 RefInset::dispatch(FuncRequest const & cmd, idx_type & idx, pos_type & pos)
 {
        switch (cmd.action) {
@@ -50,9 +51,16 @@ RefInset::dispatch(FuncRequest const & cmd, idx_type & idx, pos_type & pos)
                                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;
@@ -123,7 +131,47 @@ int RefInset::docbook(std::ostream & os, bool) const
 }
 
 
-RefInset::type_info RefInset::types[] = {
+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: ")},
        { "vpageref",   N_("Textual Page Number"),      N_("TextPage: ")},