X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetCommand.cpp;h=6ade744ed93c431da1d5f1a4cd1edb9eeec4b7f8;hb=2c357c1d23b7b83839a9beb8225d4f1ae4f793b4;hp=6fd0d27605a0b7efb12ac16630b0591148b1a1be;hpb=39e79d8602920eefe36e898c9f415afb979521b2;p=lyx.git diff --git a/src/insets/InsetCommand.cpp b/src/insets/InsetCommand.cpp index 6fd0d27605..6ade744ed9 100644 --- a/src/insets/InsetCommand.cpp +++ b/src/insets/InsetCommand.cpp @@ -13,25 +13,24 @@ #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 +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), @@ -48,17 +47,14 @@ 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()), + button_.update(getScreenLabel(mi.base.bv->buffer()), editable() != NOT_EDITABLE); } button_.metrics(mi, dim); - bool const changed = dim_ != dim; - dim_ = dim; - return changed; } @@ -71,7 +67,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); } @@ -85,30 +80,30 @@ void InsetCommand::setParams(InsetCommandParams const & p) int InsetCommand::latex(Buffer const &, odocstream & os, - OutputParams const &) const + OutputParams const &) const { os << getCommand(); return 0; } -int InsetCommand::plaintext(Buffer const &, odocstream & os, - OutputParams const &) const +int InsetCommand::plaintext(Buffer const & buf, odocstream & os, + OutputParams const &) const { - docstring const str = "[" + _("LaTeX Command: ") + from_utf8(getCmdName()) + "]"; + docstring const str = "[" + buf.B_("LaTeX Command: ") + from_utf8(getCmdName()) + "]"; os << str; return str.size(); } int InsetCommand::docbook(Buffer const &, odocstream &, - OutputParams const &) const + 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: @@ -116,7 +111,7 @@ void InsetCommand::doDispatch(LCursor & cur, FuncRequest & cmd) 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 +127,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()) + 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) { @@ -160,20 +155,20 @@ bool InsetCommand::getStatus(LCursor & cur, FuncRequest const & cmd, 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) +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 +179,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 +193,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)