21class ClipEditor :
public QObject
24 Q_PROPERTY (QVariant region READ region NOTIFY regionChanged)
25 Q_PROPERTY (QVariant track READ track NOTIFY regionChanged)
31 getChordEditor CONSTANT FINAL)
34 getAudioClipEditor CONSTANT FINAL)
37 getAutomationEditor CONSTANT FINAL)
41 using ArrangerObjectRegistry = structure::arrangement::ArrangerObjectRegistry;
42 using TrackResolver = structure::tracks::TrackResolver;
43 using TrackPtrVariant = structure::tracks::TrackPtrVariant;
44 using TrackUuid = structure::tracks::TrackUuid;
46 using ArrangerObjectPtrVariant =
47 structure::arrangement::ArrangerObjectPtrVariant;
51 ArrangerObjectRegistry ®,
52 TrackResolver track_resolver,
53 QObject * parent =
nullptr);
61 return piano_roll_.get ();
65 return chord_editor_.get ();
69 return audio_clip_editor_.get ();
73 return automation_editor_.get ();
76 QVariant region ()
const;
77 QVariant track ()
const;
78 Q_INVOKABLE
void setRegion (QVariant region, QVariant track);
79 Q_INVOKABLE
void unsetRegion ();
80 Q_SIGNAL
void regionChanged (QVariant region);
99 if (region_id_.has_value () && region_id_.value ().first == region_id)
102 region_id_ = { region_id, track_id };
103 Q_EMIT regionChanged (
104 QVariant::fromStdVariant (get_region_and_track ().value ().first));
107 bool has_region ()
const {
return region_id_.has_value (); }
109 std::optional<std::pair<ArrangerObjectPtrVariant, TrackPtrVariant>>
110 get_region_and_track ()
const;
112 friend void init_from (
114 const ClipEditor &other,
118 static constexpr auto kRegionIdKey =
"regionId"sv;
119 static constexpr auto kPianoRollKey =
"pianoRoll"sv;
120 static constexpr auto kAutomationEditorKey =
"automationEditor"sv;
121 static constexpr auto kChordEditorKey =
"chordEditor"sv;
122 static constexpr auto kAudioClipEditorKey =
"audioClipEditor"sv;
123 friend void to_json (nlohmann::json &j,
const ClipEditor &editor);
124 friend void from_json (
const nlohmann::json &j, ClipEditor &editor);
127 ArrangerObjectRegistry &object_registry_;
128 TrackResolver track_resolver_;
131 std::optional<std::pair<ArrangerObject::Uuid, TrackUuid>> region_id_;