Remove SpaceInfoToolsMenu and use KMoreToolsMenuFactory instead

Reduces the amount of needed code.
NEW: by using KMoreTools the menu is now user-configurable and
will automatically extended when KMoreToolsPresets gets new tools.
REVIEW: 122911
This commit is contained in:
Gregor Mi 2015-05-03 20:40:04 +02:00
parent 9456584597
commit ece6650ecd
4 changed files with 11 additions and 143 deletions

View file

@ -242,7 +242,6 @@ set(dolphin_SRCS
statusbar/dolphinstatusbar.cpp
statusbar/mountpointobserver.cpp
statusbar/mountpointobservercache.cpp
statusbar/spaceinfotoolsmenu.cpp
statusbar/spaceinfoobserver.cpp
statusbar/statusbarspaceinfo.cpp
views/zoomlevelinfo.cpp

View file

@ -1,98 +0,0 @@
/***************************************************************************
* 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)
{
// find service
//
const auto filelightService = KService::serviceByDesktopName("org.kde.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(i18nc("@action:inmenu %1 service name", "%1 - current folder", filelightService->genericName()));
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(i18nc("@action:inmenu %1 service name", "%1 - current device", filelightService->genericName()));
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(i18nc("@action:inmenu %1 service name", "%1 - all devices", filelightService->genericName()));
startFilelightAllDevicesAction->setIcon(filelightIcon);
connect(startFilelightAllDevicesAction, &QAction::triggered, this, [filelightService](bool) {
KRun::runService(*filelightService, { }, nullptr);
});
} else {
const auto startFilelightDirectoryAction = addAction(i18nc("@action:inmenu", "Filelight [not installed]"));
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(i18nc("@action:inmenu", "KDiskFree [not installed]"));
startKDiskFreeAction->setEnabled(false);
}
}
SpaceInfoToolsMenu::~SpaceInfoToolsMenu()
{
}

View file

@ -1,41 +0,0 @@
/***************************************************************************
* 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

View file

@ -21,11 +21,11 @@
#include "statusbarspaceinfo.h"
#include "spaceinfoobserver.h"
#include "spaceinfotoolsmenu.h"
#include <QMouseEvent>
#include <KLocalizedString>
#include <KNS3/KMoreToolsMenuFactory>
#include <KIO/Job>
@ -71,8 +71,16 @@ void StatusBarSpaceInfo::hideEvent(QHideEvent* event)
void StatusBarSpaceInfo::mousePressEvent(QMouseEvent* event)
{
if (event->button() == Qt::LeftButton) {
SpaceInfoToolsMenu spaceInfoToolsMenu(this, m_url);
spaceInfoToolsMenu.exec(QCursor::pos());
// Creates a menu with tools that help to find out more about free
// disk space for the given url.
// Note that this object must live long enough in case the user opens
// the "Configure..." dialog
KMoreToolsMenuFactory menuFactory("dolphin/statusbar-diskspace-menu");
auto menu = menuFactory.createMenuFromGroupingNames(
{ "disk-usage", "more:", "disk-partitions" }, m_url);
menu->exec(QCursor::pos());
}
}