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),
}
-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;
}
void InsetCommand::draw(PainterInfo & pi, int x, int y) const
{
- setPosCache(pi, x, y);
button_.setRenderState(mouse_hover_);
button_.draw(pi, x, y);
}
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();
}
case LFUN_MOUSE_RELEASE: {
- if (!mailer_name_.empty() && !cur.selection())
- InsetCommandMailer(mailer_name_, *this).showDialog(&cur.bv());
+ if (!cur.selection())
+ edit(cur, true);
break;
}
}
-void InsetCommand::replaceContents(std::string const & from, string const & to)
+void InsetCommand::edit(Cursor & cur, bool)
{
- 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)
{}
}
-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);
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 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)