new dockplugininterface

This commit is contained in:
Hualet Wang 2015-07-02 19:47:53 +08:00
parent 15011129c1
commit 38264b4388
12 changed files with 85 additions and 90 deletions

View File

@ -20,7 +20,6 @@ SOURCES += systrayplugin.cpp \
HEADERS += systrayplugin.h \ HEADERS += systrayplugin.h \
docktrayitem.h \ docktrayitem.h \
../dde-dock/src/abstractdockitem.h \
dbustraymanager.h dbustraymanager.h
target.path = /usr/share/dde-dock/plugins/ target.path = /usr/share/dde-dock/plugins/

View File

@ -2,9 +2,9 @@
#include "docktrayitem.h" #include "docktrayitem.h"
DockTrayItem * DockTrayItem::fromWinId(WId winId, QWidget *parent) DockTrayItem * DockTrayItem::fromWinId(WId winId)
{ {
DockTrayItem *item = new DockTrayItem(parent); DockTrayItem *item = new DockTrayItem;
QWindow *win = QWindow::fromWinId(winId); QWindow *win = QWindow::fromWinId(winId);
QWidget *child = QWidget::createWindowContainer(win, item); QWidget *child = QWidget::createWindowContainer(win, item);
@ -17,57 +17,12 @@ DockTrayItem * DockTrayItem::fromWinId(WId winId, QWidget *parent)
} }
DockTrayItem::DockTrayItem(QWidget *parent) DockTrayItem::DockTrayItem(QWidget *parent)
: AbstractDockItem(parent) : QWidget(parent)
{ {
setFixedSize(32, 32); setFixedSize(16, 16);
} }
DockTrayItem::~DockTrayItem() DockTrayItem::~DockTrayItem()
{ {
} }
void DockTrayItem::setTitle(const QString &)
{
}
void DockTrayItem::setIcon(const QString &, int)
{
}
void DockTrayItem::setMoveable(bool)
{
}
bool DockTrayItem::moveable()
{
return false;
}
void DockTrayItem::setActived(bool)
{
}
bool DockTrayItem::actived()
{
return false;
}
void DockTrayItem::setIndex(int value)
{
m_itemIndex = value;
}
int DockTrayItem::index()
{
return m_itemIndex;
}
QWidget * DockTrayItem::getContents()
{
return NULL;
}

View File

@ -2,30 +2,20 @@
#define DOCKTRAYITEM_H #define DOCKTRAYITEM_H
#include <QWindow> #include <QWindow>
#include <QWidget>
#include "abstractdockitem.h" class DockTrayItem : public QWidget
class DockTrayItem : public AbstractDockItem
{ {
Q_OBJECT Q_OBJECT
enum Style { Simple, Composite }; enum Style { Simple, Composite };
public: public:
explicit DockTrayItem(QWidget *parent = 0);
~DockTrayItem(); ~DockTrayItem();
static DockTrayItem* fromWinId(WId winId, QWidget *parent=0); static DockTrayItem* fromWinId(WId winId);
void setTitle(const QString &title) Q_DECL_OVERRIDE; private:
void setIcon(const QString &iconPath, int size = 42) Q_DECL_OVERRIDE; DockTrayItem(QWidget *parent = 0);
void setMoveable(bool value) Q_DECL_OVERRIDE;
bool moveable() Q_DECL_OVERRIDE;
void setActived(bool value) Q_DECL_OVERRIDE;
bool actived() Q_DECL_OVERRIDE;
void setIndex(int value) Q_DECL_OVERRIDE;
int index() Q_DECL_OVERRIDE;
QWidget * getContents() Q_DECL_OVERRIDE;
}; };
#endif // DOCKTRAYITEM_H #endif // DOCKTRAYITEM_H

View File

