]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/math_hullinset.C
Fix to bug 2362: Deleting superscript also deletes subscript.
[lyx.git] / src / mathed / math_hullinset.C
index b264756962d1fcf501c57cebd7f55c6c825cbbdc..da192918b999b6b0467740723169a9dcd515c0e4 100644 (file)
@@ -14,6 +14,7 @@
 #include "math_colorinset.h"
 #include "math_data.h"
 #include "math_extern.h"
+#include "math_factory.h"
 #include "math_hullinset.h"
 #include "math_mathmlstream.h"
 #include "math_streamstr.h"
@@ -142,6 +143,7 @@ MathHullInset::MathHullInset()
        //lyxerr << "sizeof MetricsInfo: " << sizeof(MetricsInfo) << endl;
        //lyxerr << "sizeof MathCharInset: " << sizeof(MathCharInset) << endl;
        //lyxerr << "sizeof LyXFont: " << sizeof(LyXFont) << endl;
+       initMath();
        setDefaults();
 }
 
@@ -150,6 +152,7 @@ MathHullInset::MathHullInset(string const & type)
        : MathGridInset(getCols(type), 1), type_(type), nonum_(1), label_(1),
          preview_(new RenderPreview(this))
 {
+       initMath();
        setDefaults();
 }
 
@@ -983,14 +986,14 @@ void MathHullInset::doExtern(LCursor & cur, FuncRequest & func)
 
 void MathHullInset::doDispatch(LCursor & cur, FuncRequest & cmd)
 {
-       lyxerr << "action: " << cmd.action << endl;
+       //lyxerr << "action: " << cmd.action << endl;
        switch (cmd.action) {
 
        case LFUN_FINISHED_LEFT:
        case LFUN_FINISHED_RIGHT:
        case LFUN_FINISHED_UP:
        case LFUN_FINISHED_DOWN:
-               lyxerr << "action: " << cmd.action << endl;
+               //lyxerr << "action: " << cmd.action << endl;
                MathGridInset::doDispatch(cur, cmd);
                notifyCursorLeaves(cur);
                cur.undispatched();
@@ -1043,8 +1046,10 @@ void MathHullInset::doDispatch(LCursor & cur, FuncRequest & cmd)
                string old_label = label(r);
                string const default_label =
                        (lyxrc.label_init_length >= 0) ? "eq:" : "";
+               if (old_label.empty())
+                       old_label = default_label;
                string const contents = cmd.argument.empty() ?
-                       label(r) : cmd.argument;
+                       old_label : cmd.argument;
 
                InsetCommandParams p("label", contents);
                string const data = InsetCommandMailer::params2string("label", p);
@@ -1075,7 +1080,14 @@ void MathHullInset::doDispatch(LCursor & cur, FuncRequest & cmd)
                                cur.bv().buffer()->changeRefsIfUnique(old, str);
                                label(r, str);
                        }
+                       break;
                }
+               MathArray ar;
+               if (createMathInset_fromDialogStr(cmd.argument, ar)) {
+                       recordUndo(cur);
+                       cur.insert(ar);
+               } else
+                       cur.undispatched();
                break;
        }
 
@@ -1138,6 +1150,15 @@ bool MathHullInset::getStatus(LCursor & cur, FuncRequest const & cmd,
        case LFUN_INSERT_LABEL:
                status.enabled(type_ != "simple");
                return true;
+       case LFUN_INSET_INSERT: {
+               // Don't test createMathInset_fromDialogStr(), since
+               // getStatus is not called with a valid reference and the
+               // dialog would not be applyable.
+               string const name = cmd.getArg(0);
+               status.enabled(name == "ref" ||
+                              (name == "label" && type_ != "simple"));
+               break;
+       }
        case LFUN_TABULAR_FEATURE: {
                istringstream is(cmd.argument);
                string s;
@@ -1190,6 +1211,9 @@ bool MathHullInset::getStatus(LCursor & cur, FuncRequest const & cmd,
        default:
                return MathGridInset::getStatus(cur, cmd, status);
        }
+
+       // This cannot really happen, but inserted to shut-up gcc
+       return MathGridInset::getStatus(cur, cmd, status);
 }
 
 
@@ -1456,3 +1480,10 @@ int MathHullInset::docbook(Buffer const & buf, ostream & os,
        ms << ETag(name.c_str());
        return ms.line() + res;
 }
+
+
+int MathHullInset::textString(Buffer const & buf, ostream & os,
+                      OutputParams const & op) const
+{
+       return plaintext(buf, os, op);
+}