From 2037457bf7254318db94703961a6c024cacd331b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E5=8D=9A=E6=96=87?= Date: Fri, 24 Jun 2016 11:32:25 +0800 Subject: [PATCH] change plugin interface Change-Id: Ie2e3fd67559cd1af77deec2377c7978ad00364f1 --- frame/controller/dockitemcontroller.cpp | 2 +- frame/controller/dockpluginscontroller.cpp | 17 ++++++++++---- frame/controller/dockpluginscontroller.h | 11 +++++---- frame/item/pluginsitem.cpp | 14 ++++++++---- frame/item/pluginsitem.h | 9 +++++--- interfaces/interfaces.pri | 3 ++- interfaces/pluginproxyinterface.h | 14 ++++++++++++ interfaces/pluginsiteminterface.h | 26 ++++++++++++++++++++-- plugins/datetime/datetimeplugin.cpp | 19 ++++++++++++++-- plugins/datetime/datetimeplugin.h | 8 +++++-- 10 files changed, 100 insertions(+), 23 deletions(-) create mode 100644 interfaces/pluginproxyinterface.h diff --git a/frame/controller/dockitemcontroller.cpp b/frame/controller/dockitemcontroller.cpp index d4285cf83..e6dbb190a 100644 --- a/frame/controller/dockitemcontroller.cpp +++ b/frame/controller/dockitemcontroller.cpp @@ -68,7 +68,7 @@ DockItemController::DockItemController(QObject *parent) connect(m_appInter, &DBusDock::EntryAdded, this, &DockItemController::appItemAdded); connect(m_appInter, &DBusDock::EntryRemoved, this, &DockItemController::appItemRemoved); - connect(m_pluginsInter, &DockPluginsController::pluginsInserted, this, &DockItemController::pluginsItemInserted); + connect(m_pluginsInter, &DockPluginsController::pluginItemInserted, this, &DockItemController::pluginsItemInserted); } void DockItemController::appItemAdded(const QDBusObjectPath &path, const int index) diff --git a/frame/controller/dockpluginscontroller.cpp b/frame/controller/dockpluginscontroller.cpp index c3f6cf081..09f92902b 100644 --- a/frame/controller/dockpluginscontroller.cpp +++ b/frame/controller/dockpluginscontroller.cpp @@ -16,10 +16,17 @@ DockPluginsController::~DockPluginsController() { } +void DockPluginsController::itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) +{ + PluginsItem *item = new PluginsItem(itemInter, itemKey); + + emit pluginItemInserted(item); +} + void DockPluginsController::loadPlugins() { - Q_ASSERT(m_pluginLoaderList.isEmpty()); - Q_ASSERT(m_pluginsInterfaceList.isEmpty()); +// Q_ASSERT(m_pluginLoaderList.isEmpty()); +// Q_ASSERT(m_pluginsInterfaceList.isEmpty()); #ifdef QT_DEBUG const QDir pluginsDir("plugins"); @@ -42,7 +49,9 @@ void DockPluginsController::loadPlugins() continue; } - m_pluginLoaderList.append(pluginLoader); - m_pluginsInterfaceList.append(interface); + interface->init(this); + +// m_pluginLoaderList.append(pluginLoader); +// m_pluginsInterfaceList.append(interface); } } diff --git a/frame/controller/dockpluginscontroller.h b/frame/controller/dockpluginscontroller.h index f544a51d1..74b3d3a2c 100644 --- a/frame/controller/dockpluginscontroller.h +++ b/frame/controller/dockpluginscontroller.h @@ -2,13 +2,14 @@ #define DOCKPLUGINSCONTROLLER_H #include "item/pluginsitem.h" +#include "pluginproxyinterface.h" #include #include class DockItemController; class PluginsItemInterface; -class DockPluginsController : public QObject +class DockPluginsController : public QObject, PluginProxyInterface { Q_OBJECT @@ -16,15 +17,17 @@ public: explicit DockPluginsController(DockItemController *itemControllerInter = 0); ~DockPluginsController(); + void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey); + signals: - void pluginsInserted(PluginsItem *pluginsItem) const; + void pluginItemInserted(PluginsItem *pluginsItem) const; private slots: void loadPlugins(); private: - QList m_pluginsInterfaceList; - QList m_pluginLoaderList; +// QList m_pluginsInterfaceList; +// QList m_pluginLoaderList; DockItemController *m_itemControllerInter; }; diff --git a/frame/item/pluginsitem.cpp b/frame/item/pluginsitem.cpp index 14eb34e58..6c762ccb7 100644 --- a/frame/item/pluginsitem.cpp +++ b/frame/item/pluginsitem.cpp @@ -5,14 +5,20 @@ #include #include -PluginsItem::PluginsItem(PluginsItemInterface* const inter, QWidget *parent) +PluginsItem::PluginsItem(PluginsItemInterface* const pluginInter, const QString &itemKey, QWidget *parent) : DockItem(Plugins, parent), - m_inter(inter) + m_pluginInter(pluginInter), + m_itemKey(itemKey) { + m_type = pluginInter->pluginType(itemKey); + + if (m_type == PluginsItemInterface::Simple) + return; + + // construct complex widget layout QBoxLayout *layout = new QHBoxLayout; - layout->addWidget(m_inter->centeralWidget()); + layout->addWidget(m_pluginInter->itemWidget(itemKey)); layout->setSpacing(0); layout->setMargin(0); - setLayout(layout); } diff --git a/frame/item/pluginsitem.h b/frame/item/pluginsitem.h index 511453e83..63cd3f520 100644 --- a/frame/item/pluginsitem.h +++ b/frame/item/pluginsitem.h @@ -2,17 +2,20 @@ #define PLUGINSITEM_H #include "dockitem.h" +#include "pluginsiteminterface.h" -class PluginsItemInterface; class PluginsItem : public DockItem { Q_OBJECT public: - explicit PluginsItem(PluginsItemInterface* const inter, QWidget *parent = 0); + explicit PluginsItem(PluginsItemInterface* const pluginInter, const QString &itemKey, QWidget *parent = 0); private: - PluginsItemInterface* const m_inter; + PluginsItemInterface * const m_pluginInter; + const QString m_itemKey; + + PluginsItemInterface::PluginType m_type; }; #endif // PLUGINSITEM_H diff --git a/interfaces/interfaces.pri b/interfaces/interfaces.pri index fd7c851ae..deb435225 100644 --- a/interfaces/interfaces.pri +++ b/interfaces/interfaces.pri @@ -1,6 +1,7 @@ HEADERS += \ $$PWD/pluginsiteminterface.h \ - $$PWD/constants.h + $$PWD/constants.h \ + $$PWD/pluginproxyinterface.h INCLUDEPATH += $$PWD diff --git a/interfaces/pluginproxyinterface.h b/interfaces/pluginproxyinterface.h new file mode 100644 index 000000000..e73160c3a --- /dev/null +++ b/interfaces/pluginproxyinterface.h @@ -0,0 +1,14 @@ +#ifndef PLUGINPROXYINTERFACE_H +#define PLUGINPROXYINTERFACE_H + +#include + +class PluginsItemInterface; +class PluginProxyInterface +{ +public: + virtual void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) = 0; + +}; + +#endif // PLUGINPROXYINTERFACE_H diff --git a/interfaces/pluginsiteminterface.h b/interfaces/pluginsiteminterface.h index 4511f83f7..467e2aeb6 100644 --- a/interfaces/pluginsiteminterface.h +++ b/interfaces/pluginsiteminterface.h @@ -1,15 +1,37 @@ #ifndef PLUGINSITEMINTERFACE_H #define PLUGINSITEMINTERFACE_H +#include "pluginproxyinterface.h" + +#include #include class PluginsItemInterface { +public: + enum PluginType + { + Simple, + Complex, + }; + public: virtual ~PluginsItemInterface() {} - virtual const QString name() = 0; - virtual QWidget *centeralWidget() = 0; + // the unique plugin id + virtual const QString pluginName() = 0; + // plugins type, simple icon or complex widget + virtual PluginType pluginType(const QString &itemKey) = 0; + // init plugins + virtual void init(PluginProxyInterface *proxyInter) = 0; + + // if complex widget mode, only return widget to plugins item + virtual QWidget *itemWidget(const QString &itemKey) {Q_UNUSED(itemKey); return nullptr;} + // in simple icon mode, plugins need to implements some data source functions + virtual const QIcon itemIcon(const QString &itemKey) {Q_UNUSED(itemKey); return QIcon();} + +protected: + PluginProxyInterface *m_proxyInter; }; QT_BEGIN_NAMESPACE diff --git a/plugins/datetime/datetimeplugin.cpp b/plugins/datetime/datetimeplugin.cpp index d0a68432d..e45f7f547 100644 --- a/plugins/datetime/datetimeplugin.cpp +++ b/plugins/datetime/datetimeplugin.cpp @@ -24,13 +24,28 @@ DatetimePlugin::~DatetimePlugin() delete m_timeLabel; } -const QString DatetimePlugin::name() +const QString DatetimePlugin::pluginName() { return "datetime"; } -QWidget *DatetimePlugin::centeralWidget() +PluginsItemInterface::PluginType DatetimePlugin::pluginType(const QString &itemKey) { + Q_UNUSED(itemKey); + + return Complex; +} + +void DatetimePlugin::init(PluginProxyInterface *proxyInter) +{ + m_proxyInter = proxyInter; + m_proxyInter->itemAdded(this, QString()); +} + +QWidget *DatetimePlugin::itemWidget(const QString &itemKey) +{ + Q_UNUSED(itemKey); + return m_timeLabel; } diff --git a/plugins/datetime/datetimeplugin.h b/plugins/datetime/datetimeplugin.h index b6ddbe5e7..0684fbc47 100644 --- a/plugins/datetime/datetimeplugin.h +++ b/plugins/datetime/datetimeplugin.h @@ -16,8 +16,12 @@ public: explicit DatetimePlugin(QObject *parent = 0); ~DatetimePlugin(); - const QString name(); - QWidget *centeralWidget(); + const QString pluginName(); + PluginType pluginType(const QString &itemKey); + void init(PluginProxyInterface *proxyInter); + + QWidget *itemWidget(const QString &itemKey); + private slots: void refershTime();