225 lines
4.9 KiB
C++
225 lines
4.9 KiB
C++
#ifndef SLIDER_INTERNAL_H
|
|
#define SLIDER_INTERNAL_H
|
|
|
|
#include <QStateMachine>
|
|
#include "lib/overlaywidget.h"
|
|
namespace md
|
|
{
|
|
|
|
class Slider;
|
|
class SliderThumb;
|
|
class SliderTrack;
|
|
|
|
class SliderStateMachine : public QStateMachine
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
SliderStateMachine(Slider *slider,
|
|
SliderThumb *thumb,
|
|
SliderTrack *track);
|
|
~SliderStateMachine();
|
|
|
|
void setupProperties();
|
|
|
|
private:
|
|
Q_DISABLE_COPY(SliderStateMachine)
|
|
|
|
Slider *const m_slider;
|
|
SliderThumb *const m_thumb;
|
|
SliderTrack *const m_track;
|
|
QState *const m_topState;
|
|
QState *const m_fstState;
|
|
QState *const m_sndState;
|
|
QState *const m_inactiveState;
|
|
QState *const m_focusState;
|
|
QState *const m_slidingState;
|
|
QState *const m_pulseOutState;
|
|
QState *const m_pulseInState;
|
|
QState *const m_minState;
|
|
QState *const m_normalState;
|
|
};
|
|
|
|
class SliderThumb : public OverlayWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
Q_PROPERTY(qreal diameter WRITE setDiameter READ diameter)
|
|
Q_PROPERTY(qreal borderWidth WRITE setBorderWidth READ borderWidth)
|
|
Q_PROPERTY(QColor borderColor WRITE setBorderColor READ borderColor)
|
|
Q_PROPERTY(QColor fillColor WRITE setFillColor READ fillColor)
|
|
Q_PROPERTY(qreal haloSize WRITE setHaloSize READ haloSize)
|
|
Q_PROPERTY(QColor haloColor WRITE setHaloColor READ haloColor)
|
|
|
|
public:
|
|
explicit SliderThumb(Slider *slider);
|
|
~SliderThumb();
|
|
|
|
inline void setDiameter(qreal diameter);
|
|
inline qreal diameter() const;
|
|
|
|
inline void setBorderWidth(qreal width);
|
|
inline qreal borderWidth() const;
|
|
|
|
inline void setBorderColor(const QColor &color);
|
|
inline QColor borderColor() const;
|
|
|
|
inline void setFillColor(const QColor &color);
|
|
inline QColor fillColor() const;
|
|
|
|
inline void setHaloSize(qreal size);
|
|
inline qreal haloSize() const;
|
|
|
|
inline void setHaloColor(const QColor &color);
|
|
inline QColor haloColor() const;
|
|
|
|
inline void setOffset(int offset);
|
|
inline int offset() const;
|
|
|
|
protected:
|
|
bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE;
|
|
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
|
|
|
|
private:
|
|
Q_DISABLE_COPY(SliderThumb)
|
|
|
|
const Slider *const m_slider;
|
|
QColor m_borderColor;
|
|
QColor m_fillColor;
|
|
QColor m_haloColor;
|
|
qreal m_diameter;
|
|
qreal m_borderWidth;
|
|
qreal m_haloSize;
|
|
int m_offset;
|
|
};
|
|
|
|
inline void SliderThumb::setDiameter(qreal diameter)
|
|
{
|
|
m_diameter = diameter;
|
|
update();
|
|
}
|
|
|
|
inline qreal SliderThumb::diameter() const
|
|
{
|
|
return m_diameter;
|
|
}
|
|
|
|
inline void SliderThumb::setBorderWidth(qreal width)
|
|
{
|
|
m_borderWidth = width;
|
|
update();
|
|
}
|
|
|
|
inline qreal SliderThumb::borderWidth() const
|
|
{
|
|
return m_borderWidth;
|
|
}
|
|
|
|
inline void SliderThumb::setBorderColor(const QColor &color)
|
|
{
|
|
m_borderColor = color;
|
|
update();
|
|
}
|
|
|
|
inline QColor SliderThumb::borderColor() const
|
|
{
|
|
return m_borderColor;
|
|
}
|
|
|
|
inline void SliderThumb::setFillColor(const QColor &color)
|
|
{
|
|
m_fillColor = color;
|
|
update();
|
|
}
|
|
|
|
inline QColor SliderThumb::fillColor() const
|
|
{
|
|
return m_fillColor;
|
|
}
|
|
|
|
inline void SliderThumb::setHaloSize(qreal size)
|
|
{
|
|
m_haloSize = size;
|
|
update();
|
|
}
|
|
|
|
inline qreal SliderThumb::haloSize() const
|
|
{
|
|
return m_haloSize;
|
|
}
|
|
|
|
inline void SliderThumb::setHaloColor(const QColor &color)
|
|
{
|
|
m_haloColor = color;
|
|
update();
|
|
}
|
|
|
|
inline QColor SliderThumb::haloColor() const
|
|
{
|
|
return m_haloColor;
|
|
}
|
|
|
|
inline void SliderThumb::setOffset(int offset)
|
|
{
|
|
m_offset = offset;
|
|
update();
|
|
}
|
|
|
|
inline int SliderThumb::offset() const
|
|
{
|
|
return m_offset;
|
|
}
|
|
|
|
class SliderTrack : public OverlayWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
Q_PROPERTY(QColor fillColor WRITE setFillColor READ fillColor)
|
|
|
|
public:
|
|
explicit SliderTrack(SliderThumb *thumb, Slider *slider);
|
|
~SliderTrack();
|
|
|
|
inline void setFillColor(const QColor &color);
|
|
inline QColor fillColor() const;
|
|
|
|
inline void setTrackWidth(int width);
|
|
inline int trackWidth() const;
|
|
|
|
protected:
|
|
bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE;
|
|
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
|
|
|
|
private:
|
|
Q_DISABLE_COPY(SliderTrack)
|
|
|
|
const Slider *const m_slider;
|
|
SliderThumb *const m_thumb;
|
|
QColor m_fillColor;
|
|
int m_trackWidth;
|
|
};
|
|
|
|
inline void SliderTrack::setFillColor(const QColor &color)
|
|
{
|
|
m_fillColor = color;
|
|
update();
|
|
}
|
|
|
|
inline QColor SliderTrack::fillColor() const
|
|
{
|
|
return m_fillColor;
|
|
}
|
|
|
|
void SliderTrack::setTrackWidth(int width)
|
|
{
|
|
m_trackWidth = width;
|
|
update();
|
|
}
|
|
|
|
int SliderTrack::trackWidth() const
|
|
{
|
|
return m_trackWidth;
|
|
}
|
|
}
|
|
#endif // SLIDER_INTERNAL_H
|