Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
tempo_object_manager.h
1// SPDX-FileCopyrightText: © 2025 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include "structure/arrangement/arranger_object_owner.h"
7#include "structure/arrangement/tempo_object.h"
8#include "structure/arrangement/time_signature_object.h"
9
10namespace zrythm::structure::arrangement
11{
12
16class TempoObjectManager final
17 : public QObject,
18 public ArrangerObjectOwner<TempoObject>,
19 public ArrangerObjectOwner<TimeSignatureObject>
20{
21 Q_OBJECT
22 QML_ELEMENT
23 DEFINE_ARRANGER_OBJECT_OWNER_QML_PROPERTIES (
24 TempoObjectManager,
25 tempoObjects,
27 DEFINE_ARRANGER_OBJECT_OWNER_QML_PROPERTIES (
28 TempoObjectManager,
29 timeSignatureObjects,
31 QML_UNCREATABLE ("")
32
33public:
34 TempoObjectManager (
35 ArrangerObjectRegistry &arranger_object_registry,
36 dsp::FileAudioSourceRegistry &file_audio_source_registry,
37 QObject * parent = nullptr);
38
39 friend void init_from (
40 TempoObjectManager &obj,
41 const TempoObjectManager &other,
42 utils::ObjectCloneType clone_type);
43
44 std::string
45 get_field_name_for_serialization (const TempoObject *) const override
46 {
47 return "tempoObjects";
48 }
49
50 std::string
51 get_field_name_for_serialization (const TimeSignatureObject *) const override
52 {
53 return "timeSignatureObjects";
54 }
55
56private:
57 static constexpr auto kTempoObjectsKey = "tempoObjects"sv;
58 static constexpr auto kTimeSignatureObjectsKey = "timeSignatureObjects"sv;
59 friend void to_json (nlohmann::json &j, const TempoObjectManager &manager);
60 friend void from_json (const nlohmann::json &j, TempoObjectManager &manager);
61};
62
63} // namespace zrythm::structure::arrangement