]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetCommand.cpp
Cosmetics.
[lyx.git] / src / insets / InsetCommand.cpp
index 6fd0d27605a0b7efb12ac16630b0591148b1a1be..c1fa7b6f06dec976503e20745de174fa11d9a0df 100644 (file)
 
 #include "InsetCommand.h"
 
+#include "Buffer.h"
 #include "BufferView.h"
 #include "DispatchResult.h"
 #include "FuncRequest.h"
 #include "FuncStatus.h"
-#include "gettext.h"
+#include "support/gettext.h"
 #include "Lexer.h"
 #include "MetricsInfo.h"
 
 #include <sstream>
 
+using namespace std;
 
 namespace lyx {
 
-using std::string;
-using std::istringstream;
-using std::ostream;
-using std::ostringstream;
-
 
+// FIXME Would it now be possible to use the InsetCode in 
+// place of the mailer name and recover that information?
 InsetCommand::InsetCommand(InsetCommandParams const & p,
                           string const & mailer_name)
        : p_(p),
          mailer_name_(mailer_name),
-         mouse_hover_(false),
-         updateButtonLabel_(true)
+         mouse_hover_(false)
 {}
 
 
@@ -48,17 +46,10 @@ InsetCommand::~InsetCommand()
 }
 
 
-bool InsetCommand::metrics(MetricsInfo & mi, Dimension & dim) const
+void InsetCommand::metrics(MetricsInfo & mi, Dimension & dim) const
 {
-       if (updateButtonLabel_) {
-               updateButtonLabel_ = false;
-               button_.update(getScreenLabel(*mi.base.bv->buffer()),
-                              editable() != NOT_EDITABLE);
-       }
+       button_.update(screenLabel(), editable() != NOT_EDITABLE);
        button_.metrics(mi, dim);
-       bool const changed = dim_ != dim;
-       dim_ = dim;
-       return changed;
 }
 
 
@@ -71,7 +62,6 @@ bool InsetCommand::setMouseHover(bool mouse_hover)
 
 void InsetCommand::draw(PainterInfo & pi, int x, int y) const
 {
-       setPosCache(pi, x, y);
        button_.setRenderState(mouse_hover_);
        button_.draw(pi, x, y);
 }
@@ -80,43 +70,37 @@ void InsetCommand::draw(PainterInfo & pi, int x, int y) const
 void InsetCommand::setParams(InsetCommandParams const & p)
 {
        p_ = p;
-       updateButtonLabel_ = true;
+       initView();
 }
 
 
-int InsetCommand::latex(Buffer const &, odocstream & os,
-                        OutputParams const &) const
+int InsetCommand::latex(odocstream & os, OutputParams const &) const
 {
        os << getCommand();
        return 0;
 }
 
 
-int InsetCommand::plaintext(Buffer const &, odocstream & os,
-                            OutputParams const &) const
+int InsetCommand::plaintext(odocstream & os, OutputParams const &) const
 {
-       docstring const str = "[" + _("LaTeX Command: ") + from_utf8(getCmdName()) + "]";
+       docstring const str = "[" + buffer().B_("LaTeX Command: ")
+               + from_utf8(getCmdName()) + "]";
        os << str;
        return str.size();
 }
 
 
-int InsetCommand::docbook(Buffer const &, odocstream &,
-                          OutputParams const &) const
+int InsetCommand::docbook(odocstream &, OutputParams const &) const
 {
        return 0;
 }
 
 
