mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-03 00:15:21 +00:00
new dockplugininterface
This commit is contained in:
parent
15011129c1
commit
38264b4388
@ -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/
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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 \
|
||||
|
@ -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();
|
||||
|
@ -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
|
||||
|
19
dde-dock/src/pluginitemwrapper.cpp
Normal file
19
dde-dock/src/pluginitemwrapper.cpp
Normal 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());
|
||||
}
|
||||
}
|
||||
}
|
18
dde-dock/src/pluginitemwrapper.h
Normal file
18
dde-dock/src/pluginitemwrapper.h
Normal 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
|
@ -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();
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user