- DownloadManager code in place
[qtrapids] / src / plugins / PluginInterface.h
index 33cd491..d5ed6c8 100644 (file)
@@ -21,7 +21,8 @@
 #define PLUGININTERFACE_H
 
 #include <QObject>
-#include <QPluginLoader>
+#include <QVariant>
+//#include <QPluginLoader>
 
 namespace qtrapids
 {
@@ -44,23 +45,37 @@ namespace qtrapids
                        enum PluginWidgetType {
                                BASE_WIDGET,
                                TAB_PAGE,
-                               UNKNOWN
+                               UNKNOWN_TYPE
+                       };
+                       
+                       /// @enum PluginRequest for requesting host application functionality
+                       /// E.g. open torrent file etc.
+                       /// @todo Additional functionality request constants.
+                       enum PluginRequest {
+                               OPEN_FILE,
+                               UNKNOWN_REQUEST
                        };
                        
                        /// @brief Sets the plugin GUI element to host application
                        /// @note It is up to the host application to decide how to manage
                        /// and show the actual widget.
-                       virtual bool setGui(QWidget* widget, PluginWidgetType type = UNKNOWN) = 0;
+                       virtual bool setGui(QWidget* widget, PluginWidgetType type = UNKNOWN_TYPE) = 0;
                        
                        /// @brief Adds additional plugin wigdets to the host application.
                        /// This functio can be called by the plugin recursively, i.e. when GUI events occur
                        /// The host application must handle placing the additional widgets.
                        /// @todo Could we implement this using in a more manageable way, e.g. signal-slot?
-                       virtual void addPluginWidget(QWidget* widget, PluginWidgetType type = UNKNOWN) = 0;
-                       virtual void addToolbar(QWidget* widget, PluginWidgetType type = UNKNOWN) = 0;
-                       virtual void addToolItem(QWidget* widget, PluginWidgetType type = UNKNOWN) = 0;
-                       virtual void addMenu(QWidget* widget, PluginWidgetType type = UNKNOWN) = 0;
-                       virtual void addMenuItem(QWidget* widget, PluginWidgetType type = UNKNOWN) = 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;
        };