qt-material-widgets/components/flatbutton_internal.h

113 lines
3.2 KiB
C
Raw Normal View History

2022-02-17 15:17:19 +00:00
#ifndef FLATBUTTON_INTERNAL_H
#define FLATBUTTON_INTERNAL_H
2017-09-29 09:50:04 +00:00
#include <QStateMachine>
#include <QColor>
#include <QEventTransition>
#include <QPropertyAnimation>
#include <QFocusEvent>
#include <QSequentialAnimationGroup>
2022-02-17 15:17:19 +00:00
#include "flatbutton.h"
#include "lib/statetransition.h"
2017-09-29 09:50:04 +00:00
2022-02-17 01:18:04 +00:00
namespace md
{
2017-09-29 09:50:04 +00:00
class FlatButton;
2022-02-17 01:18:04 +00:00
class FlatButtonStateMachine : public QStateMachine
2017-09-29 09:50:04 +00:00
{
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:
2022-02-17 01:18:04 +00:00
explicit FlatButtonStateMachine(FlatButton *parent);
~FlatButtonStateMachine();
2017-09-29 09:50:04 +00:00
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:
2022-02-17 01:18:04 +00:00
Q_DISABLE_COPY(FlatButtonStateMachine)
2017-09-29 09:50:04 +00:00
void addTransition(QObject *object, QEvent::Type eventType, QState *fromState, QState *toState);
void addTransition(QAbstractTransition *transition, QState *fromState, QState *toState);
2022-02-17 01:18:04 +00:00
FlatButton *const m_button;
2017-09-29 09:50:04 +00:00
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;
};
2022-02-17 01:18:04 +00:00
inline qreal FlatButtonStateMachine::overlayOpacity() const
2017-09-29 09:50:04 +00:00
{
return m_overlayOpacity;
}
2022-02-17 01:18:04 +00:00
inline qreal FlatButtonStateMachine::checkedOverlayProgress() const
2017-09-29 09:50:04 +00:00
{
return m_checkedOverlayProgress;
}
2022-02-17 01:18:04 +00:00
inline qreal FlatButtonStateMachine::haloOpacity() const
2017-09-29 09:50:04 +00:00
{
return m_haloOpacity;
}
2022-02-17 01:18:04 +00:00
inline qreal FlatButtonStateMachine::haloSize() const
2017-09-29 09:50:04 +00:00
{
return m_haloSize;
}
2022-02-17 01:18:04 +00:00
inline qreal FlatButtonStateMachine::haloScaleFactor() const
2017-09-29 09:50:04 +00:00
{
return m_haloScaleFactor;
}
2022-02-17 01:18:04 +00:00
}
2017-09-29 09:50:04 +00:00
2022-02-17 15:17:19 +00:00
#endif // FLATBUTTON_INTERNAL_H