add some plugins interface method

Change-Id: I863da1169a5aceb1aa4891edd3ac000014e2eaa1
This commit is contained in:
石博文 2016-06-28 10:06:04 +08:00 committed by Hualet Wang
parent 8b479bbf14
commit 654accbaf5
8 changed files with 85 additions and 15 deletions

View File

@ -9,6 +9,8 @@ DockPluginsController::DockPluginsController(DockItemController *itemControllerI
: QObject(itemControllerInter), : QObject(itemControllerInter),
m_itemControllerInter(itemControllerInter) m_itemControllerInter(itemControllerInter)
{ {
qApp->installEventFilter(this);
QMetaObject::invokeMethod(this, "loadPlugins", Qt::QueuedConnection); QMetaObject::invokeMethod(this, "loadPlugins", Qt::QueuedConnection);
} }
@ -20,12 +22,18 @@ void DockPluginsController::itemAdded(PluginsItemInterface * const itemInter, co
{ {
PluginsItem *item = new PluginsItem(itemInter, itemKey); PluginsItem *item = new PluginsItem(itemInter, itemKey);
m_pluginList[itemInter][itemKey] = item;
emit pluginItemInserted(item); emit pluginItemInserted(item);
} }
DisplayMode DockPluginsController::displayMode() const void DockPluginsController::itemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey)
{ {
return Fashion; PluginsItem *item = pluginItemAt(itemInter, itemKey);
Q_ASSERT(item);
item->update();
} }
void DockPluginsController::loadPlugins() void DockPluginsController::loadPlugins()
@ -65,3 +73,43 @@ void DockPluginsController::loadPlugins()
// m_pluginsInterfaceList.append(interface); // m_pluginsInterfaceList.append(interface);
} }
} }
void DockPluginsController::displayModeChanged()
{
const DisplayMode displayMode = qApp->property(PROP_DISPLAY_MODE).value<Dock::DisplayMode>();
for (auto inter : m_pluginList.keys())
inter->displayModeChanged(displayMode);
}
void DockPluginsController::positionChanged()
{
const Position position = qApp->property(PROP_POSITION).value<Dock::Position>();
for (auto inter : m_pluginList.keys())
inter->positionChanged(position);
}
bool DockPluginsController::eventFilter(QObject *o, QEvent *e)
{
if (o != qApp)
return false;
if (e->type() != QEvent::DynamicPropertyChange)
return false;
QDynamicPropertyChangeEvent * const dpce = static_cast<QDynamicPropertyChangeEvent *>(e);
const QString propertyName = dpce->propertyName();
if (propertyName == PROP_POSITION)
positionChanged();
else if (propertyName == PROP_DISPLAY_MODE)
displayModeChanged();
return false;
}
PluginsItem *DockPluginsController::pluginItemAt(PluginsItemInterface * const itemInter, const QString &itemKey) const
{
if (!m_pluginList.contains(itemInter))
return nullptr;
return m_pluginList[itemInter][itemKey];
}

View File

@ -6,6 +6,7 @@
#include <QPluginLoader> #include <QPluginLoader>
#include <QList> #include <QList>
#include <QMap>
class DockItemController; class DockItemController;
class PluginsItemInterface; class PluginsItemInterface;
@ -19,18 +20,24 @@ public:
// implements PluginProxyInterface // implements PluginProxyInterface
void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey); void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey);
void itemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey);
Dock::DisplayMode displayMode() const;
signals: signals:
void pluginItemInserted(PluginsItem *pluginsItem) const; void pluginItemInserted(PluginsItem *pluginsItem) const;
private slots: private slots:
void loadPlugins(); void loadPlugins();
void displayModeChanged();
void positionChanged();
private:
bool eventFilter(QObject *o, QEvent *e);
PluginsItem *pluginItemAt(PluginsItemInterface * const itemInter, const QString &itemKey) const;
private: private:
// QList<PluginsItemInterface *> m_pluginsInterfaceList; // QList<PluginsItemInterface *> m_pluginsInterfaceList;
// QList<QPluginLoader *> m_pluginLoaderList; // QList<QPluginLoader *> m_pluginLoaderList;
QMap<PluginsItemInterface *, QMap<QString, PluginsItem *>> m_pluginList;
DockItemController *m_itemControllerInter; DockItemController *m_itemControllerInter;
}; };

View File

