#ifndef FLATBUTTON_INTERNAL_H #define FLATBUTTON_INTERNAL_H #include #include #include #include #include #include #include "flatbutton.h" #include "lib/statetransition.h" namespace md { class FlatButton; class FlatButtonStateMachine : public QStateMachine { Q_OBJECT Q_PROPERTY(qreal overlayOpacity WRITE setOverlayOpacity READ overlayOpacity) Q_PROPERTY(qreal checkedOverlayProgress WRITE setCheckedOverlayProgress READ checkedOverlayProgress) Q_PROPERTY(qreal haloOpacity WRITE setHaloOpacity READ haloOpacity) Q_PROPERTY(qreal haloSize WRITE setHaloSize READ haloSize) Q_PROPERTY(qreal haloScaleFactor WRITE setHaloScaleFactor READ haloScaleFactor) public: explicit FlatButtonStateMachine(FlatButton *parent); ~FlatButtonStateMachine(); void setOverlayOpacity(qreal opacity); inline qreal overlayOpacity() const; void setCheckedOverlayProgress(qreal progress); inline qreal checkedOverlayProgress() const; void setHaloOpacity(qreal opacity); inline qreal haloOpacity() const; void setHaloSize(qreal size); inline qreal haloSize() const; void setHaloScaleFactor(qreal factor); inline qreal haloScaleFactor() const; void startAnimations(); void setupProperties(); void updateCheckedStatus(); signals: void buttonPressed(); void buttonChecked(); void buttonUnchecked(); protected: bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE; private: Q_DISABLE_COPY(FlatButtonStateMachine) void addTransition(QObject *object, QEvent::Type eventType, QState *fromState, QState *toState); void addTransition(QAbstractTransition *transition, QState *fromState, QState *toState); FlatButton *const m_button; QState *const m_topLevelState; QState *const m_configState; QState *const m_checkableState; QState *const m_checkedState; QState *const m_uncheckedState; QState *const m_neutralState; QState *const m_neutralFocusedState; QState *const m_hoveredState; QState *const m_hoveredFocusedState; QState *const m_pressedState; QSequentialAnimationGroup *const m_haloAnimation; qreal m_overlayOpacity; qreal m_checkedOverlayProgress; qreal m_haloOpacity; qreal m_haloSize; qreal m_haloScaleFactor; bool m_wasChecked; }; inline qreal FlatButtonStateMachine::overlayOpacity() const { return m_overlayOpacity; } inline qreal FlatButtonStateMachine::checkedOverlayProgress() const { return m_checkedOverlayProgress; } inline qreal FlatButtonStateMachine::haloOpacity() const { return m_haloOpacity; } inline qreal FlatButtonStateMachine::haloSize() const { return m_haloSize; } inline qreal FlatButtonStateMachine::haloScaleFactor() const { return m_haloScaleFactor; } } #endif // FLATBUTTON_INTERNAL_H