From 6cd10fa3cf8dcd183fd9676d1b6d6849db87931e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E5=8D=9A=E6=96=87?= Date: Tue, 19 Jul 2016 11:21:29 +0800 Subject: [PATCH] add disk mount plugin Change-Id: Ie84fcda69aa50b67a8c3d5a4de26198bf2db0cca --- frame/item/pluginsitem.cpp | 5 +- plugins/disk-mount/disk-mount.pro | 9 +++- plugins/disk-mount/diskcontrolwidget.cpp | 19 +++++++ plugins/disk-mount/diskcontrolwidget.h | 27 ++++++++++ plugins/disk-mount/diskmountplugin.cpp | 45 +++++++++++++++-- plugins/disk-mount/diskmountplugin.h | 17 ++++++- plugins/disk-mount/diskpluginitem.cpp | 47 ++++++++++++++++++ plugins/disk-mount/diskpluginitem.h | 33 ++++++++++++ plugins/disk-mount/resources.qrc | 6 +++ .../resources/{icon_16.png => icon_small.png} | Bin 10 files changed, 199 insertions(+), 9 deletions(-) create mode 100644 plugins/disk-mount/diskcontrolwidget.cpp create mode 100644 plugins/disk-mount/diskcontrolwidget.h create mode 100644 plugins/disk-mount/diskpluginitem.cpp create mode 100644 plugins/disk-mount/diskpluginitem.h create mode 100644 plugins/disk-mount/resources.qrc rename plugins/disk-mount/resources/{icon_16.png => icon_small.png} (100%) diff --git a/frame/item/pluginsitem.cpp b/frame/item/pluginsitem.cpp index 7bc2c651f..ac5b3dfe8 100644 --- a/frame/item/pluginsitem.cpp +++ b/frame/item/pluginsitem.cpp @@ -22,13 +22,14 @@ PluginsItem::PluginsItem(PluginsItemInterface* const pluginInter, const QString { Q_ASSERT(m_centeralWidget); - m_centeralWidget->installEventFilter(this); - QBoxLayout *hLayout = new QHBoxLayout; hLayout->addWidget(m_centeralWidget); hLayout->setSpacing(0); hLayout->setMargin(0); + m_centeralWidget->installEventFilter(this); + m_centeralWidget->setVisible(true); + setLayout(hLayout); setAttribute(Qt::WA_TranslucentBackground); } diff --git a/plugins/disk-mount/disk-mount.pro b/plugins/disk-mount/disk-mount.pro index e70409fe2..3a8fd4d61 100644 --- a/plugins/disk-mount/disk-mount.pro +++ b/plugins/disk-mount/disk-mount.pro @@ -13,14 +13,19 @@ DISTFILES += disk-mount.json HEADERS += \ diskmountplugin.h \ dbus/dbusdiskmount.h \ - dbus/variant/diskinfo.h + dbus/variant/diskinfo.h \ + diskcontrolwidget.h \ + diskpluginitem.h SOURCES += \ diskmountplugin.cpp \ dbus/dbusdiskmount.cpp \ - dbus/variant/diskinfo.cpp + dbus/variant/diskinfo.cpp \ + diskcontrolwidget.cpp \ + diskpluginitem.cpp target.path = $${PREFIX}/lib/dde-dock/plugins/ INSTALLS += target RESOURCES += \ + resources.qrc diff --git a/plugins/disk-mount/diskcontrolwidget.cpp b/plugins/disk-mount/diskcontrolwidget.cpp new file mode 100644 index 000000000..bb5876612 --- /dev/null +++ b/plugins/disk-mount/diskcontrolwidget.cpp @@ -0,0 +1,19 @@ +#include "diskcontrolwidget.h" + +DiskControlWidget::DiskControlWidget(QWidget *parent) + : QWidget(parent), + + m_diskInter(new DBusDiskMount(this)) +{ + + connect(m_diskInter, &DBusDiskMount::DiskListChanged, this, &DiskControlWidget::diskListChanged); + + QMetaObject::invokeMethod(this, "diskListChanged", Qt::QueuedConnection); +} + +void DiskControlWidget::diskListChanged() +{ + m_diskInfoList = m_diskInter->diskList(); + + emit diskCountChanged(m_diskInfoList.count()); +} diff --git a/plugins/disk-mount/diskcontrolwidget.h b/plugins/disk-mount/diskcontrolwidget.h new file mode 100644 index 000000000..efcd4d83a --- /dev/null +++ b/plugins/disk-mount/diskcontrolwidget.h @@ -0,0 +1,27 @@ +#ifndef DISKCONTROLWIDGET_H +#define DISKCONTROLWIDGET_H + +#include "dbus/dbusdiskmount.h" + +#include + +class DiskControlWidget : public QWidget +{ + Q_OBJECT + +public: + explicit DiskControlWidget(QWidget *parent = 0); + +signals: + void diskCountChanged(const int count) const; + +private slots: + void diskListChanged(); + +private: + DBusDiskMount *m_diskInter; + + DiskInfoList m_diskInfoList; +}; + +#endif // DISKCONTROLWIDGET_H diff --git a/plugins/disk-mount/diskmountplugin.cpp b/plugins/disk-mount/diskmountplugin.cpp index 2c63bd473..5087ae69a 100644 --- a/plugins/disk-mount/diskmountplugin.cpp +++ b/plugins/disk-mount/diskmountplugin.cpp @@ -3,9 +3,13 @@ DiskMountPlugin::DiskMountPlugin(QObject *parent) : QObject(parent), - m_diskInter(new DBusDiskMount(this)) + m_pluginAdded(false), + + m_diskPluginItem(new DiskPluginItem), + m_diskControlApplet(nullptr) { - qDebug() << m_diskInter->diskList(); + m_diskPluginItem->setVisible(false); + m_diskPluginItem->setDockDisplayMode(displayMode()); } const QString DiskMountPlugin::pluginName() const @@ -16,11 +20,46 @@ const QString DiskMountPlugin::pluginName() const void DiskMountPlugin::init(PluginProxyInterface *proxyInter) { m_proxyInter = proxyInter; + + initCompoments(); } QWidget *DiskMountPlugin::itemWidget(const QString &itemKey) { Q_UNUSED(itemKey); - return nullptr; + return m_diskPluginItem; +} + +QWidget *DiskMountPlugin::itemPopupApplet(const QString &itemKey) +{ + Q_UNUSED(itemKey); + + return m_diskControlApplet; +} + +void DiskMountPlugin::initCompoments() +{ + m_diskControlApplet = new DiskControlWidget; + m_diskControlApplet->setVisible(false); + + connect(m_diskControlApplet, &DiskControlWidget::diskCountChanged, this, &DiskMountPlugin::diskCountChanged); +} + +void DiskMountPlugin::displayModeChanged(const Dock::DisplayMode mode) +{ + m_diskPluginItem->setDockDisplayMode(mode); +} + +void DiskMountPlugin::diskCountChanged(const int count) +{ + if (m_pluginAdded == bool(count)) + return; + + m_pluginAdded = bool(count); + + if (m_pluginAdded) + m_proxyInter->itemAdded(this, QString()); + else + m_proxyInter->itemRemoved(this, QString()); } diff --git a/plugins/disk-mount/diskmountplugin.h b/plugins/disk-mount/diskmountplugin.h index 4866c22fa..b0e84780b 100644 --- a/plugins/disk-mount/diskmountplugin.h +++ b/plugins/disk-mount/diskmountplugin.h @@ -2,7 +2,8 @@ #define DISKMOUNTPLUGIN_H #include "pluginsiteminterface.h" -#include "dbus/dbusdiskmount.h" +#include "diskcontrolwidget.h" +#include "diskpluginitem.h" class DiskMountPlugin : public QObject, PluginsItemInterface { @@ -17,9 +18,21 @@ public: void init(PluginProxyInterface *proxyInter); QWidget *itemWidget(const QString &itemKey); + QWidget *itemPopupApplet(const QString &itemKey); private: - DBusDiskMount *m_diskInter; + void initCompoments(); + + void displayModeChanged(const Dock::DisplayMode mode); + +private slots: + void diskCountChanged(const int count); + +private: + bool m_pluginAdded; + + DiskPluginItem *m_diskPluginItem; + DiskControlWidget *m_diskControlApplet; }; #endif // DISKMOUNTPLUGIN_H diff --git a/plugins/disk-mount/diskpluginitem.cpp b/plugins/disk-mount/diskpluginitem.cpp new file mode 100644 index 000000000..e5c47ceec --- /dev/null +++ b/plugins/disk-mount/diskpluginitem.cpp @@ -0,0 +1,47 @@ +#include "diskpluginitem.h" + +#include +#include + +DiskPluginItem::DiskPluginItem(QWidget *parent) + : QWidget(parent), + m_displayMode(Dock::Efficient) +{ +} + +void DiskPluginItem::setDockDisplayMode(const Dock::DisplayMode mode) +{ + m_displayMode = mode; + + updateIcon(); +} + +void DiskPluginItem::paintEvent(QPaintEvent *e) +{ + QWidget::paintEvent(e); + + QPainter painter(this); + painter.drawPixmap(rect().center() - m_icon.rect().center(), m_icon); +} + +void DiskPluginItem::resizeEvent(QResizeEvent *e) +{ + QWidget::resizeEvent(e); + + updateIcon(); +} + +QSize DiskPluginItem::sizeHint() const +{ + return QSize(24, 24); +} + +void DiskPluginItem::updateIcon() +{ + if (m_displayMode == Dock::Efficient) + m_icon = QPixmap(":/icons/resources/icon_small.png"); + else + m_icon = QPixmap(":/icons/resources/icon.png"); + + update(); +} diff --git a/plugins/disk-mount/diskpluginitem.h b/plugins/disk-mount/diskpluginitem.h new file mode 100644 index 000000000..ccfbba624 --- /dev/null +++ b/plugins/disk-mount/diskpluginitem.h @@ -0,0 +1,33 @@ +#ifndef DISKPLUGINITEM_H +#define DISKPLUGINITEM_H + +#include "constants.h" + +#include +#include + +class DiskPluginItem : public QWidget +{ + Q_OBJECT + +public: + explicit DiskPluginItem(QWidget *parent = 0); + +public slots: + void setDockDisplayMode(const Dock::DisplayMode mode); + +protected: + void paintEvent(QPaintEvent *e); + void resizeEvent(QResizeEvent *e); + QSize sizeHint() const; + +private: + void updateIcon(); + +private: + Dock::DisplayMode m_displayMode; + + QPixmap m_icon; +}; + +#endif // DISKPLUGINITEM_H diff --git a/plugins/disk-mount/resources.qrc b/plugins/disk-mount/resources.qrc new file mode 100644 index 000000000..154936bc0 --- /dev/null +++ b/plugins/disk-mount/resources.qrc @@ -0,0 +1,6 @@ + + + resources/icon_small.png + resources/icon.png + + diff --git a/plugins/disk-mount/resources/icon_16.png b/plugins/disk-mount/resources/icon_small.png similarity index 100% rename from plugins/disk-mount/resources/icon_16.png rename to plugins/disk-mount/resources/icon_small.png