#pragma once #include "lts_widgets_export.h" #include class QTimer; class QWidget; namespace LtsWidgets { class LtsDialog; class LtsOverlayLoading; class LtsProgressDialogHelper; class LTSWIDGETS_EXPORT LtsGlobalWaitDialog : public QObject { Q_OBJECT public: static LtsGlobalWaitDialog* getInstance(); void wait(QWidget *parent, const QString &customText = QString()); void wait(const QString &customText = QString()) { wait(nullptr, customText); } void done(); void setVisible(bool visible = true); void setCustomText(const QString &customText = QString()); void unarm(); void rearm(); private: friend struct LtsGlobalWaitDialogHandler; LtsGlobalWaitDialog(); ~LtsGlobalWaitDialog(); static void cleanupGwdInstance(); void showIt(); void hideIt(); int m_waitingCount; bool m_visible; bool m_armed { true }; LtsProgressDialogHelper *m_progressDialog; QTimer *m_hideTimer; }; } class LTSWIDGETS_EXPORT Waiter { public: explicit Waiter(const QString &customText = {}); explicit Waiter(LtsWidgets::LtsDialog *parent, const QString &customText = {}); ~Waiter(); private: LtsWidgets::LtsOverlayLoading *m_loadingOverlay { nullptr }; LtsWidgets::LtsDialog *m_parent { nullptr }; bool m_oldClosableState { false }; };