#pragma once #include #include #include #include #include class PushButton : public QWidget { Q_OBJECT public: enum LUI_BTN_INDICATOR_POS { LUI_BTN_POS_LEFT, LUI_BTN_POS_RIGHT, LUI_BTN_POS_TOP, LUI_BTN_POS_BOTTOM }; public: PushButton(QWidget* child, QWidget* parent = 0); ~PushButton(); private: // Button Layout QWidget* _childWidget; QHBoxLayout* _stretchLayout; QMargins _contentMargin = QMargins(10, 10, 10, 10); // Button ui int _radius = 5; QWidget* _backgroundWidget; const QColor _defaultColorScheme = QColor(255, 255, 255); QColor _backgroundColor = QColor(255, 255, 255, 0); QColor _hoverColor; QColor _pressedColor; QColor _selectedColor; QWidget* _indicator; LUI_BTN_INDICATOR_POS _indicatorPosition = LUI_BTN_POS_LEFT; const int _indicatorWidth = 6; const int _indicatorSpacing = 4; const float _activatedLengthRatio = 0.4; const float _hoveredLengthRatio = 0.5; const float _pressedLengthRatio = 0.2; QColor _indicatorColor = QColor(0, 0, 0, 0); QGraphicsOpacityEffect* _indicatorEffect; // Button state bool _hovered = false; bool _pressed = false; bool _selected = false; private: // UI util functions void initializeUI(); void generateColor(QColor colorScheme); private: // Interactions virtual void enterEvent(QEnterEvent* event) override; virtual void leaveEvent(QEvent* event) override; virtual void mousePressEvent(QMouseEvent* event) override; virtual void mouseReleaseEvent(QMouseEvent* event) override; virtual void resizeEvent(QResizeEvent* event) override; public: // Operation APIs void select(); void deselect(); // Attribute setter APIs void setRadius(int radius); void setBackgroundColor(QColor color); void setHoverColor(QColor color); void setPressedColor(QColor color); void setSelectedColor(QColor color); void setIndicatorColor(QColor color); void setColorScheme(QColor primaryColor); void setMargin(QMargins margin); void setMargin(int left, int top, int right, int bottom); void setIndicatorPosition(LUI_BTN_INDICATOR_POS position); QWidget* childWidget(); void setChildWidget(QWidget* widget); signals: void onClick(); };