From 7042c3560ffa1397303b4bfdece509f5932f6118 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 15:43:12 +0800 Subject: [PATCH] add disk item Change-Id: Ia59042410c24e1e33469fa4db919884ec976965b --- plugins/disk-mount/disk-mount.pro | 8 +- plugins/disk-mount/diskcontrolitem.cpp | 93 ++++++++++++++++++ plugins/disk-mount/diskcontrolitem.h | 33 +++++++ plugins/disk-mount/diskcontrolwidget.cpp | 25 ++++- plugins/disk-mount/diskcontrolwidget.h | 3 + plugins/disk-mount/resources.qrc | 3 + .../disk-mount/resources/unmount-hover.png | Bin 0 -> 449 bytes .../disk-mount/resources/unmount-normal.png | Bin 0 -> 497 bytes .../disk-mount/resources/unmount-press.png | Bin 0 -> 493 bytes 9 files changed, 161 insertions(+), 4 deletions(-) create mode 100644 plugins/disk-mount/diskcontrolitem.cpp create mode 100644 plugins/disk-mount/diskcontrolitem.h create mode 100644 plugins/disk-mount/resources/unmount-hover.png create mode 100644 plugins/disk-mount/resources/unmount-normal.png create mode 100644 plugins/disk-mount/resources/unmount-press.png diff --git a/plugins/disk-mount/disk-mount.pro b/plugins/disk-mount/disk-mount.pro index 6a06753f3..61b23de7f 100644 --- a/plugins/disk-mount/disk-mount.pro +++ b/plugins/disk-mount/disk-mount.pro @@ -4,7 +4,7 @@ include(../../interfaces/interfaces.pri) QT += widgets svg dbus TEMPLATE = lib CONFIG += plugin c++11 link_pkgconfig -PKGCONFIG += +PKGCONFIG += dtkwidget dtkbase TARGET = $$qtLibraryTarget(disk-mount) DESTDIR = $$_PRO_FILE_PWD_/../ @@ -16,7 +16,8 @@ HEADERS += \ dbus/variant/diskinfo.h \ diskcontrolwidget.h \ diskpluginitem.h \ - imageutil.h + imageutil.h \ + diskcontrolitem.h SOURCES += \ diskmountplugin.cpp \ @@ -24,7 +25,8 @@ SOURCES += \ dbus/variant/diskinfo.cpp \ diskcontrolwidget.cpp \ diskpluginitem.cpp \ - imageutil.cpp + imageutil.cpp \ + diskcontrolitem.cpp target.path = $${PREFIX}/lib/dde-dock/plugins/ INSTALLS += target diff --git a/plugins/disk-mount/diskcontrolitem.cpp b/plugins/disk-mount/diskcontrolitem.cpp new file mode 100644 index 000000000..d0fc997e6 --- /dev/null +++ b/plugins/disk-mount/diskcontrolitem.cpp @@ -0,0 +1,93 @@ +#include "diskcontrolitem.h" + +#include +#include + +DWIDGET_USE_NAMESPACE + +DiskControlItem::DiskControlItem(const DiskInfo &info, QWidget *parent) + : QWidget(parent), + + m_diskIcon(new QLabel), + m_diskName(new QLabel), + m_diskCapacity(new QLabel), + m_capacityValueBar(new QProgressBar), + m_unmountButton(new DImageButton) +{ + QIcon::setThemeName("deepin"); + + m_diskName->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + m_diskName->setStyleSheet("color:white;"); + + m_diskCapacity->setStyleSheet("color:white;"); + + m_capacityValueBar->setTextVisible(false); + m_capacityValueBar->setFixedHeight(3); + m_capacityValueBar->setStyleSheet("QProgressBar {" + "border:none;" + "background-color:rgba(255, 255, 255, .3);" + "}" + "QProgressBar::chunk {" + "background-color:blue;" + "}"); + + m_unmountButton->setNormalPic(":/icons/resources/unmount-normal.png"); + m_unmountButton->setHoverPic(":/icons/resources/unmount-hover.png"); + m_unmountButton->setPressPic(":/icons/resources/unmount-press.png"); + + QVBoxLayout *infoLayout = new QVBoxLayout; + infoLayout->addWidget(m_diskName); + infoLayout->addWidget(m_diskCapacity); + infoLayout->setSpacing(0); + infoLayout->setMargin(0); + + QHBoxLayout *unmountLayout = new QHBoxLayout; + unmountLayout->addLayout(infoLayout); + unmountLayout->addWidget(m_unmountButton); + unmountLayout->setSpacing(0); + unmountLayout->setMargin(0); + + QVBoxLayout *progressLayout = new QVBoxLayout; + progressLayout->addLayout(unmountLayout); + progressLayout->addWidget(m_capacityValueBar); + progressLayout->setSpacing(0); + progressLayout->setMargin(0); + + QHBoxLayout *centeralLayout = new QHBoxLayout; + centeralLayout->addWidget(m_diskIcon); + centeralLayout->addLayout(progressLayout); + centeralLayout->setSpacing(0); + centeralLayout->setMargin(0); + + setLayout(centeralLayout); + + updateInfo(info); +} + +void DiskControlItem::updateInfo(const DiskInfo &info) +{ + m_info = info; + + m_diskIcon->setPixmap(QIcon::fromTheme(info.m_icon).pixmap(32, 32)); + m_diskName->setText(info.m_name); + m_diskCapacity->setText(QString("%1/%2").arg(formatDiskSize(info.m_usedSize)).arg(formatDiskSize(info.m_totalSize))); + m_capacityValueBar->setMinimum(0); + m_capacityValueBar->setMaximum(info.m_totalSize); + m_capacityValueBar->setValue(info.m_usedSize); +} + +const QString DiskControlItem::formatDiskSize(const quint64 size) const +{ + const quint64 mSize = 1000; + const quint64 gSize = mSize * 1000; + const quint64 tSize = gSize * 1000; + + if (size >= tSize) + return QString::number(double(size) / tSize, 'f', 2) + 'T'; + else if (size >= gSize) + return QString::number(double(size) / gSize, 'f', 2) + "G"; + else if (size >= mSize) + return QString::number(double(size) / mSize, 'f', 1) + "M"; + else + return QString::number(size) + "K"; +} diff --git a/plugins/disk-mount/diskcontrolitem.h b/plugins/disk-mount/diskcontrolitem.h new file mode 100644 index 000000000..7670c39b0 --- /dev/null +++ b/plugins/disk-mount/diskcontrolitem.h @@ -0,0 +1,33 @@ +#ifndef DISKCONTROLITEM_H +#define DISKCONTROLITEM_H + +#include "dbus/dbusdiskmount.h" + +#include + +#include +#include +#include + +class DiskControlItem : public QWidget +{ + Q_OBJECT + +public: + explicit DiskControlItem(const DiskInfo &info, QWidget *parent = 0); + +private slots: + void updateInfo(const DiskInfo &info); + const QString formatDiskSize(const quint64 size) const; + +private: + DiskInfo m_info; + + QLabel *m_diskIcon; + QLabel *m_diskName; + QLabel *m_diskCapacity; + QProgressBar *m_capacityValueBar; + Dtk::Widget::DImageButton *m_unmountButton; +}; + +#endif // DISKCONTROLITEM_H diff --git a/plugins/disk-mount/diskcontrolwidget.cpp b/plugins/disk-mount/diskcontrolwidget.cpp index a98f80282..ca64b3f0c 100644 --- a/plugins/disk-mount/diskcontrolwidget.cpp +++ b/plugins/disk-mount/diskcontrolwidget.cpp @@ -1,11 +1,22 @@ #include "diskcontrolwidget.h" +#include "diskcontrolitem.h" + +#define MAX_HEIGHT 300 +#define WIDTH 300 DiskControlWidget::DiskControlWidget(QWidget *parent) : QScrollArea(parent), + m_centeralLayout(new QVBoxLayout), + m_centeralWidget(new QWidget), + m_diskInter(new DBusDiskMount(this)) { - setFixedWidth(300); + m_centeralWidget->setLayout(m_centeralLayout); + m_centeralWidget->setFixedWidth(WIDTH); + + setWidget(m_centeralWidget); + setFixedWidth(WIDTH); setFrameStyle(QFrame::NoFrame); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); @@ -21,4 +32,16 @@ void DiskControlWidget::diskListChanged() m_diskInfoList = m_diskInter->diskList(); emit diskCountChanged(m_diskInfoList.count()); + + for (auto info : m_diskInfoList) + { + DiskControlItem *item = new DiskControlItem(info, this); + m_centeralLayout->addWidget(item); + } + + const int contentHeight = m_diskInfoList.count() * 70; + const int maxHeight = std::min(contentHeight, MAX_HEIGHT); + + m_centeralWidget->setFixedHeight(contentHeight); + setFixedHeight(maxHeight); } diff --git a/plugins/disk-mount/diskcontrolwidget.h b/plugins/disk-mount/diskcontrolwidget.h index d5d3a7fc2..bc4e908a3 100644 --- a/plugins/disk-mount/diskcontrolwidget.h +++ b/plugins/disk-mount/diskcontrolwidget.h @@ -4,6 +4,7 @@ #include "dbus/dbusdiskmount.h" #include +#include class DiskControlWidget : public QScrollArea { @@ -19,6 +20,8 @@ private slots: void diskListChanged(); private: + QVBoxLayout *m_centeralLayout; + QWidget *m_centeralWidget; DBusDiskMount *m_diskInter; DiskInfoList m_diskInfoList; diff --git a/plugins/disk-mount/resources.qrc b/plugins/disk-mount/resources.qrc index 835a0a9be..33c6c2d3c 100644 --- a/plugins/disk-mount/resources.qrc +++ b/plugins/disk-mount/resources.qrc @@ -2,5 +2,8 @@ resources/icon-small.svg resources/icon.svg + resources/unmount-press.png + resources/unmount-normal.png + resources/unmount-hover.png diff --git a/plugins/disk-mount/resources/unmount-hover.png b/plugins/disk-mount/resources/unmount-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..863e17ac03dfed09eee3213abce398b5d6c219e2 GIT binary patch literal 449 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc0wmQNuC@UwmUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^> z;_2(k{(xPW%SycQqqjCt=%lBMV~EE2sgpPI9x@Pct=G8}Xuwdtfl<`AtH<#upGb%4 zB_)-x1!tHhDqUQ<$e35ehO6bHD&wKmHP6@o`29zj)#Ie*iVqc9Ttz{pii?-|`lh+| z@y@^T;GUEA?xJm%zAv1nTKsO=WZU%#d*7;bmY&YmD!OcCI8nt-#@AllHRRq5*89Pa zw+MuWtUIG4Hu198j{q5usLglVZ0A2Py_T=%ca~x16^p6sOD{PKO!NEg7=Ndn{hqt; zt?wxs{bm0xegZwETH+c}l9E`GYL#4+3Zxi}3=GY5 z4a{{7Ekg_qtV}JejEuDnEUXL+0_PTop=ij>PsvQH#H~T$!0A^&4Gf;HelF{r5}E*y CaGZJo literal 0 HcmV?d00001 diff --git a/plugins/disk-mount/resources/unmount-normal.png b/plugins/disk-mount/resources/unmount-normal.png new file mode 100644 index 0000000000000000000000000000000000000000..77feec2ea7b4a1ae0bb8217dee61d0d42ebfb4da GIT binary patch literal 497 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc0wmQNuC@UwmUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^> z;_2(k{(xPW%SycQqqjCt=%=TPV~EE2sgpPQ9X1eX+rK*`=}gEoo2Jh~H&@%Z+;8Wd z%2>9@!$(6QPEpJwr{j&FlcYluN1DRcH)2bl&i`}2)^5K4wg*pzc-neIBwlQYklY^m zF~aZUqzK!oTNqzV5oN7ky>ME7K!a?~6XgO{Z3foq??ZM!Q~K0;+A-EivURP^3FGa7 zYf3tk7HRJ(WIe#E?^x0q=yT<+n;m0Hig0Px6rBxQ_x#$qw^%a8NcHQp&fgmhE1#U3 z9dbufUFO`Hr Bv?~Ar literal 0 HcmV?d00001 diff --git a/plugins/disk-mount/resources/unmount-press.png b/plugins/disk-mount/resources/unmount-press.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e0692cd9b6a2d234b8d343dd249ca3acb8b03c GIT binary patch literal 493 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc0wmQNuC@UwmUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^> z;_2(k{(xPW%SycQqqjCt=&PrTV~EE2sgn);m<yO zDABKvH*A-SL`&PO%NZMm92nJ%&g&(b@-{fFP|MTTF^+5JGI{aOt!1+R&u6yXrjDYM zZ4*x$GvxnKxoGKT7+K!GiCN&h(d#Q3sZQ~!vd_0Y)jT=HOYo$)d}i{dMZHTV6ddn4 z{UfwZJH_D4i=C3*wldET|E+i-T0V902OC7#SFv=^B{p8d`=J w8d#ZHSQ!~>8(3Hw7zEBO4nxt9o1c=IR*74K!hzGTfEpM)UHx3vIVCg!00qUXoB#j- literal 0 HcmV?d00001