1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
/*
SPDX-FileCopyrightText: 2007 Hamish Rodda <rodda@kde.org>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#ifndef KDEVPLATFORM_STATUSBAR_H
#define KDEVPLATFORM_STATUSBAR_H
#include <QElapsedTimer>
#include <QHash>
#include <QStatusBar>
class QDebug;
class QTimer;
namespace KDevelop
{
class IStatus;
class IPlugin;
class ProgressItem;
class ProgressDialog;
class StatusbarProgressWidget;
class ProgressManager;
/**
* Status bar
*/
class StatusBar : public QStatusBar
{
Q_OBJECT
public:
/**
* Constructs a status bar.
*/
explicit StatusBar(QWidget* parent);
~StatusBar() override;
void registerStatus(QObject* status);
public Q_SLOTS:
void showErrorMessage(const QString& message, int timeout);
private Q_SLOTS:
void clearMessage( KDevelop::IStatus* );
void showMessage( KDevelop::IStatus*, const QString & message, int timeout);
void hideProgress( KDevelop::IStatus* );
void showProgress( KDevelop::IStatus*, int minimum, int maximum, int value);
void slotTimeout();
void pluginLoaded(KDevelop::IPlugin*);
void removeError(QWidget*);
private:
QTimer* errorTimeout(QWidget* error, int timeout);
void subtractFromEachMessageTimeout(int subtrahend, const KDevelop::IStatus* exceptThisMessage = nullptr);
void updateMessage(const KDevelop::IStatus* justInsertedMessage = nullptr);
/**
* Remove the message stored under a given key, if any
*
* @return the removed message's text or an empty string if no message was stored under @p status
*/
QString takeMessage(KDevelop::IStatus* status);
struct Message {
QString text;
int timeout; ///< <= 0 means no timeout; < 0 also restricts the message to progress item status
};
friend QDebug operator<<(QDebug debug, const Message& m);
QHash<IStatus*, Message> m_messages;
QTimer* const m_timer;
QElapsedTimer m_time;
QHash<IStatus*,ProgressItem*> m_progressItems;
StatusbarProgressWidget* m_progressWidget; // embedded in the statusbar, shows a single progressbar & button to expand the overlay widget
ProgressDialog* m_progressDialog; // the actual overlay widget that contains multiple progressbars and status messages
ProgressManager* m_progressController; // progress item model
};
}
#endif // KDEVPLATFORM_STATUSBAR_H
|