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 \
docktrayitem.h \
../dde-dock/src/abstractdockitem.h \
dbustraymanager.h
target.path = /usr/share/dde-dock/plugins/

View File

@ -2,9 +2,9 @@
#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);
QWidget *child = QWidget::createWindowContainer(win, item);
@ -17,57 +17,12 @@ DockTrayItem * DockTrayItem::fromWinId(WId winId, QWidget *parent)
}
DockTrayItem::DockTrayItem(QWidget *parent)
: AbstractDockItem(parent)
: QWidget(parent)
{
setFixedSize(32, 32);
setFixedSize(16, 16);
}
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
#include <QWindow>
#include <QWidget>
#include "abstractdockitem.h"
class DockTrayItem : public AbstractDockItem
class DockTrayItem : public QWidget
{
Q_OBJECT
enum Style { Simple, Composite };
public:
explicit DockTrayItem(QWidget *parent = 0);
~DockTrayItem();
static DockTrayItem* fromWinId(WId winId, QWidget *parent=0);
static DockTrayItem* fromWinId(WId winId);
void setTitle(const QString &title) Q_DECL_OVERRIDE;
void setIcon(const QString &iconPath, int size = 42) Q_DECL_OVERRIDE;
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;
private:
DockTrayItem(QWidget *parent = 0);
};
#endif // DOCKTRAYITEM_H

View File

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

View File

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

View File

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

View File

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

View File

@ -2,13 +2,15 @@
#define DOCKPLUGININTERFACE_H
#include <QObject>
#include "abstractdockitem.h"
#include <QStringList>
class DockPluginInterface
{
public:
virtual ~DockPluginInterface() {}
virtual QList<AbstractDockItem*> items() = 0;
virtual void init() = 0;
virtual QStringList uuids() = 0;
virtual QWidget* getItem(QString uuid) = 0;
};
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 "systraymanager.h"
#include "pluginitemwrapper.h"
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*> result;
if (m_plugin) {
return m_plugin->items();
} else {
return QList<AbstractDockItem*>();
QStringList uuids = m_plugin->uuids();
foreach (QString uuid, uuids) {
result << new PluginItemWrapper(m_plugin, uuid);
}
}
return result;
}
void SystrayManager::loadPlugin()
@ -29,6 +36,7 @@ void SystrayManager::loadPlugin()
QObject *plugin = loader.instance();
if (plugin) {
m_plugin = qobject_cast<DockPluginInterface*>(plugin);
m_plugin->init();
} else {
qWarning() << "Failed to load systray plugin.";
qWarning() << loader.errorString();

View File

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