Zrythm v2.0.0-alpha.1
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::TempoMapWrapper &tempo_map_wrapper,
29 QObject * parent = nullptr);
30
31 dsp::TimelinePosition * position () const override
32 {
33 return static_cast<dsp::TimelinePosition *> (ArrangerObject::position ());
34 }
35
36 // =========================================================
37 // QML Interface
38 // =========================================================
39
40 int numerator () const { return numerator_; }
41 void setNumerator (int numerator);
42 Q_SIGNAL void numeratorChanged (int numerator);
43
44 int denominator () const { return denominator_; }
45 void setDenominator (int denominator);
46 Q_SIGNAL void denominatorChanged (int denominator);
47
48 // =========================================================
49
50private:
51 friend void init_from (
52 TimeSignatureObject &obj,
53 const TimeSignatureObject &other,
54 utils::ObjectCloneType clone_type);
55
56 static constexpr auto kNumeratorKey = "numerator"sv;
57 static constexpr auto kDenominatorKey = "denominator"sv;
58 friend void to_json (nlohmann::json &j, const TimeSignatureObject &so);
59 friend void from_json (const nlohmann::json &j, TimeSignatureObject &so);
60
61private:
62 int numerator_{ DEFAULT_NUMERATOR };
63 int denominator_{ DEFAULT_DENOMINATOR };
64
65 BOOST_DESCRIBE_CLASS (
66 TimeSignatureObject,
68 (),
69 (),
70 (numerator_, denominator_))
71};
72
73} // namespace zrythm::structure::arrangement
A Position whose ticks are absolute timeline ticks.
Definition position.h:97
ArrangerObject(Type type, const dsp::TempoMapWrapper &tempo_map_wrapper, ArrangerObjectFeatures features, QObject *parent=nullptr) noexcept
Construct a new ArrangerObject.