15class ArrangerObjectLoopRange :
public QObject
20 clipStartPosition CONSTANT)
23 loopStartPosition CONSTANT)
28 bool trackBounds READ trackBounds WRITE setTrackBounds NOTIFY
30 Q_PROPERTY (
bool looped READ looped NOTIFY loopedChanged)
35 ArrangerObjectLoopRange (
37 QObject * parent =
nullptr);
51 return clip_start_pos_adapter_.get ();
55 return loop_start_pos_adapter_.get ();
59 return loop_end_pos_adapter_.get ();
61 bool trackBounds ()
const {
return track_bounds_; }
62 void setTrackBounds (
bool track)
64 if (track_bounds_ != track)
66 track_bounds_ = track;
67 Q_EMIT trackBoundsChanged (track);
70 Q_SIGNAL
void trackBoundsChanged (
bool track);
74 return loopStartPosition ()->samples () > 0
75 || clipStartPosition ()->samples () > 0
76 || length ()->samples () != loopEndPosition ()->samples ();
78 Q_SIGNAL
void loopedChanged ();
80 Q_SIGNAL
void loopableObjectPropertiesChanged ();
91 loop_end_pos_.get_ticks () - loop_start_pos_.get_ticks ());
100 units::sample_t (units::samples (0)),
105 auto length () const -> const dsp::AtomicPositionQmlAdapter *
107 return bounds_.length ();
110 static constexpr auto kClipStartPosKey =
"clipStartPosition"sv;
111 static constexpr auto kLoopStartPosKey =
"loopStartPosition"sv;
112 static constexpr auto kLoopEndPosKey =
"loopEndPosition"sv;
113 static constexpr auto kTrackBoundsKey =
"trackBounds"sv;
115 to_json (nlohmann::json &j,
const ArrangerObjectLoopRange &
object);
117 from_json (
const nlohmann::json &j, ArrangerObjectLoopRange &
object);
119 friend void init_from (
120 ArrangerObjectLoopRange &obj,
121 const ArrangerObjectLoopRange &other,
124 obj.clip_start_pos_.set_ticks (other.clip_start_pos_.get_ticks ());
125 obj.loop_start_pos_.set_ticks (other.loop_start_pos_.get_ticks ());
126 obj.loop_end_pos_.set_ticks (other.loop_end_pos_.get_ticks ());
129 BOOST_DESCRIBE_CLASS (
130 ArrangerObjectLoopRange,
134 (clip_start_pos_, loop_start_pos_, loop_end_pos_))
145 bool track_bounds_{
true };
146 std::optional<QMetaObject::Connection> track_bounds_connection_;
148 const ArrangerObjectBounds &bounds_;
156 dsp::AtomicPosition clip_start_pos_;
157 utils::QObjectUniquePtr<dsp::AtomicPositionQmlAdapter> clip_start_pos_adapter_;
160 dsp::AtomicPosition loop_start_pos_;
161 utils::QObjectUniquePtr<dsp::AtomicPositionQmlAdapter> loop_start_pos_adapter_;
168 dsp::AtomicPosition loop_end_pos_;
169 utils::QObjectUniquePtr<dsp::AtomicPositionQmlAdapter> loop_end_pos_adapter_;