Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
time_signature_object.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.h"
7#include "utils/icloneable.h"
8
9namespace zrythm::structure::arrangement
10{
11
12class TimeSignatureObject final : public ArrangerObject
13{
14 Q_OBJECT
15 Q_PROPERTY (
16 int numerator READ numerator WRITE setNumerator NOTIFY numeratorChanged)
17 Q_PROPERTY (
18 int denominator READ denominator WRITE setDenominator NOTIFY
19 denominatorChanged)
20 QML_ELEMENT
21 QML_UNCREATABLE ("")
22
23public:
24 static constexpr int DEFAULT_NUMERATOR = 4;
25 static constexpr int DEFAULT_DENOMINATOR = 4;
26
27 TimeSignatureObject (
28 const dsp::TempoMap &tempo_map,
29 QObject * parent = nullptr);
30
31 // =========================================================
32 // QML Interface
33 // =========================================================
34
35 int numerator () const { return numerator_; }
36 void setNumerator (int numerator);
37 Q_SIGNAL void numeratorChanged (int numerator);
38
39 int denominator () const { return denominator_; }
40 void setDenominator (int denominator);
41 Q_SIGNAL void denominatorChanged (int denominator);
42
43 // =========================================================
44
45private:
46 friend void init_from (
47 TimeSignatureObject &obj,
48 const TimeSignatureObject &other,
49 utils::ObjectCloneType clone_type);
50
51 static constexpr auto kNumeratorKey = "numerator"sv;
52 static constexpr auto kDenominatorKey = "denominator"sv;
53 friend void to_json (nlohmann::json &j, const TimeSignatureObject &so);
54 friend void from_json (const nlohmann::json &j, TimeSignatureObject &so);
55
56private:
57 int numerator_{ DEFAULT_NUMERATOR };
58 int denominator_{ DEFAULT_DENOMINATOR };
59
60 BOOST_DESCRIBE_CLASS (
61 TimeSignatureObject,
63 (),
64 (),
65 (numerator_, denominator_))
66};
67
68} // namespace zrythm::structure::arrangement
ArrangerObject(Type type, const dsp::TempoMap &tempo_map, ArrangerObjectFeatures features, QObject *parent=nullptr) noexcept
Construct a new ArrangerObject.