From 9cb9016933169defeaf6161c64b9b085e0f67f04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E5=8D=9A=E6=96=87?= Date: Wed, 20 Jul 2016 16:30:56 +0800 Subject: [PATCH] disk plugin support unmount Change-Id: If1e286bfb9f88c4fa268d7ab30b027da95e37452 --- frame/dbus/dbusxmousearea.h | 2 +- frame/item/dockitem.cpp | 13 +++++++++++++ frame/item/dockitem.h | 3 +++ frame/item/launcheritem.cpp | 2 +- frame/util/dockpopupwindow.cpp | 9 +++++++-- frame/util/dockpopupwindow.h | 2 +- plugins/disk-mount/dbus/dbusdiskmount.h | 4 ++-- plugins/disk-mount/diskcontrolitem.cpp | 4 +++- plugins/disk-mount/diskcontrolitem.h | 3 +++ plugins/disk-mount/diskcontrolwidget.cpp | 24 ++++++++++++++++++++++-- plugins/disk-mount/diskcontrolwidget.h | 1 + 11 files changed, 57 insertions(+), 10 deletions(-) diff --git a/frame/dbus/dbusxmousearea.h b/frame/dbus/dbusxmousearea.h index 169ccffcf..66372cad1 100644 --- a/frame/dbus/dbusxmousearea.h +++ b/frame/dbus/dbusxmousearea.h @@ -84,7 +84,7 @@ public Q_SLOTS: // METHODS } Q_SIGNALS: // SIGNALS - void ButtonRelease(int in0, int in1, int in2, const QString &in3); + void ButtonRelease(int button, int x, int y, const QString &id); // begin property changed signals }; diff --git a/frame/item/dockitem.cpp b/frame/item/dockitem.cpp index 9c2bfb92e..f0fbc0d9d 100644 --- a/frame/item/dockitem.cpp +++ b/frame/item/dockitem.cpp @@ -14,6 +14,7 @@ DockItem::DockItem(const ItemType type, QWidget *parent) : QWidget(parent), m_type(type), m_hover(false), + m_popupShown(false), m_popupTipsDelayTimer(new QTimer(this)), @@ -32,6 +33,12 @@ DockItem::DockItem(const ItemType type, QWidget *parent) connect(m_popupTipsDelayTimer, &QTimer::timeout, this, &DockItem::showHoverTips); } +DockItem::~DockItem() +{ + if (m_popupShown) + popupWindowAccept(); +} + void DockItem::setDockPosition(const Position side) { DockPosition = side; @@ -82,7 +89,10 @@ void DockItem::leaveEvent(QEvent *e) // auto hide if popup is not model window if (!PopupWindow->model()) + { + m_popupShown = false; PopupWindow->hide(); + } update(); @@ -158,6 +168,8 @@ void DockItem::showHoverTips() void DockItem::showPopupWindow(QWidget * const content, const bool model) { + m_popupShown = true; + if (model) emit requestWindowAutoHide(false); @@ -191,6 +203,7 @@ void DockItem::popupWindowAccept() disconnect(PopupWindow.get(), &DockPopupWindow::accept, this, &DockItem::popupWindowAccept); + m_popupShown = false; PopupWindow->hide(); emit requestWindowAutoHide(true); diff --git a/frame/item/dockitem.h b/frame/item/dockitem.h index 0bb300215..147ab801c 100644 --- a/frame/item/dockitem.h +++ b/frame/item/dockitem.h @@ -25,6 +25,8 @@ public: public: explicit DockItem(const ItemType type, QWidget *parent = nullptr); + ~DockItem(); + static void setDockPosition(const Position side); static void setDockDisplayMode(const DisplayMode mode); @@ -56,6 +58,7 @@ protected: protected: ItemType m_type; bool m_hover; + bool m_popupShown; QTimer *m_popupTipsDelayTimer; diff --git a/frame/item/launcheritem.cpp b/frame/item/launcheritem.cpp index 5110b85db..890bef529 100644 --- a/frame/item/launcheritem.cpp +++ b/frame/item/launcheritem.cpp @@ -12,7 +12,7 @@ LauncherItem::LauncherItem(QWidget *parent) m_tips(new QLabel(this)) { m_tips->setVisible(false); - m_tips->setText("Launcher"); + m_tips->setText(tr("Launcher")); m_tips->setStyleSheet("color:white;" "padding:5px 10px;"); } diff --git a/frame/util/dockpopupwindow.cpp b/frame/util/dockpopupwindow.cpp index 2f688f8de..4fe991e2a 100644 --- a/frame/util/dockpopupwindow.cpp +++ b/frame/util/dockpopupwindow.cpp @@ -61,12 +61,17 @@ void DockPopupWindow::mousePressEvent(QMouseEvent *e) // m_acceptDelayTimer->start(); } -void DockPopupWindow::globalMouseRelease() +void DockPopupWindow::globalMouseRelease(int button, int x, int y, const QString &id) { + Q_UNUSED(button); + + if (id != m_mouseAreaKey) + return; + Q_ASSERT(m_model); const QRect rect = QRect(pos(), size()); - const QPoint pos = QCursor::pos(); + const QPoint pos = QPoint(x, y); if (rect.contains(pos)) return; diff --git a/frame/util/dockpopupwindow.h b/frame/util/dockpopupwindow.h index 2f7f0531f..226c03a3d 100644 --- a/frame/util/dockpopupwindow.h +++ b/frame/util/dockpopupwindow.h @@ -26,7 +26,7 @@ protected: void mousePressEvent(QMouseEvent *e); private slots: - void globalMouseRelease(); + void globalMouseRelease(int button, int x, int y, const QString &id); private: bool m_model; diff --git a/plugins/disk-mount/dbus/dbusdiskmount.h b/plugins/disk-mount/dbus/dbusdiskmount.h index 7a121f35d..b14709455 100644 --- a/plugins/disk-mount/dbus/dbusdiskmount.h +++ b/plugins/disk-mount/dbus/dbusdiskmount.h @@ -89,10 +89,10 @@ public Q_SLOTS: // METHODS return asyncCallWithArgumentList(QStringLiteral("QueryDisk"), argumentList); } - inline QDBusPendingReply<> Unmount(const QString &in0) + inline QDBusPendingReply<> Unmount(const QString &diskId) { QList argumentList; - argumentList << QVariant::fromValue(in0); + argumentList << QVariant::fromValue(diskId); return asyncCallWithArgumentList(QStringLiteral("Unmount"), argumentList); } diff --git a/plugins/disk-mount/diskcontrolitem.cpp b/plugins/disk-mount/diskcontrolitem.cpp index d0fc997e6..38243334b 100644 --- a/plugins/disk-mount/diskcontrolitem.cpp +++ b/plugins/disk-mount/diskcontrolitem.cpp @@ -28,7 +28,7 @@ DiskControlItem::DiskControlItem(const DiskInfo &info, QWidget *parent) "background-color:rgba(255, 255, 255, .3);" "}" "QProgressBar::chunk {" - "background-color:blue;" + "background-color:white;" "}"); m_unmountButton->setNormalPic(":/icons/resources/unmount-normal.png"); @@ -61,6 +61,8 @@ DiskControlItem::DiskControlItem(const DiskInfo &info, QWidget *parent) setLayout(centeralLayout); + connect(m_unmountButton, &DImageButton::clicked, [this] {emit requestUnmount(m_info.m_id);}); + updateInfo(info); } diff --git a/plugins/disk-mount/diskcontrolitem.h b/plugins/disk-mount/diskcontrolitem.h index 7670c39b0..c2bd17d68 100644 --- a/plugins/disk-mount/diskcontrolitem.h +++ b/plugins/disk-mount/diskcontrolitem.h @@ -16,6 +16,9 @@ class DiskControlItem : public QWidget public: explicit DiskControlItem(const DiskInfo &info, QWidget *parent = 0); +signals: + void requestUnmount(const QString &diskId) const; + private slots: void updateInfo(const DiskInfo &info); const QString formatDiskSize(const quint64 size) const; diff --git a/plugins/disk-mount/diskcontrolwidget.cpp b/plugins/disk-mount/diskcontrolwidget.cpp index ca64b3f0c..4d301b7b3 100644 --- a/plugins/disk-mount/diskcontrolwidget.cpp +++ b/plugins/disk-mount/diskcontrolwidget.cpp @@ -31,17 +31,37 @@ void DiskControlWidget::diskListChanged() { m_diskInfoList = m_diskInter->diskList(); - emit diskCountChanged(m_diskInfoList.count()); + while (QLayoutItem *item = m_centeralLayout->takeAt(0)) + { + delete item->widget(); + delete item; + } + int mountedCount = 0; for (auto info : m_diskInfoList) { + if (info.m_mountPoint.isEmpty()) + continue; + else + ++mountedCount; + DiskControlItem *item = new DiskControlItem(info, this); + + connect(item, &DiskControlItem::requestUnmount, this, &DiskControlWidget::unmountDisk); + m_centeralLayout->addWidget(item); } - const int contentHeight = m_diskInfoList.count() * 70; + emit diskCountChanged(mountedCount); + + const int contentHeight = mountedCount * 70; const int maxHeight = std::min(contentHeight, MAX_HEIGHT); m_centeralWidget->setFixedHeight(contentHeight); setFixedHeight(maxHeight); } + +void DiskControlWidget::unmountDisk(const QString &diskId) const +{ + m_diskInter->Unmount(diskId); +} diff --git a/plugins/disk-mount/diskcontrolwidget.h b/plugins/disk-mount/diskcontrolwidget.h index bc4e908a3..f010b27bf 100644 --- a/plugins/disk-mount/diskcontrolwidget.h +++ b/plugins/disk-mount/diskcontrolwidget.h @@ -18,6 +18,7 @@ signals: private slots: void diskListChanged(); + void unmountDisk(const QString &diskId) const; private: QVBoxLayout *m_centeralLayout;