--- /dev/null
+/***************************************************************************
+ * Copyright (C) 2009 by Lassi Väätämöinen *
+ * lassi.vaatamoinen@ixonos.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#ifndef PLUGININTERFACE_H
+#define PLUGININTERFACE_H
+
+#include <QObject>
+#include <QPluginLoader>
+
+namespace qtrapids
+{
+
+ /** @class PluginHostInterface
+ * @brief Defines interface for plugins to access the host application.
+ * A Host is an application that is extended by implementing Plugins,
+ * that implement the additional functionality
+ */
+ class PluginHostInterface : public QObject {
+ public:
+
+ /// @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) = 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) = 0;
+ virtual void addToolbar() = 0;
+ virtual void addToolItem() = 0;
+ virtual void addMenu() = 0;
+ virtual void addMenuItem() = 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:
+ /// @brief Initializes the plugin instance.
+ virtual void initialize(PluginHostInterface* host) = 0;
+ virtual QWidget* getGui() = 0;
+ };
+
+} //namespace qtrapids
+
+
+// Declare the interfaces for the Qt framework.
+Q_DECLARE_INTERFACE(qtrapids::PluginInterface,
+ "com.ixonos.qtrapids.PluginInterface/1.0")
+Q_DECLARE_INTERFACE(qtrapids::PluginHostInterface,
+ "com.ixonos.qtrapids.PluginHostInterface/1.0")
+
+
+//////////////// EXAMPLE PLUGIN DECLARATION /////////////////////////
+// A simple plugin example using the PluginInterface
+// For more info, see Qt documentation: "How to Create Qt Plugins"
+//
+// namespace qtrapids
+// {
+//
+// class MyPlugin : public PluginInterface {
+// Q_OBJECT
+// // NOTE: This macro tells Qt which interfaces the plugin implements (i.e. inherits):
+// Q_INTERFACES(qtrapids::PluginInterface)
+//
+// public:
+// MyPlugin();
+// virtual void initialize(PluginHostInterface* host);
+// virtual QWidget* getGui();
+//
+// // Additional plugin-specific signals and slots.
+// signals:
+// void searchResult(QWidget* resultwidget);
+//
+// private slots:
+// void on_button_clicked();
+// void on_result(QWidget* resultWidget);
+//
+// private:
+// };
+//
+//
+// MyPlugin::MyPlugin(): host_(NULL) {}
+//
+// void SearchPlugin::initialize(AbstractPluginHost* host)
+// {
+// host_ = host;
+//
+// if (host_ != NULL) {
+// QWidget *pluginWidget = new QWidget;
+// QVBoxLayout *vbox = new QVBoxLayout;
+// QPushButton *searchButton = new QPushButton("Search");
+// vbox->addWidget(searchButton);
+// pluginWidget->setLayout(vbox);
+//
+// connect(searchButton, SIGNAL(clicked()), this, SLOT(on_searchButton_clicked()));
+// //connect(this, SIGNAL(searchResult(QWidget*)), this, SLOT(on_searchResult(QWidget*)));
+//
+// // Call host interface function to set the plugin GUI. Host handles the setup
+// // to it's own policy
+// host_->setGui(pluginWidget);
+// }
+// }
+// } // namespace qtrapids
+//
+//// NOTE: Remember to export the actual plugin to be visible for Qt:
+//// Q_EXPORT_PLUGIN2(myplugin, qtrapids::MyPlugin)
+//
+///////////////// END OF EXAMPLE PLUGIN ///////////////////////////////
+
+#endif