add system tray plugin tips widget

Change-Id: Ibc146056d31ec8e31258e5bef596e791023cf777
This commit is contained in:
石博文 2016-07-11 10:19:21 +08:00 committed by Hualet Wang
parent 6a79740bd1
commit 60b0600284
5 changed files with 101 additions and 3 deletions

View File

@ -14,13 +14,15 @@ HEADERS += \
systemtrayplugin.h \
dbus/dbustraymanager.h \
traywidget.h \
fashiontrayitem.h
fashiontrayitem.h \
tipswidget.h
SOURCES += \
systemtrayplugin.cpp \
dbus/dbustraymanager.cpp \
traywidget.cpp \
fashiontrayitem.cpp
fashiontrayitem.cpp \
tipswidget.cpp
target.path = $${PREFIX}/lib/dde-dock/plugins/
INSTALLS += target

View File

@ -8,7 +8,8 @@
SystemTrayPlugin::SystemTrayPlugin(QObject *parent)
: QObject(parent),
m_trayInter(new DBusTrayManager(this))
m_trayInter(new DBusTrayManager(this)),
m_tipsWidget(new TipsWidget)
{
m_fashionItem = new FashionTrayItem;
}
@ -43,6 +44,13 @@ PluginsItemInterface::ItemType SystemTrayPlugin::pluginType(const QString &itemK
return Complex;
}
PluginsItemInterface::ItemType SystemTrayPlugin::tipsType(const QString &itemKey)
{
Q_UNUSED(itemKey);
return Complex;
}
QWidget *SystemTrayPlugin::itemWidget(const QString &itemKey)
{
if (itemKey == FASHION_MODE_ITEM)
@ -53,6 +61,30 @@ QWidget *SystemTrayPlugin::itemWidget(const QString &itemKey)
return m_trayList[trayWinId];
}
QWidget *SystemTrayPlugin::itemTipsWidget(const QString &itemKey)
{
// only display tips widget on fashion mode
if (itemKey != FASHION_MODE_ITEM)
return nullptr;
// not have other tray icon
if (m_trayList.size() < 2)
return nullptr;
updateTipsContent();
return m_tipsWidget;
}
void SystemTrayPlugin::updateTipsContent()
{
auto trayList = m_trayList.values();
trayList.removeOne(m_fashionItem->activeTray());
m_tipsWidget->clear();
m_tipsWidget->addWidgets(trayList);
}
void SystemTrayPlugin::trayAdded(const quint32 winId)
{
if (m_trayList.contains(winId))
@ -83,6 +115,9 @@ void SystemTrayPlugin::trayRemoved(const quint32 winId)
m_fashionItem->setActiveTray(nullptr);
else
m_fashionItem->setActiveTray(m_trayList.values().last());
if (m_tipsWidget->isVisible())
updateTipsContent();
}
void SystemTrayPlugin::trayChanged(const quint32 winId)
@ -91,6 +126,9 @@ void SystemTrayPlugin::trayChanged(const quint32 winId)
return;
m_fashionItem->setActiveTray(m_trayList[winId]);
if (m_tipsWidget->isVisible())
updateTipsContent();
}
void SystemTrayPlugin::switchToMode(const Dock::DisplayMode mode)

View File

@ -3,6 +3,7 @@
#include "pluginsiteminterface.h"
#include "traywidget.h"
#include "tipswidget.h"
#include "dbus/dbustraymanager.h"
class FashionTrayItem;
@ -19,8 +20,13 @@ public:
void init(PluginProxyInterface *proxyInter);
void displayModeChanged(const Dock::DisplayMode mode);
ItemType pluginType(const QString &itemKey);
ItemType tipsType(const QString &itemKey);
QWidget *itemWidget(const QString &itemKey);
QWidget *itemTipsWidget(const QString &itemKey);
private:
void updateTipsContent();
private slots:
void trayAdded(const quint32 winId);
@ -32,6 +38,8 @@ private:
DBusTrayManager *m_trayInter;
FashionTrayItem *m_fashionItem;
QMap<quint32, TrayWidget *> m_trayList;
TipsWidget *m_tipsWidget;
};
#endif // SYSTEMTRAYPLUGIN_H

View File

@ -0,0 +1,28 @@
#include "tipswidget.h"
#include "traywidget.h"
TipsWidget::TipsWidget(QWidget *parent)
: QWidget(parent),
m_mainLayout(new QHBoxLayout)
{
setLayout(m_mainLayout);
setFixedHeight(32);
}
void TipsWidget::clear()
{
QLayoutItem *item = nullptr;
while ((item = m_mainLayout->takeAt(0)) != nullptr)
{
if (item->widget())
item->widget()->setParent(nullptr);
delete item;
}
}
void TipsWidget::addWidgets(QList<TrayWidget *> widgets)
{
for (auto w : widgets)
m_mainLayout->addWidget(w);
setFixedWidth(widgets.size() * 20 + 20);
}

View File

@ -0,0 +1,22 @@
#ifndef TIPSWIDGET_H
#define TIPSWIDGET_H
#include <QWidget>
#include <QBoxLayout>
class TrayWidget;
class TipsWidget : public QWidget
{
Q_OBJECT
public:
explicit TipsWidget(QWidget *parent = 0);
void clear();
void addWidgets(QList<TrayWidget *> widgets);
private:
QBoxLayout *m_mainLayout;
};
#endif // TIPSWIDGET_H