]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/command_inset.C
Fix to bug 2362: Deleting superscript also deletes subscript.
[lyx.git] / src / mathed / command_inset.C
index 7c75d36887d4f1e64831f55a87b34b54ca0e6a0b..fcfa79d16a326288eff6da2e1787351dfa7c6ee0 100644 (file)
@@ -1,31 +1,63 @@
+/**
+ * \file command_inset.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author André Pönitz
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#include <config.h>
 
 #include "command_inset.h"
+#include "math_data.h"
 #include "math_mathmlstream.h"
+#include "dispatchresult.h"
 #include "funcrequest.h"
-#include "Lsstream.h"
+
+#include <sstream>
+
+using std::string;
+using std::auto_ptr;
+using std::ostringstream;
 
 
 CommandInset::CommandInset(string const & name)
-       : name_(name)
+       : MathNestInset(2), name_(name), set_label_(false)
 {
        lock_ = true;
 }
 
 
-MathInset * CommandInset::clone() const
+auto_ptr<InsetBase> CommandInset::doClone() const
 {
-       return new CommandInset(*this);
+       return auto_ptr<InsetBase>(new CommandInset(*this));
 }
 
 
-dispatch_result
-CommandInset::dispatch(FuncRequest const & cmd, idx_type & idx, pos_type & pos)
+void CommandInset::metrics(MetricsInfo & mi, Dimension & dim) const
 {
-       switch (cmd.action) {
-               default:
-                       return ButtonInset::dispatch(cmd, idx, pos);
+       if (!set_label_) {
+               set_label_ = true;
+               button_.update(screenLabel(), true);
        }
-       return UNDISPATCHED;
+       button_.metrics(mi, dim);
+       dim_ = dim;
+}
+
+
+InsetBase * CommandInset::editXY(LCursor & cur, int /*x*/, int /*y*/)
+{
+       edit(cur, true);
+       return this;
+}
+
+
+void CommandInset::draw(PainterInfo & pi, int x, int y) const
+{
+       button_.draw(pi, x, y);
+       setPosCache(pi, x, y);
 }
 
 
@@ -38,7 +70,7 @@ void CommandInset::write(WriteStream & os) const
 }
 
 
-string CommandInset::screenLabel() const
+string const CommandInset::screenLabel() const
 {
        return name_;
 }
@@ -46,12 +78,10 @@ string CommandInset::screenLabel() const
 
 string const CommandInset::createDialogStr(string const & name) const
 {
-       ostringstream data;
-       data << name << " LatexCommand ";
-       WriteStream wsdata(data);
-       write(wsdata);
-       wsdata << "\n\\end_inset\n\n";
-       return STRCONV(data.str());
+       ostringstream os;
+       os << name << " LatexCommand ";
+       WriteStream ws(os);
+       write(ws);
+       ws << "\n\\end_inset\n\n";
+       return os.str();
 }
-
-