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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
#ifndef WIDGETSTATEINDICATOR_H
#define WIDGETSTATEINDICATOR_H
#include "guiSQLiteStudio_global.h"
#include <QObject>
class QLabel;
class QGraphicsDropShadowEffect;
class QGraphicsColorizeEffect;
class GUI_API_EXPORT WidgetStateIndicator : public QObject
{
Q_OBJECT
public:
enum class Mode
{
INFO,
ERROR,
WARNING,
HINT
};
enum class PositionMode
{
DEFAULT,
GROUP_BOX,
LABEL,
CHECK_BOX,
};
~WidgetStateIndicator();
void setMode(Mode mode);
void show(const QString& msg = QString());
void hide();
void setVisible(bool visible, const QString& msg = QString());
bool isVisible() const;
void release();
void info(const QString& msg);
void warn(const QString& msg);
void error(const QString& msg);
void hint(const QString& msg);
static bool exists(QWidget* widget);
static WidgetStateIndicator* getInstance(QWidget* widget);
PositionMode getPositionMode() const;
void setPositionMode(const PositionMode& value);
protected:
bool eventFilter(QObject *obj, QEvent *ev);
private:
explicit WidgetStateIndicator(QWidget *widget);
void initLabel();
void initEffects();
void initGlowEffects();
void initHighlightingEffects();
void initPositionMode();
void finalInit();
void setMessage(const QString& msg);
void clearMessage();
void detectWindowParent();
QWidget* findParentWindow(QWidget* w);
bool shouldHide();
bool shouldShow();
bool eventFilterFromWidget(QEvent *ev);
bool eventFilterFromParentWidget(QEvent *ev);
bool eventFilterFromIndicatorLabel(QEvent *ev);
QWidget* labelParent = nullptr;
QLabel* label = nullptr;
Mode mode = Mode::ERROR;
QWidget* widget = nullptr;
QString message;
QString processedMessage;
QGraphicsColorizeEffect* highlightingEffect = nullptr;
QGraphicsDropShadowEffect* glowEffect = nullptr;
bool widgetVisible = false;
bool visibilityRequested = false;
QWidget* windowParent = nullptr;
PositionMode positionMode = PositionMode::DEFAULT;
static QHash<QWidget*,WidgetStateIndicator*> instances;
private slots:
void updateMode();
void updatePosition();
void updatePositionDefault();
void updatePositionGroupBox();
void updatePositionLabel();
void updatePositionCheckBox();
void updateVisibility();
};
#define INDICATOR(w) WidgetStateIndicator::getInstance(w)
#define EXISTS_INDICATOR(w) WidgetStateIndicator::exists(w)
#endif // WIDGETSTATEINDICATOR_H
|