- virtual void addPluginWidget(PluginInterface* from, QWidget* widget) = 0;
- virtual void addToolbar(PluginInterface* from, QWidget* widget) = 0;
- virtual void addToolItem(PluginInterface* from, QWidget* widget) = 0;
- virtual void addMenu(PluginInterface* from, QWidget* widget) = 0;
- virtual void addMenuItem(PluginInterface* from, QWidget* widget) = 0;
+ virtual void addPluginWidget(QWidget* widget, PluginWidgetType type = UNKNOWN_TYPE) = 0;
+ virtual void addToolbar(QWidget* widget, PluginWidgetType type = UNKNOWN_TYPE) = 0;
+ virtual void addToolItem(QWidget* widget, PluginWidgetType type = UNKNOWN_TYPE) = 0;
+ virtual void addMenu(QWidget* widget, PluginWidgetType type = UNKNOWN_TYPE) = 0;
+ virtual void addMenuItem(QWidget* widget, PluginWidgetType type = UNKNOWN_TYPE) = 0;
+
+ /// @brief Plugin can request to host application functionality.
+ /// Host application defines the service policy for plugin requests.
+ /// @todo Sending events would benefit from Qt signal, how to define
+ /// signal in an abstract interface?
+ virtual bool eventRequest(QVariant param, PluginRequest req = UNKNOWN_REQUEST) = 0;
+ };
+
+
+
+ /** @class PluginInterface
+ * @brief Defines interface for a plugin instance.
+ * The host application uses PluginInterface interface for calling the plugins
+ * that extend the Host functionality
+ */
+ class PluginInterface : public QObject
+ {
+ public:
+
+ /// @struct Info Used to supply information from the host application to the plugin
+ /// for initialization.
+ struct Info {
+ Info() : directory("") {} //Constructor
+ QString directory; ///< directory from which the plugin is loaded
+ // ...
+ };
+
+ /// @brief Initializes the plugin instance.
+ virtual void initialize(PluginHostInterface* host, Info info = Info()) = 0;
+
+ /// @brief Returns plugin identifier to be used by the host application
+ /// @returns Plugin identifier as string representation.
+ virtual QString identifier() = 0;
+
+ virtual QWidget* getGui() = 0;