@ -3,17 +3,14 @@
#include "systrayplugin.h" #include "systrayplugin.h"
#include "abstractdockitem.h" #include "abstractdockitem.h"
SystrayPlugin::~SystrayPlugin() SystrayPlugin::~SystrayPlugin()
{ {
this->clearItems(); this->clearItems();
} }
QList<AbstractDockItem*> SystrayPlugin::items() void SystrayPlugin::init()
{ {
//clear m_items.
this->clearItems();
// get xids of trayicons.
if (!m_dbusTrayManager) { if (!m_dbusTrayManager) {
m_dbusTrayManager = new com::deepin::dde::TrayManager("com.deepin.dde.TrayManager", m_dbusTrayManager = new com::deepin::dde::TrayManager("com.deepin.dde.TrayManager",
"/com/deepin/dde/TrayManager", "/com/deepin/dde/TrayManager",
@ -24,22 +21,24 @@ QList<AbstractDockItem*> SystrayPlugin::items()
QList<uint> trayIcons = m_dbusTrayManager->trayIcons(); QList<uint> trayIcons = m_dbusTrayManager->trayIcons();
qDebug() << "Found trayicons: " << trayIcons; qDebug() << "Found trayicons: " << trayIcons;
QList<WId> winIds; foreach (uint trayIcon, trayIcons) {
foreach (QVariant trayIcon, trayIcons) { m_items[QString::number(trayIcon)] = DockTrayItem::fromWinId(trayIcon);
winIds << trayIcon.toUInt();
} }
}
// generate items. QStringList SystrayPlugin::uuids()
foreach (WId winId, winIds) { {
m_items << DockTrayItem::fromWinId(winId); return m_items.keys();
} }
return m_items; QWidget * SystrayPlugin::getItem(QString uuid)
{
return m_items.value(uuid);
} }
void SystrayPlugin::clearItems() void SystrayPlugin::clearItems()
{ {
foreach (AbstractDockItem * item, m_items) { foreach (QWidget * item, m_items) {
item->deleteLater(); item->deleteLater();
} }
m_items.clear(); m_items.clear();

View File

@ -2,10 +2,10 @@
#define SYSTRAYPLUGIN_H #define SYSTRAYPLUGIN_H
#include <QtPlugin> #include <QtPlugin>
#include <QStringList>
#include "docktrayitem.h" #include "docktrayitem.h"
#include "dockplugininterface.h" #include "dockplugininterface.h"
#include "abstractdockitem.h"
#include "dbustraymanager.h" #include "dbustraymanager.h"
class SystrayPlugin : public QObject, DockPluginInterface class SystrayPlugin : public QObject, DockPluginInterface
@ -17,10 +17,12 @@ class SystrayPlugin : public QObject, DockPluginInterface
public: public:
~SystrayPlugin(); ~SystrayPlugin();
QList<AbstractDockItem*> items() Q_DECL_OVERRIDE; void init() Q_DECL_OVERRIDE;
QStringList uuids() Q_DECL_OVERRIDE;
QWidget * getItem(QString uuid) Q_DECL_OVERRIDE;
private: private:
QList<AbstractDockItem*> m_items; QMap<QString, QWidget*> m_items;
com::deepin::dde::TrayManager *m_dbusTrayManager = 0; com::deepin::dde::TrayManager *m_dbusTrayManager = 0;
void clearItems(); void clearItems();

View File

@ -25,7 +25,8 @@ SOURCES += \
src/systraymanager.cpp \ src/systraymanager.cpp \
src/Panel/panelmenu.cpp \ src/Panel/panelmenu.cpp \
src/Controller/dockmodedata.cpp \ src/Controller/dockmodedata.cpp \
src/Controller/dockconstants.cpp src/Controller/dockconstants.cpp \
src/pluginitemwrapper.cpp
HEADERS += \ HEADERS += \
src/abstractdockitem.h \ src/abstractdockitem.h \
@ -41,7 +42,8 @@ HEADERS += \
src/systraymanager.h \ src/systraymanager.h \
src/Panel/panelmenu.h \ src/Panel/panelmenu.h \
src/Controller/dockmodedata.h \ src/Controller/dockmodedata.h \
src/Controller/dockconstants.h src/Controller/dockconstants.h \
src/pluginitemwrapper.h
RESOURCES += \ RESOURCES += \
images.qrc \ images.qrc \

View File

@ -40,6 +40,7 @@ Panel::Panel(QWidget *parent)
SystrayManager *manager = new SystrayManager(); SystrayManager *manager = new SystrayManager();
foreach (AbstractDockItem *item, manager->trayIcons()) { foreach (AbstractDockItem *item, manager->trayIcons()) {
rightLayout->addItem(item); rightLayout->addItem(item);
qDebug() << item->geometry();
} }
panelMenu = new PanelMenu(); panelMenu = new PanelMenu();

View File

@ -2,13 +2,15 @@
#define DOCKPLUGININTERFACE_H #define DOCKPLUGININTERFACE_H
#include <QObject> #include <QObject>
#include "abstractdockitem.h" #include <QStringList>
class DockPluginInterface class DockPluginInterface
{ {
public: public:
virtual ~DockPluginInterface() {} virtual ~DockPluginInterface() {}
virtual QList<AbstractDockItem*> items() = 0; virtual void init() = 0;
virtual QStringList uuids() = 0;
virtual QWidget* getItem(QString uuid) = 0;
}; };
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE

View File

@ -0,0 +1,19 @@
#include "pluginitemwrapper.h"
PluginItemWrapper::PluginItemWrapper(DockPluginInterface *plugin,
QString uuid, QWidget * parent) :
AbstractDockItem(parent),
m_plugin(plugin),
m_uuid(uuid)
{
if (m_plugin) {
QWidget * item = m_plugin->getItem(uuid);
if (item) {
setFixedSize(item->size());
item->setParent(this);
item->move(this->rect().center() - item->rect().center());
}
}
}

View File

@ -0,0 +1,18 @@
#ifndef PLUGINITEMWRAPPER_H
#define PLUGINITEMWRAPPER_H
#include "abstractdockitem.h"
#include "dockplugininterface.h"
class PluginItemWrapper : public AbstractDockItem
{
public:
PluginItemWrapper(DockPluginInterface *plugin, QString uuid, QWidget * parent = 0);
private:
DockPluginInterface * m_plugin;
QString m_uuid;
};
#endif // PLUGINITEMWRAPPER_H

View File

@ -3,6 +3,7 @@
#include <QDebug> #include <QDebug>
#include "systraymanager.h" #include "systraymanager.h"
#include "pluginitemwrapper.h"
static QString SystrayPluginPath = "/usr/share/dde-dock/plugins/libdock-systray-plugin.so"; static QString SystrayPluginPath = "/usr/share/dde-dock/plugins/libdock-systray-plugin.so";
@ -15,11 +16,17 @@ SystrayManager::SystrayManager(QObject *parent)
QList<AbstractDockItem*> SystrayManager::trayIcons() QList<AbstractDockItem*> SystrayManager::trayIcons()
{ {
QList<AbstractDockItem*> result;
if (m_plugin) { if (m_plugin) {
return m_plugin->items(); QStringList uuids = m_plugin->uuids();
} else {
return QList<AbstractDockItem*>(); foreach (QString uuid, uuids) {
result << new PluginItemWrapper(m_plugin, uuid);
}
} }
return result;
} }
void SystrayManager::loadPlugin() void SystrayManager::loadPlugin()
@ -29,6 +36,7 @@ void SystrayManager::loadPlugin()
QObject *plugin = loader.instance(); QObject *plugin = loader.instance();
if (plugin) { if (plugin) {
m_plugin = qobject_cast<DockPluginInterface*>(plugin); m_plugin = qobject_cast<DockPluginInterface*>(plugin);
m_plugin->init();
} else { } else {
qWarning() << "Failed to load systray plugin."; qWarning() << "Failed to load systray plugin.";
qWarning() << loader.errorString(); qWarning() << loader.errorString();

View File

@ -4,6 +4,7 @@
#include <QObject> #include <QObject>
#include "dockplugininterface.h" #include "dockplugininterface.h"
class AbstractDockItem;
class SystrayManager : public QObject class SystrayManager : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -16,7 +17,6 @@ private:
DockPluginInterface *m_plugin; DockPluginInterface *m_plugin;
void loadPlugin(); void loadPlugin();
void unloadPlugin();
}; };
#endif // SYSTRAYMANAGER_H #endif // SYSTRAYMANAGER_H