Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
named_object.h
1// SPDX-FileCopyrightText: © 2024-2025 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include "utils/icloneable.h"
7#include "utils/utf8_string.h"
8
9#include <QtQmlIntegration/qqmlintegration.h>
10
11#include <boost/describe.hpp>
12
13namespace zrythm::structure::arrangement
14{
15
19class ArrangerObjectName : public QObject
20{
21 Q_OBJECT
22 Q_PROPERTY (QString name READ name WRITE setName NOTIFY nameChanged)
23 QML_ELEMENT
24
25public:
26 ArrangerObjectName (QObject * parent = nullptr) : QObject (parent) { }
27 Z_DISABLE_COPY_MOVE (ArrangerObjectName)
28 ~ArrangerObjectName () override = default;
29
30 // ========================================================================
31 // QML Interface
32 // ========================================================================
33
34 QString name () const { return name_.to_qstring (); }
35 void setName (const QString &name)
36 {
37 const auto name_str = utils::Utf8String::from_qstring (name);
38 if (name_ == name_str)
39 return;
40 name_ = name_str;
41 gen_escaped_name ();
42 Q_EMIT nameChanged (name_str.to_qstring ());
43 }
44 Q_SIGNAL void nameChanged (const QString &name);
45
46 // ========================================================================
47
51 utils::Utf8String get_name () const { return name_; }
52
53private:
54 friend void init_from (
56 const ArrangerObjectName &other,
57 utils::ObjectCloneType clone_type)
58 {
59 obj.name_ = other.name_;
60 obj.escaped_name_ = other.escaped_name_;
61 }
62
63 static constexpr std::string_view kNameKey = "name";
64 friend void
65 to_json (nlohmann::json &j, const ArrangerObjectName &named_object)
66 {
67 j[kNameKey] = named_object.name_;
68 }
69 friend void
70 from_json (const nlohmann::json &j, ArrangerObjectName &named_object)
71 {
72 j.at (kNameKey).get_to (named_object.name_);
73 named_object.gen_escaped_name ();
74 }
75
79 void gen_escaped_name ();
80
81private:
83 utils::Utf8String name_;
84
86 utils::Utf8String escaped_name_;
87
88 BOOST_DESCRIBE_CLASS (ArrangerObjectName, (), (), (), (name_))
89};
90
91} // namespace zrythm::structure::arrangement
Name functionality for arranger objects.
utils::Utf8String get_name() const
Returns the name of the object.
Lightweight UTF-8 string wrapper with safe conversions.
Definition utf8_string.h:38