disk mount plugin add context menu

Change-Id: I60c005627ee9375b87ff547abc05f61d0f53fb62
This commit is contained in:
石博文 2016-09-22 14:31:38 +08:00
parent c42fd64d58
commit de84257ede
Notes: Deepin Code Review 2016-09-22 14:40:51 +08:00
Verified+1: Anonymous Coward #1000004
Code-Review+2: 石博文 <sbw@sbw.so>
Submitted-by: 石博文 <sbw@sbw.so>
Submitted-at: Thu, 22 Sep 2016 14:40:51 +0800
Reviewed-on: https://cr.deepin.io/16259
Project: dde/dde-dock
Branch: refs/heads/master
6 changed files with 60 additions and 0 deletions

View File

@ -27,6 +27,12 @@ DiskControlWidget::DiskControlWidget(QWidget *parent)
QMetaObject::invokeMethod(this, "diskListChanged", Qt::QueuedConnection);
}
void DiskControlWidget::unmountAll()
{
for (auto disk : m_diskInfoList)
unmountDisk(disk.m_id);
}
void DiskControlWidget::diskListChanged()
{
m_diskInfoList = m_diskInter->diskList();

View File

@ -13,6 +13,8 @@ class DiskControlWidget : public QScrollArea
public:
explicit DiskControlWidget(QWidget *parent = 0);
void unmountAll();
signals:
void diskCountChanged(const int count) const;

View File

@ -1,5 +1,8 @@
#include "diskmountplugin.h"
#define OPEN "open"
#define UNMOUNT_ALL "unmount_all"
DiskMountPlugin::DiskMountPlugin(QObject *parent)
: QObject(parent),
@ -14,6 +17,8 @@ DiskMountPlugin::DiskMountPlugin(QObject *parent)
m_tipsLabel->setText(tr("Disk"));
m_tipsLabel->setStyleSheet("color:white;"
"padding:5px 10px;");
connect(m_diskPluginItem, &DiskPluginItem::requestContextMenu, [this] {m_proxyInter->requestContextMenu(this, QString());});
}
const QString DiskMountPlugin::pluginName() const
@ -50,6 +55,44 @@ QWidget *DiskMountPlugin::itemPopupApplet(const QString &itemKey)
return m_diskControlApplet;
}
const QString DiskMountPlugin::itemContextMenu(const QString &itemKey)
{
Q_UNUSED(itemKey);
QList<QVariant> items;
items.reserve(2);
QMap<QString, QVariant> open;
open["itemId"] = OPEN;
open["itemText"] = tr("Open");
open["isActive"] = true;
items.push_back(open);
QMap<QString, QVariant> unmountAll;
unmountAll["itemId"] = UNMOUNT_ALL;
unmountAll["itemText"] = tr("Unmount all");
unmountAll["isActive"] = true;
items.push_back(unmountAll);
QMap<QString, QVariant> menu;
menu["items"] = items;
menu["checkableMenu"] = false;
menu["singleCheck"] = false;
return QJsonDocument::fromVariant(menu).toJson();
}
void DiskMountPlugin::invokedMenuItem(const QString &itemKey, const QString &menuId, const bool checked)
{
Q_UNUSED(itemKey)
Q_UNUSED(checked)
if (menuId == OPEN)
QProcess::startDetached("gvfs-open", QStringList() << QDir::homePath());
else if (menuId == UNMOUNT_ALL)
m_diskControlApplet->unmountAll();
}
void DiskMountPlugin::initCompoments()
{
m_diskControlApplet = new DiskControlWidget;

View File

@ -23,6 +23,9 @@ public:
QWidget *itemTipsWidget(const QString &itemKey);
QWidget *itemPopupApplet(const QString &itemKey);
const QString itemContextMenu(const QString &itemKey);
void invokedMenuItem(const QString &itemKey, const QString &menuId, const bool checked);
private:
void initCompoments();

View File

@ -42,7 +42,10 @@ void DiskPluginItem::mousePressEvent(QMouseEvent *e)
const QPoint p(e->pos() - rect().center());
if (p.manhattanLength() < std::min(width(), height()) * 0.8 * 0.5)
{
emit requestContextMenu();
return;
}
QWidget::mousePressEvent(e);
}

View File

@ -13,6 +13,9 @@ class DiskPluginItem : public QWidget
public:
explicit DiskPluginItem(QWidget *parent = 0);
signals:
void requestContextMenu() const;
public slots:
void setDockDisplayMode(const Dock::DisplayMode mode);