4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
7 * \author Angus Leeming
8 * \author Lars Gullik Bjønnes
10 * Full author contact details are available in file CREDITS.
13 #ifndef INSETCOMMAND_H
14 #define INSETCOMMAND_H
17 #include "InsetCommandParams.h"
18 #include "RenderButton.h"
25 /////////////////////////////////////////////////////////////////////////
29 /////////////////////////////////////////////////////////////////////////
31 // Created by Alejandro 970222
32 // Used to insert a LaTeX command automatically.
34 class InsetCommand : public Inset
38 InsetCommand(Buffer *, InsetCommandParams const &,
39 std::string const & mailer_name);
43 /// returns true if params are successfully read
44 static bool string2params(std::string const &, std::string const & name,
45 InsetCommandParams &);
47 static std::string params2string(std::string const & name,
48 InsetCommandParams const &);
50 InsetCommandParams const & params() const { return p_; }
52 void setParams(InsetCommandParams const &);
54 void setParam(std::string const & name, docstring const & value);
56 docstring const & getParam(std::string const & name) const;
58 docstring const getFirstNonOptParam() const { return p_.getFirstNonOptParam(); }
59 /// update label and references.
60 virtual void updateCommand(docstring const &, bool) {}
64 void write(std::ostream & os) const { p_.write(os); }
66 void read(Lexer & lex) { p_.read(lex); }
68 void doDispatch(Cursor & cur, FuncRequest & cmd);
70 bool getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus &) const;
72 docstring const getCommand() const { return p_.getCommand(); }
74 std::string const & getCmdName() const { return p_.getCmdName(); }
76 void setCmdName(std::string const & n) { p_.setCmdName(n); }
80 void metrics(MetricsInfo &, Dimension &) const;
82 Dimension const dimension(BufferView const &) const { return button_.dimension(); }
84 void draw(PainterInfo & pi, int x, int y) const;
86 int latex(odocstream &, OutputParams const &) const;
88 int plaintext(odocstream &, OutputParams const &) const;
90 int docbook(odocstream &, OutputParams const & runparams) const;
92 InsetCode lyxCode() const { return NO_CODE; }
94 RenderButton & button() const { return button_; }
96 bool setMouseHover(bool mouse_hover);
97 /// Return parameter information for command cmdName.
98 /// Not implemented here. Must be implemented in derived class.
99 static ParamInfo const & findInfo(std::string const & cmdName);
100 /// Return default command for this inset.
101 /// Not implemented here. Must be implemented in derived class.
102 static std::string defaultCommand();
103 /// Whether this is a command this inset can represent.
104 /// Not implemented here. Must be implemented in derived class.
105 static bool isCompatibleCommand(std::string const & cmd);
107 docstring contextMenu(BufferView const & bv, int x, int y) const;
108 /// This should provide the text for the button
109 virtual docstring screenLabel() const = 0;
111 bool showInsetDialog(BufferView * bv) const;
115 InsetCommandParams p_;
117 std::string mailer_name_;
118 /// changes color when mouse enters/leaves this inset
121 mutable RenderButton button_;
124 /// Decode InsetCommand considering Inset name and data.
125 bool decodeInsetParam(std::string const & name, std::string & data,
126 Buffer const & buffer);