18class ClipSlot :
public QObject
23 NOTIFY clipObjectChanged)
24 Q_PROPERTY (ClipState state READ state WRITE setState NOTIFY stateChanged)
27 QML_EXTENDED_NAMESPACE (zrythm::structure::tracks)
43 if (clip_ref_.has_value ())
45 return qobject_cast<arrangement::Clip *> (clip_ref_->get ());
50 std::optional<arrangement::ArrangerObjectUuidReference>
clipReference ()
const
58 Q_INVOKABLE
void clearClip ()
60 if (!clip_ref_.has_value ())
65 if (
auto * clip = this->clip ())
67 if (
auto * tp = clip->timebaseProvider ())
68 tp->setSource (
nullptr);
71 Q_EMIT clipObjectChanged (
nullptr);
74 ClipState state ()
const {
return state_.load (); }
75 void setState (ClipState state);
76 Q_SIGNAL
void stateChanged (ClipState state);
78 void setTimebaseProvider (dsp::TimebaseProvider * provider)
80 timebase_provider_ = provider;
84 static constexpr auto kClipIdKey =
"clipId"sv;
85 friend void to_json (nlohmann::json &j,
const ClipSlot &slot);
86 friend void from_json (
const nlohmann::json &j, ClipSlot &slot);
89 std::optional<arrangement::ArrangerObjectUuidReference> clip_ref_;
90 utils::IObjectRegistry ®istry_;
91 QPointer<dsp::TimebaseProvider> timebase_provider_;
92 std::atomic<ClipState> state_{ ClipState::Stopped };
95class ClipSlotList :
public QAbstractListModel
105 QObject * parent =
nullptr);
106 Q_DISABLE_COPY_MOVE (ClipSlotList)
108 enum ClipSlotListRoles
110 ClipSlotPtrRole = Qt::UserRole + 1,
112 Q_ENUM (ClipSlotListRoles)
121 .at (track_collection_.get_track_index (track->get_uuid ()))
125 QHash<int, QByteArray> roleNames ()
const override
127 QHash<int, QByteArray> roles;
128 roles[ClipSlotPtrRole] =
"clipSlot";
131 int rowCount (
const QModelIndex &parent = QModelIndex ())
const override
133 if (parent.isValid ())
135 return static_cast<int> (clip_slots_.size ());
138 data (
const QModelIndex &index,
int role = Qt::DisplayRole)
const override
140 const auto index_int = index.row ();
141 if (!index.isValid () || index_int >=
static_cast<int> (clip_slots_.size ()))
144 if (role == ClipSlotPtrRole)
146 return QVariant::fromValue (clip_slots_.at (index_int).get ());
154 auto &clip_slots ()
const {
return clip_slots_; }
157 friend void to_json (nlohmann::json &j,
const ClipSlotList &list);
158 friend void from_json (
const nlohmann::json &j, ClipSlotList &list);
162 std::vector<utils::QObjectUniquePtr<ClipSlot>> clip_slots_;