┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGregor Mi <[email protected]>2015-01-12 16:18:50 +0100
committerGregor Mi <[email protected]>2015-01-12 16:18:50 +0100
commit088b5160576c8ed317619855a4c9dc19a69d025b (patch)
tree888579e40929cf868f5252ce08590494085cbab7 /src
parent39b77e9861c1318bff1a26627dde3fd1c9c71861 (diff)
Add disk usage statistics menu to SpaceInfo widget in the status bar:
the menu has the following entries: 1. Filelight location 2. Filelight device 3. Filelight 4. KDiskFree KService is used to find the applications and display proper translations. KRun is used to run the applications. REVIEW: 121478 CHANGELOG: Add a menu on left-click on the SpaceInfo widget in the status bar to show Disk Usage statistics.
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/statusbar/spaceinfotoolsmenu.cpp103
-rw-r--r--src/statusbar/spaceinfotoolsmenu.h41
-rw-r--r--src/statusbar/statusbarspaceinfo.cpp11
-rw-r--r--src/statusbar/statusbarspaceinfo.h2
5 files changed, 158 insertions, 0 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index f132e2844..d2ea49314 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -198,6 +198,7 @@ set(dolphin_SRCS
statusbar/dolphinstatusbar.cpp
statusbar/mountpointobserver.cpp
statusbar/mountpointobservercache.cpp
+ statusbar/spaceinfotoolsmenu.cpp
statusbar/spaceinfoobserver.cpp
statusbar/statusbarspaceinfo.cpp
views/zoomlevelinfo.cpp
diff --git a/src/statusbar/spaceinfotoolsmenu.cpp b/src/statusbar/spaceinfotoolsmenu.cpp
new file mode 100644
index 000000000..bd3d648c9
--- /dev/null
+++ b/src/statusbar/spaceinfotoolsmenu.cpp
@@ -0,0 +1,103 @@
+/***************************************************************************
+ * Copyright (C) 2014 by Gregor Mi <[email protected]> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+#include "spaceinfotoolsmenu.h"
+
+#include <QAction>
+#include <QUrl>
+
+#include <KMountPoint>
+#include <KLocalizedString>
+#include <KRun>
+#include <KService>
+
+SpaceInfoToolsMenu::SpaceInfoToolsMenu(QWidget* parent, QUrl url)
+ : QMenu(parent)
+{
+ const QString notInstalled = " [" + i18nc("@action:inmenu", "not installed") + "]";
+
+ // find service
+ //
+ const auto filelightService = KService::serviceByDesktopName("filelight");
+ if (filelightService && filelightService->isApplication()) {
+ const auto filelightIcon = QIcon::fromTheme(filelightService->icon());
+
+ if (url.isLocalFile()) { // 2015-01-12: Filelight can handle FTP connections but KIO/kioexec cannot (bug or feature?), so we don't offer it in this case
+ // add action and connect signals
+ //
+ const auto startFilelightDirectoryAction = addAction(filelightService->genericName() + " - "
+ + i18nc("@action:inmenu", "current folder"));
+ startFilelightDirectoryAction->setIcon(filelightIcon);
+
+ connect(startFilelightDirectoryAction, &QAction::triggered, this, [filelightService, url](bool) {
+ KRun::runService(*filelightService, { url }, nullptr);
+ });
+ }
+
+ if (url.isLocalFile()) { // makes no sense for non-local URLs (e.g. FTP server), so we don't offer it in this case
+ // add action and connect signals
+ //
+ const auto startFilelightDeviceAction = addAction(filelightService->genericName() + " - "
+ + i18nc("@action:inmenu", "current device"));
+ startFilelightDeviceAction->setIcon(filelightIcon);
+
+ connect(startFilelightDeviceAction, &QAction::triggered, this, [filelightService, url](bool) {
+ KMountPoint::Ptr mountPoint = KMountPoint::currentMountPoints().findByPath(url.toLocalFile());
+ KRun::runService(*filelightService, { mountPoint->mountPoint() }, nullptr);
+ });
+ }
+
+ // add action and connect signals
+ //
+ const auto startFilelightAllDevicesAction = addAction(filelightService->genericName() + " - "
+ + i18nc("@action:inmenu", "all devices"));
+ startFilelightAllDevicesAction->setIcon(filelightIcon);
+
+ connect(startFilelightAllDevicesAction, &QAction::triggered, this, [filelightService](bool) {
+ KRun::runService(*filelightService, { }, nullptr);
+ });
+ } else {
+ const auto startFilelightDirectoryAction = addAction("Filelight" + notInstalled);
+ startFilelightDirectoryAction->setEnabled(false);
+ }
+
+ // find service
+ //
+ const auto kdiskfreeService = KService::serviceByDesktopName("kdf");
+ if (kdiskfreeService && kdiskfreeService->isApplication()) {
+ //
+ // add action and connect signals
+ //
+ const auto startKDiskFreeAction = addAction(kdiskfreeService->genericName());
+ startKDiskFreeAction->setIcon(QIcon::fromTheme(kdiskfreeService->icon()));
+
+ connect(startKDiskFreeAction, &QAction::triggered, this, [kdiskfreeService](bool) {
+ KRun::runService(*kdiskfreeService, { }, nullptr);
+ });
+ } else {
+ const auto startKDiskFreeAction = addAction("KDiskFree" + notInstalled);
+ startKDiskFreeAction->setEnabled(false);
+ }
+}
+
+SpaceInfoToolsMenu::~SpaceInfoToolsMenu()
+{
+}
+
+
diff --git a/src/statusbar/spaceinfotoolsmenu.h b/src/statusbar/spaceinfotoolsmenu.h
new file mode 100644
index 000000000..3ca2e184f
--- /dev/null
+++ b/src/statusbar/spaceinfotoolsmenu.h
@@ -0,0 +1,41 @@
+/***************************************************************************
+ * Copyright (C) 2014 by Gregor Mi <[email protected]> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+#ifndef SPACEINFOTOOLSMENU_H
+#define SPACEINFOTOOLSMENU_H
+
+#include <QObject>
+#include <QMenu>
+
+class QWidget;
+class QUrl;
+
+/**
+ * A menu with tools that help to find out more about free disk space for the given url.
+ */
+class SpaceInfoToolsMenu : public QMenu
+{
+ Q_OBJECT
+
+public:
+ explicit SpaceInfoToolsMenu(QWidget* parent, QUrl url);
+ virtual ~SpaceInfoToolsMenu();
+};
+
+#endif
diff --git a/src/statusbar/statusbarspaceinfo.cpp b/src/statusbar/statusbarspaceinfo.cpp
index 046cbbb23..127641e60 100644
--- a/src/statusbar/statusbarspaceinfo.cpp
+++ b/src/statusbar/statusbarspaceinfo.cpp
@@ -21,6 +21,9 @@
#include "statusbarspaceinfo.h"
#include "spaceinfoobserver.h"
+#include "spaceinfotoolsmenu.h"
+
+#include <QMouseEvent>
#include <KLocalizedString>
#include <KIO/Job>
@@ -65,6 +68,14 @@ void StatusBarSpaceInfo::hideEvent(QHideEvent* event)
KCapacityBar::hideEvent(event);
}
+void StatusBarSpaceInfo::mousePressEvent(QMouseEvent* event)
+{
+ if (event->button() == Qt::LeftButton) {
+ SpaceInfoToolsMenu spaceInfoToolsMenu(this, m_url);
+ spaceInfoToolsMenu.exec(QCursor::pos());
+ }
+}
+
void StatusBarSpaceInfo::slotValuesChanged()
{
Q_ASSERT(m_observer);
diff --git a/src/statusbar/statusbarspaceinfo.h b/src/statusbar/statusbarspaceinfo.h
index 5d571beba..2ba7cbf0b 100644
--- a/src/statusbar/statusbarspaceinfo.h
+++ b/src/statusbar/statusbarspaceinfo.h
@@ -27,6 +27,7 @@
class QHideEvent;
class QShowEvent;
+class QMouseEvent;
class SpaceInfoObserver;
@@ -48,6 +49,7 @@ public:
protected:
void showEvent(QShowEvent* event) Q_DECL_OVERRIDE;
void hideEvent(QHideEvent* event) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent* event) Q_DECL_OVERRIDE;
private slots:
void slotValuesChanged();