X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/f65b0899c3666561cafac14f67ab0bb8a5bfa00a..be51e7233294263e3c2866e101e1151dbc61ccbe:/src/statusbar/statusbarspaceinfo.h diff --git a/src/statusbar/statusbarspaceinfo.h b/src/statusbar/statusbarspaceinfo.h index 5b16942a4..7a1012cf0 100644 --- a/src/statusbar/statusbarspaceinfo.h +++ b/src/statusbar/statusbarspaceinfo.h @@ -6,13 +6,19 @@ #ifndef STATUSBARSPACEINFO_H #define STATUSBARSPACEINFO_H -#include +#include #include +#include class QHideEvent; class QShowEvent; +class QMenu; class QMouseEvent; +class QToolButton; +class QWidgetAction; + +class KCapacityBar; class SpaceInfoObserver; @@ -20,35 +26,78 @@ class SpaceInfoObserver; * @short Shows the available space for the volume represented * by the given URL as part of the status bar. */ -class StatusBarSpaceInfo : public KCapacityBar +class StatusBarSpaceInfo : public QWidget { Q_OBJECT public: - explicit StatusBarSpaceInfo(QWidget* parent = nullptr); + explicit StatusBarSpaceInfo(QWidget *parent = nullptr); ~StatusBarSpaceInfo() override; /** - * Use this to set the widget visibility as it can hide itself + * Works similar to QWidget::setVisible() except that this will postpone showing the widget until space info has been retrieved. Hiding happens instantly. + * + * @param shown Whether this widget is supposed to be visible long-term */ - void setShown(bool); - void setUrl(const QUrl& url); + void setShown(bool shown); + void setUrl(const QUrl &url); QUrl url() const; 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 ¤tlyRunningTaskTitle, int installationProgressPercent); + protected: - void showEvent(QShowEvent* event) override; - void hideEvent(QHideEvent* event) override; - void mousePressEvent(QMouseEvent* event) override; + void showEvent(QShowEvent *event) override; + void hideEvent(QHideEvent *event) override; + QSize minimumSizeHint() const override; + + 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(); + + // The following three methods are only for private use. + using QWidget::hide; // Use StatusBarSpaceInfo::setShown() instead. + using QWidget::setVisible; // Use StatusBarSpaceInfo::setShown() instead. + using QWidget::show; // Use StatusBarSpaceInfo::setShown() instead. + private: QScopedPointer 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; + /** Whether m_observer has already retrieved space information for the current url. */ + bool m_hasSpaceInfo; + /** Whether this widget is supposed to be visible long-term. @see StatusBarSpaceInfo::setShown(). */ bool m_shown; };