X-Git-Url: http://git.maemo.org/git/?p=qtrapids;a=blobdiff_plain;f=src%2Fplugins%2FPluginInterface.h;fp=src%2Fplugins%2FPluginInterface.h;h=5abf940ec5a91f7d9172ee1a102ba87b2b126c79;hp=0000000000000000000000000000000000000000;hb=f291a99270f6f9ac0f2bd89880a9c27a267a8716;hpb=5fff20c40f52af8641f4139e48de74db40d43ca8 diff --git a/src/plugins/PluginInterface.h b/src/plugins/PluginInterface.h new file mode 100644 index 0000000..5abf940 --- /dev/null +++ b/src/plugins/PluginInterface.h @@ -0,0 +1,133 @@ +/*************************************************************************** + * 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 +#include + +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