]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/command_inset.C
introduce namespace lyx::support
[lyx.git] / src / mathed / command_inset.C
index 7af795e341579f13602379b87a6f0b1f85d9b13f..77570665d6d14f7857d04a1a6ac2ab2fde0e0ce7 100644 (file)
@@ -1,41 +1,72 @@
 
 #include "command_inset.h"
 #include "math_mathmlstream.h"
+#include "funcrequest.h"
+#include "Lsstream.h"
 
 
-CommandInset::CommandInset(string const & data)
+CommandInset::CommandInset(string const & name)
+       : MathNestInset(2),
+         name_(name),
+         set_label_(false)
 {
        lock_ = true;
-
-       string::size_type idx0 = data.find("|++|");
-       name_ = data.substr(0, idx0);
-       if (idx0 == string::npos)
-               return;
-       idx0 += 4;
-       string::size_type idx1 = data.find("|++|", idx0);
-       cell(0) = asArray(data.substr(idx0, idx1 - idx0));
-       if (idx1 == string::npos)
-               return;
-       cell(1) = asArray(data.substr(idx1 + 4));
 }
 
 
-MathInset * CommandInset::clone() const
+InsetBase * CommandInset::clone() const
 {
        return new CommandInset(*this);
 }
 
 
+void CommandInset::metrics(MetricsInfo & mi, Dimension & dim) const
+{
+       if (!set_label_) {
+               set_label_ = true;
+               button_.update(screenLabel(), true);
+       }
+       button_.metrics(mi, dim);
+}
+
+
+void CommandInset::draw(PainterInfo & pi, int x, int y) const
+{
+       button_.draw(pi, x, y);
+}
+
+dispatch_result
+CommandInset::dispatch(FuncRequest const & cmd, idx_type & idx, pos_type & pos)
+{
+       switch (cmd.action) {
+               default:
+                       return MathNestInset::dispatch(cmd, idx, pos);
+       }
+       return UNDISPATCHED;
+}
+
+
 void CommandInset::write(WriteStream & os) const
 {
-       os << "\\" << name_.c_str();
+       os << '\\' << name_.c_str();
        if (cell(1).size())
-               os << "[" << cell(1) << "]";
-       os << "{" << cell(0) << "}";
+               os << '[' << cell(1) << ']';
+       os << '{' << cell(0) << '}';
+}
+
+
+string const CommandInset::screenLabel() const
+{
+       return name_;
 }
 
 
-string CommandInset::screenLabel() const
+string const CommandInset::createDialogStr(string const & name) const
 {
-       return name_;
+       ostringstream data;
+       data << name << " LatexCommand ";
+       WriteStream wsdata(data);
+       write(wsdata);
+       wsdata << "\n\\end_inset\n\n";
+       return STRCONV(data.str());
 }