Loading...
Searching...
No Matches
QGraphicsRangeSlider.hpp
1#pragma once
2#include <score/graphics/widgets/Constants.hpp>
3
4#include <ossia/network/value/value.hpp>
5#include <ossia/network/value/vec.hpp>
6
7#include <QGraphicsItem>
8#include <QObject>
9
10#include <score_lib_base_export.h>
11
12#include <verdigris>
13
15
16namespace score
17{
18class SCORE_LIB_BASE_EXPORT QGraphicsRangeSlider final
19 : public QObject
20 , public QGraphicsItem
21{
22 W_OBJECT(QGraphicsRangeSlider)
23 SCORE_GRAPHICS_ITEM_TYPE(160)
24 QRectF m_rect{defaultRangeSliderSize};
25
26 double m_start{0.}, m_end{1.};
27 double m_min{0}, m_max{1};
28 double m_init_start{0.}, m_init_end{1.};
29
30public:
31 bool moving = false;
32
33 explicit QGraphicsRangeSlider(QGraphicsItem* parent);
35
37 void setStart(double start);
38 void setEnd(double end);
39 void setRange(double min, double max, ossia::vec2f init);
40
43 void setValue(ossia::vec2f value);
44 ossia::vec2f value() const noexcept;
45 ossia::vec2f m_execValue{};
46 void setExecutionValue(ossia::vec2f); // TODO
47 void resetExecution(); // TODO
48
49 void startChanged(double arg_1) E_SIGNAL(SCORE_LIB_BASE_EXPORT, startChanged, arg_1)
50 void endChanged(double arg_1) E_SIGNAL(SCORE_LIB_BASE_EXPORT, endChanged, arg_1)
51
52 void sliderMoved() E_SIGNAL(SCORE_LIB_BASE_EXPORT, sliderMoved)
53 void sliderReleased() E_SIGNAL(SCORE_LIB_BASE_EXPORT, sliderReleased)
54private:
57 void showTypeIn(QPointF scenePos);
58
59 [[nodiscard]] double to01(double v) const noexcept;
60 [[nodiscard]] double from01(double v) const noexcept;
61
62 void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
63 void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
64 void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override;
65 bool sceneEvent(QEvent* event) override;
66 QRectF boundingRect() const override;
67 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
68 override;
69 void updateRect();
70 qreal y_factor{0.005};
71 qreal d2s{}, d2c{}, d2e{}, ypos{}, ydiff{};
72 double val1{}, val2{};
73
74 bool m_hasExec{};
75
76 enum Handle
77 {
78 START,
79 CENTER,
80 END,
81 NONE
82 };
83 // NONE, not the default START: `handle` is what says whether a drag is in
84 // progress, so an item that has never been pressed must not read as dragging.
85 Handle handle{NONE};
86 QRectF m_rangeRect{};
87};
88}
Definition QGraphicsRangeSlider.hpp:21
Base toolkit upon which the software is built.
Definition Application.cpp:113