@ -10,8 +10,7 @@ class PluginProxyInterface
{ {
public: public:
virtual void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) = 0; virtual void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) = 0;
virtual void itemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey) = 0;
virtual Dock::DisplayMode displayMode() const = 0;
}; };
#endif // PLUGINPROXYINTERFACE_H #endif // PLUGINPROXYINTERFACE_H

View File

@ -22,11 +22,15 @@ public:
virtual const QString pluginName() = 0; virtual const QString pluginName() = 0;
// init plugins // init plugins
virtual void init(PluginProxyInterface *proxyInter) = 0; virtual void init(PluginProxyInterface *proxyInter) = 0;
// dock display mode changed
virtual void displayModeChanged(const Dock::DisplayMode displayMode) {Q_UNUSED(displayMode);}
// dock position changed
virtual void positionChanged(const Dock::Position position) {Q_UNUSED(position);}
// plugins type, simple icon or complex widget // plugins type, simple icon or complex widget
virtual PluginType pluginType(const QString &itemKey) = 0; virtual PluginType pluginType(const QString &itemKey) = 0;
// item sort key // item sort key
virtual int itemSortKey(const QString &itemKey) {Q_UNUSED(itemKey); return -1;} virtual int itemSortKey(const QString &itemKey) {Q_UNUSED(itemKey); return 0;}
// if complex widget mode, only return widget to plugins item // if complex widget mode, only return widget to plugins item
virtual QWidget *itemWidget(const QString &itemKey) {Q_UNUSED(itemKey); return nullptr;} virtual QWidget *itemWidget(const QString &itemKey) {Q_UNUSED(itemKey); return nullptr;}
@ -34,6 +38,17 @@ public:
virtual const QIcon itemIcon(const QString &itemKey) {Q_UNUSED(itemKey); return QIcon();} virtual const QIcon itemIcon(const QString &itemKey) {Q_UNUSED(itemKey); return QIcon();}
virtual const QString itemCommand(const QString &itemKey) {Q_UNUSED(itemKey); return QString();} virtual const QString itemCommand(const QString &itemKey) {Q_UNUSED(itemKey); return QString();}
protected:
Dock::DisplayMode displayMode() const
{
return qApp->property(PROP_DISPLAY_MODE).value<Dock::DisplayMode>();
}
Dock::Position position() const
{
return qApp->property(PROP_POSITION).value<Dock::Position>();
}
protected: protected:
PluginProxyInterface *m_proxyInter; PluginProxyInterface *m_proxyInter;
}; };

View File

@ -35,6 +35,13 @@ void DatetimePlugin::init(PluginProxyInterface *proxyInter)
m_proxyInter->itemAdded(this, QString()); m_proxyInter->itemAdded(this, QString());
} }
int DatetimePlugin::itemSortKey(const QString &itemKey) const
{
Q_UNUSED(itemKey);
return -1;
}
QWidget *DatetimePlugin::itemWidget(const QString &itemKey) QWidget *DatetimePlugin::itemWidget(const QString &itemKey)
{ {
Q_UNUSED(itemKey); Q_UNUSED(itemKey);

View File

@ -20,6 +20,8 @@ public:
PluginType pluginType(const QString &itemKey); PluginType pluginType(const QString &itemKey);
void init(PluginProxyInterface *proxyInter); void init(PluginProxyInterface *proxyInter);
int itemSortKey(const QString &itemKey) const;
QWidget *itemWidget(const QString &itemKey); QWidget *itemWidget(const QString &itemKey);
private slots: private slots:

View File

@ -39,10 +39,3 @@ const QString ShutdownPlugin::itemCommand(const QString &itemKey)
return QString("dbus-send --print-reply --dest=com.deepin.dde.shutdownFront /com/deepin/dde/shutdownFront com.deepin.dde.shutdownFront.Show"); return QString("dbus-send --print-reply --dest=com.deepin.dde.shutdownFront /com/deepin/dde/shutdownFront com.deepin.dde.shutdownFront.Show");
} }
int ShutdownPlugin::itemSortKey(const QString &itemKey)
{
Q_UNUSED(itemKey);
return 0;
}

View File

@ -14,7 +14,6 @@ public:
const QString pluginName(); const QString pluginName();
void init(PluginProxyInterface *proxyInter); void init(PluginProxyInterface *proxyInter);
int itemSortKey(const QString &itemKey);
PluginType pluginType(const QString &itemKey); PluginType pluginType(const QString &itemKey);