#ifndef QT_SELF_REFRESH_ICON_BUTTON_H #define QT_SELF_REFRESH_ICON_BUTTON_H #include #include #include "FilePath.h" #include "MessageListener.h" #include "MessageRefreshUI.h" #include "QtThreadedFunctor.h" class QtSelfRefreshIconButton : public QPushButton , public MessageListener { public: QtSelfRefreshIconButton( const QString& text, const FilePath& iconPath, const std::string& buttonKey, QWidget* parent = nullptr); ~QtSelfRefreshIconButton() = default; void setText(const QString& text); void setIconPath(const FilePath& iconPath); void setAutoElide(bool autoElide); protected: void handleMessage(MessageRefreshUI* message) override; virtual void refresh(); void resizeEvent(QResizeEvent* event) override; private: void updateText(int width); QtThreadedLambdaFunctor m_onQtThread; QString m_text; FilePath m_iconPath; const std::string m_buttonKey; bool m_autoElide = false; bool m_blockUpdate = false; QTimer m_updateTimer; QTimer m_blockTimer; }; #endif // QT_SELF_REFRESH_ICON_BUTTON_H