┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/statusbar/statusbarspaceinfo.h
diff options
context:
space:
mode:
authorFelix Ernst <[email protected]>2024-07-08 11:41:56 +0000
committerFelix Ernst <[email protected]>2024-07-08 11:41:56 +0000
commit0d981e7b7df266c867004e23a169ba8cc13c8683 (patch)
treedd811ee7a952e4e8aa0ec0fe0f62ae5705f67e70 /src/statusbar/statusbarspaceinfo.h
parent44bacd319d8e2aa7007f5c8201420b8d9731a0e9 (diff)
Improve Filelight installation UX
Before this commit pressing the free space button when Filelight is not installed would show a singular action called "Install Filelight to View Disk Usage Statistics…". Pressing this button would open the store page for Filelight. This is an okay user experience, but we can do better. This commit makes it so pressing the free space button when Filelight is not installed shows an attractive UI that makes clear that freeing up disk space can be accomplished nicely by installing Filelight. The "Install Filelight…" button on this UI is connected to PackageKit directly, so we do not need to show a separate store like Discover and instead trigger an installation right then and there. For this, the recently introduced DolphinPackageInstaller KJob is used. Installation progress is reported through the status bar similar to the progress reporting of slowly loading directories or searches. Installation failure or success is ultimately shown within Dolphin as a passive notification above the view. On Microsoft Windows or when PackageKit is not available, the install button will only open a store page for Filelight. CCBUG: 477739
Diffstat (limited to 'src/statusbar/statusbarspaceinfo.h')
-rw-r--r--src/statusbar/statusbarspaceinfo.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/statusbar/statusbarspaceinfo.h b/src/statusbar/statusbarspaceinfo.h
index 23a77d045..237192c9c 100644
--- a/src/statusbar/statusbarspaceinfo.h
+++ b/src/statusbar/statusbarspaceinfo.h
@@ -6,6 +6,8 @@
#ifndef STATUSBARSPACEINFO_H
#define STATUSBARSPACEINFO_H
+#include <KMessageWidget>
+
#include <QUrl>
#include <QWidget>
@@ -14,6 +16,7 @@ class QShowEvent;
class QMenu;
class QMouseEvent;
class QToolButton;
+class QWidgetAction;
class KCapacityBar;
@@ -40,6 +43,19 @@ public:
void update();
+Q_SIGNALS:
+ /**
+ * Requests for @p message with the given @p messageType to be shown to the user in a non-modal way.
+ */
+ void showMessage(const QString &message, KMessageWidget::MessageType messageType);
+
+ /**
+ * Requests for a progress update to be shown to the user in a non-modal way.
+ * @param currentlyRunningTaskTitle The task that is currently progressing.
+ * @param installationProgressPercent The current percentage of completion.
+ */
+ void showInstallationProgress(const QString &currentlyRunningTaskTitle, int installationProgressPercent);
+
protected:
void showEvent(QShowEvent *event) override;
void hideEvent(QHideEvent *event) override;
@@ -48,13 +64,29 @@ protected:
void updateMenu();
private Q_SLOTS:
+ /**
+ * Asynchronously starts a Filelight installation using DolphinPackageInstaller. @see DolphinPackageInstaller.
+ * Installation success or failure is reported through showMessage(). @see StatusBarSpaceInfo::showMessage().
+ * Installation progress is reported through showInstallationProgress(). @see StatusBarSpaceInfo::showInstallationProgress().
+ */
+ void slotInstallFilelightButtonClicked();
+
void slotValuesChanged();
private:
+ /**
+ * Creates a new QWidgetAction that contains a UI to install Filelight.
+ * m_installFilelightWidgetAction is initialised after calling this method once.
+ */
+ void initialiseInstallFilelightWidgetAction();
+
+private:
QScopedPointer<SpaceInfoObserver> m_observer;
KCapacityBar *m_capacityBar;
QToolButton *m_textInfoButton;
QMenu *m_buttonMenu;
+ /** An action containing a UI to install Filelight. */
+ QWidgetAction *m_installFilelightWidgetAction;
QUrl m_url;
bool m_ready;
bool m_shown;