From: Gregor Mi Date: Sun, 3 May 2015 18:40:04 +0000 (+0200) Subject: Remove SpaceInfoToolsMenu and use KMoreToolsMenuFactory instead X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/ece6650ecd3af0eb450e28a9aadcb0f4dd26cb24 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 --- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 560545aed..498e7c596 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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 diff --git a/src/statusbar/spaceinfotoolsmenu.cpp b/src/statusbar/spaceinfotoolsmenu.cpp deleted file mode 100644 index 40ca56e19..000000000 --- a/src/statusbar/spaceinfotoolsmenu.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2014 by Gregor Mi * - * * - * 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 -#include - -#include -#include -#include -#include - -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() -{ -} - - diff --git a/src/statusbar/spaceinfotoolsmenu.h b/src/statusbar/spaceinfotoolsmenu.h deleted file mode 100644 index 3ca2e184f..000000000 --- a/src/statusbar/spaceinfotoolsmenu.h +++ /dev/null @@ -1,41 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2014 by Gregor Mi * - * * - * 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 -#include - -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 127641e60..29135566f 100644 --- a/src/statusbar/statusbarspaceinfo.cpp +++ b/src/statusbar/statusbarspaceinfo.cpp @@ -21,11 +21,11 @@ #include "statusbarspaceinfo.h" #include "spaceinfoobserver.h" -#include "spaceinfotoolsmenu.h" #include #include +#include #include @@ -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()); } }