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);
41 InsetCommand(InsetCommand const & rhs);
43 virtual ~InsetCommand();
45 InsetCommand * asInsetCommand() { return this; }
47 InsetCommand const * asInsetCommand() const { return this; }
50 /// returns true if params are successfully read
51 static bool string2params(std::string const &, std::string const & name,
52 InsetCommandParams &);
54 static std::string params2string(std::string const & name,
55 InsetCommandParams const &);
57 InsetCommandParams const & params() const { return p_; }
59 void setParams(InsetCommandParams const &);
61 docstring const & getParam(std::string const & name) const;
63 void setParam(std::string const & name, docstring const & value);
65 docstring const getFirstNonOptParam() const { return p_.getFirstNonOptParam(); }
66 /// whether to include this inset in the strings generated for the TOC
67 virtual bool isInToc() const { return false; }
69 /// \name Methods inherited from Inset class
72 void write(std::ostream & os) const { p_.write(os); }
74 void read(Lexer & lex) { p_.read(lex); }
76 void doDispatch(Cursor & cur, FuncRequest & cmd);
78 bool getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus &) const;
80 void metrics(MetricsInfo &, Dimension &) const;
82 void draw(PainterInfo & pi, int x, int y) const;
84 int latex(odocstream &, OutputParams const &) const;
86 int plaintext(odocstream &, OutputParams const &) const;
88 int docbook(odocstream &, OutputParams const & runparams) const;
90 bool setMouseHover(BufferView const * bv, bool mouse_hover) const;
92 bool clickable(int, int) const { return hasSettings(); }
94 docstring contextMenu(BufferView const & bv, int x, int y) const;
96 bool showInsetDialog(BufferView * bv) const;
98 Dimension const dimension(BufferView const &) const
99 { return button_.dimension(); }
103 /// \name Methods relaying to the InsetCommandParams
105 /// Build the complete LaTeX command
106 /// \see InsetCommandParams::getCommand
107 docstring const getCommand(OutputParams const & rp) const
108 { return p_.getCommand(rp); }
109 /// Return the command name
110 /// \see InsetCommandParams::getCmdName
111 std::string const & getCmdName() const { return p_.getCmdName(); }
112 /// Set the name to \p n. This must be a known name. All parameters
113 /// are cleared except those that exist also in the new command.
114 /// What matters here is the parameter name, not position.
115 /// \see InsetCommandParams::setCmdName
116 void setCmdName(std::string const & n) { p_.setCmdName(n); }
121 RenderButton & button() const { return button_; }
122 /// This should provide the text for the button
123 virtual docstring screenLabel() const = 0;
125 /// \name Methods obligated for InsetCommand derived classes
127 /// Return parameter information for command cmdName.
128 /// Not implemented here. Must be implemented in derived class.
129 static ParamInfo const & findInfo(std::string const & cmdName);
130 /// Return default command for this inset.
131 /// Not implemented here. Must be implemented in derived class.
132 static std::string defaultCommand();
133 /// Whether this is a command this inset can represent.
134 /// Not implemented here. Must be implemented in derived class.
135 static bool isCompatibleCommand(std::string const & cmd);
139 InsetCommandParams p_;
141 std::string mailer_name_;
142 /// changes color when mouse enters/leaves this inset
143 mutable std::map<BufferView const *, bool> mouse_hover_;
145 mutable RenderButton button_;
148 /// Decode InsetCommand considering Inset name and data.
149 bool decodeInsetParam(std::string const & name, std::string & data,
150 Buffer const & buffer);