mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
add system tray plugin tips widget
Change-Id: Ibc146056d31ec8e31258e5bef596e791023cf777
This commit is contained in:
parent
6a79740bd1
commit
60b0600284
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
28
plugins/system-tray/tipswidget.cpp
Normal file
28
plugins/system-tray/tipswidget.cpp
Normal 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);
|
||||
}
|
22
plugins/system-tray/tipswidget.h
Normal file
22
plugins/system-tray/tipswidget.h
Normal 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
|
Loading…
x
Reference in New Issue
Block a user