systray plugin prototype

This commit is contained in:
Hualet Wang 2015-06-30 16:21:19 +08:00
parent 197de01630
commit e14891dea1
10 changed files with 197 additions and 4 deletions

1
.gitignore vendored
View File

@ -14,3 +14,4 @@
build*/
*.pro.user*
*.DS_Store

View File

@ -0,0 +1,21 @@
#-------------------------------------------------
#
# Project created by QtCreator 2015-06-29T20:08:12
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
INCLUDEPATH += ../dde-dock/src/
CONFIG += plugin c++11
TARGET = $$qtLibraryTarget(dock-systray-plugin)
TEMPLATE = lib
SOURCES += systrayplugin.cpp \
docktrayitem.cpp
HEADERS += systrayplugin.h \
docktrayitem.h

View File

@ -0,0 +1,73 @@
#include <QHBoxLayout>
#include "docktrayitem.h"
static DockTrayItem * fromWinId(WId winId, QWidget *parent)
{
DockTrayItem *item = new DockTrayItem(parent);
QWindow *win = QWindow::fromWinId(winId);
QWidget *child = QWidget::createWindowContainer(win, item);
QHBoxLayout *layout = new QHBoxLayout(item);
layout->addWidget(child);
item->setLayout(layout);
return item;
}
DockTrayItem::DockTrayItem(QWidget *parent)
: AbstractDockItem(parent)
{
}
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

@ -0,0 +1,31 @@
#ifndef DOCKTRAYITEM_H
#define DOCKTRAYITEM_H
#include <QWindow>
#include "abstractdockitem.h"
class DockTrayItem : public AbstractDockItem
{
Q_OBJECT
enum Style { Simple, Composite };
public:
explicit DockTrayItem(QWidget *parent = 0);
~DockTrayItem();
static DockTrayItem* fromWinId(WId winId, QWidget *parent=0);
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;
};
#endif // DOCKTRAYITEM_H

View File

@ -0,0 +1,11 @@
#include "systrayplugin.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
SystrayPlugin w;
w.show();
return a.exec();
}

View File

View File

@ -0,0 +1,33 @@
#include "systrayplugin.h"
SystrayPlugin::~SystrayPlugin()
{
this->clearItems();
}
QList<AbstractDockItem*> SystrayPlugin::items()
{
//clear m_items.
this->clearItems();
// get xids of trayicons.
QList<WId> winIds;
winIds << 79691780 << 65011722;
// generate items.
WId winId;
foreach (winId, winIds) {
m_items << DockTrayItem::fromWinId(winId);
}
return m_items;
}
void SystrayPlugin::clearItems()
{
AbstractDockItem *item;
foreach (item, m_items) {
item->deleteLater();
}
m_items.clear();
}

View File

@ -0,0 +1,24 @@
#ifndef SYSTRAYPLUGIN_H
#define SYSTRAYPLUGIN_H
#include "docktrayitem.h"
#include "dockplugininterface.h"
class SystrayPlugin : public QObject, DockPluginInterface
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.deepin.Dock.PluginInterface" FILE "systray.json")
Q_INTERFACES(DockPluginInterface)
public:
~SystrayPlugin();
QList<AbstractDockItem*> items() Q_DECL_OVERRIDE;
private:
QList<AbstractDockItem*> m_items;
void clearItems();
};
#endif // SYSTRAYPLUGIN_H

View File

@ -11,7 +11,7 @@ class AbstractDockItem : public QFrame
Q_OBJECT
public:
explicit AbstractDockItem(QWidget *parent = 0);
virtual ~AbstractDockItem() = 0;
virtual ~AbstractDockItem(){}
virtual QWidget * getContents() = 0;

5
dde-dock/src/dockplugininterface.h Normal file → Executable file
View File

@ -4,12 +4,11 @@
#include <QObject>
#include "abstractdockitem.h"
class DockPluginInterface : public QObject
class DockPluginInterface
{
Q_OBJECT
public:
virtual ~DockPluginInterface() {}
virtual QList<AbstractDockItem*> items(){}
virtual QList<AbstractDockItem*> items() = 0;
};
QT_BEGIN_NAMESPACE