mirror of
https://invent.kde.org/system/dolphin
synced 2024-10-05 16:19:10 +00:00
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.
This commit is contained in:
parent
39b77e9861
commit
088b516057
|
@ -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
|
||||
|
|
103
src/statusbar/spaceinfotoolsmenu.cpp
Normal file
103
src/statusbar/spaceinfotoolsmenu.cpp
Normal file
|
@ -0,0 +1,103 @@
|
|||
/***************************************************************************
|
||||
* Copyright (C) 2014 by Gregor Mi <codestruct@posteo.org> *
|
||||
* *
|
||||
* 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()
|
||||
{
|
||||
}
|
||||
|
||||
|
41
src/statusbar/spaceinfotoolsmenu.h
Normal file
41
src/statusbar/spaceinfotoolsmenu.h
Normal file
|
@ -0,0 +1,41 @@
|
|||
/***************************************************************************
|
||||
* Copyright (C) 2014 by Gregor Mi <codestruct@posteo.org> *
|
||||
* *
|
||||
* 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
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue