#ifndef ACTION_H
#define ACTION_H
-#include "frontends/LyXView.h"
-#include "FuncRequest.h"
-
-#include "support/docstring.h"
-
#include <QAction>
+#include <memory>
+
+class QIcon;
namespace lyx {
-namespace frontend {
-class GuiView;
+class FuncRequest;
+
+namespace frontend {
/**
* Action - Qt interface with LyX' FuncRequest.
*
* Action can be used in LyX menubar and/or toolbars.
*/
-class Action : public QAction {
+class Action : public QAction
+{
Q_OBJECT
-public:
- Action(GuiView & lyxView, docstring const & text,
- FuncRequest const & func, docstring const & tooltip = docstring());
+public:
+ // Makes a copy of func
+ Action(FuncRequest func, QIcon const & icon, QString const & text,
+ QString const & tooltip, QObject * parent);
- Action(GuiView & lyxView, std::string const & icon, docstring const & text,
- FuncRequest const & func, docstring const & tooltip = docstring());
+ // Takes shared ownership of func.
+ // Use for perf-sensitive code such as populating menus.
+ Action(std::shared_ptr<FuncRequest const> func,
+ QIcon const & icon, QString const & text,
+ QString const & tooltip, QObject * parent);
void update();
-// void setAction(FuncRequest const & func);
-
Q_SIGNALS:
/// the current action is triggered
void triggered(QAction *);
void action();
private:
- FuncRequest const & func_ ;
- GuiView & lyxView_;
+ void init(QIcon const & icon, QString const & text, QString const & tooltip);
+ std::shared_ptr<FuncRequest const> func_;
};