-void InsetCommand::doDispatch(LCursor & cur, FuncRequest & cmd)
+void InsetCommand::doDispatch(Cursor & cur, FuncRequest & cmd)
 {
        switch (cmd.action) {
-       case LFUN_INSET_REFRESH:
-               updateButtonLabel_ = true;
-               break;
-
        case LFUN_INSET_MODIFY: {
-               InsetCommandParams p(p_.getCmdName());
+               InsetCommandParams p(p_.code());
                InsetCommandMailer::string2params(mailer_name_, to_utf8(cmd.argument()), p);
                if (p.getCmdName().empty())
                        cur.noUpdate();
@@ -132,20 +116,20 @@ void InsetCommand::doDispatch(LCursor & cur, FuncRequest & cmd)
        }
 
        case LFUN_MOUSE_RELEASE: {
-               if (!mailer_name_.empty())
-                       InsetCommandMailer(mailer_name_, *this).showDialog(&cur.bv());
+               if (!cur.selection() && cmd.button() != mouse_button::button3)
+                       edit(cur, true);
                break;
        }
 
        default:
-               InsetBase::doDispatch(cur, cmd);
+               Inset::doDispatch(cur, cmd);
                break;
        }
 
 }
 
 
-bool InsetCommand::getStatus(LCursor & cur, FuncRequest const & cmd,
+bool InsetCommand::getStatus(Cursor & cur, FuncRequest const & cmd,
        FuncStatus & status) const
 {
        switch (cmd.action) {
@@ -154,26 +138,31 @@ bool InsetCommand::getStatus(LCursor & cur, FuncRequest const & cmd,
                status.enabled(false);
                return true;
        // we handle these
-       case LFUN_INSET_REFRESH:
        case LFUN_INSET_MODIFY:
        case LFUN_INSET_DIALOG_UPDATE:
                status.enabled(true);
                return true;
        default:
-               return InsetBase::getStatus(cur, cmd, status);
+               return Inset::getStatus(cur, cmd, status);
        }
 }
 
 
-void InsetCommand::replaceContents(std::string const & from, string const & to)
+docstring InsetCommand::contextMenu(BufferView const &, int, int) const
+{
+       return from_ascii("context-") + from_ascii(mailer_name_);
+}
+
+
+void InsetCommand::edit(Cursor & cur, bool, EntryDirection)
 {
-       if (getContents() == from)
-               setContents(to);
+       if (!mailer_name_.empty())
+               InsetCommandMailer(mailer_name_, *this).showDialog(&cur.bv());
 }
 
 
-InsetCommandMailer::InsetCommandMailer(string const & name,
-                                      InsetCommand & inset)
+InsetCommandMailer::InsetCommandMailer(
+       string const & name, InsetCommand & inset)
        : name_(name), inset_(inset)
 {}
 
@@ -184,13 +173,13 @@ string const InsetCommandMailer::inset2string(Buffer const &) const
 }
 
 
-void InsetCommandMailer::string2params(string const & name,
-                                      string const & in,
-                                      InsetCommandParams & params)
+//FIXME This could take an InsetCode instead of a string
+bool InsetCommandMailer::string2params(
+       string const & name, string const & in, InsetCommandParams & params)
 {
        params.clear();
        if (in.empty())
-               return;
+               return false;
 
        istringstream data(in);
        Lexer lex(0,0);
@@ -198,20 +187,26 @@ void InsetCommandMailer::string2params(string const & name,
 
        string n;
        lex >> n;
-       if (!lex || n != name)
-               return print_mailer_error("InsetCommandMailer", in, 1, name);
+       if (!lex || n != name) {
+               print_mailer_error("InsetCommandMailer", in, 1, name);
+               return false;
+       }
 
        // This is part of the inset proper that is usually swallowed
-       // by LyXText::readInset
+       // by Text::readInset
        string id;
        lex >> id;
-       if (!lex || id != "LatexCommand")
-               return print_mailer_error("InsetCommandMailer", in, 2, "LatexCommand");
+       if (!lex || id != "CommandInset") {
+               print_mailer_error("InsetCommandMailer", in, 2, "LatexCommand");
+               return false;
+       }
 
        params.read(lex);
+       return true;
 }
 
 
+//FIXME This could take an InsetCode instead of a string
 string const
 InsetCommandMailer::params2string(string const & name,
                                  InsetCommandParams const & params)