Zrythm v2.0.0-alpha.1
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
project_ui_state.h
1// SPDX-FileCopyrightText: © 2018-2026 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include <map>
7#include <string_view>
8
9#include "dsp/audio_input_selection.h"
10#include "dsp/midi_input_selection.h"
11#include "dsp/snap_grid.h"
12#include "structure/project/arranger_tool.h"
13#include "structure/project/chord_pad_bank.h"
14#include "structure/project/clip_editor.h"
15#include "structure/project/project.h"
16#include "structure/project/timeline_editor.h"
17#include "structure/tracks/track.h"
18#include "utils/qt.h"
19
20#include <QtQmlIntegration/qqmlintegration.h>
21
22#include <nlohmann/json_fwd.hpp>
23
24namespace zrythm::structure::project
25{
26
39class ProjectUiState : public QObject
40{
41 Q_OBJECT
42 Q_PROPERTY (
43 zrythm::structure::project::TimelineEditor * timeline READ timeline CONSTANT
44 FINAL)
45 Q_PROPERTY (
46 zrythm::structure::project::ArrangerTool * tool READ tool CONSTANT FINAL)
47 Q_PROPERTY (
48 zrythm::structure::project::ClipEditor * clipEditor READ clipEditor CONSTANT
49 FINAL)
50 Q_PROPERTY (
51 zrythm::structure::project::ChordPadBank * chordPadBank READ chordPadBank
52 CONSTANT FINAL)
53 Q_PROPERTY (
54 zrythm::dsp::SnapGrid * snapGridTimeline READ snapGridTimeline CONSTANT FINAL)
55 Q_PROPERTY (
56 zrythm::dsp::SnapGrid * snapGridEditor READ snapGridEditor CONSTANT FINAL)
57 QML_ELEMENT
58 QML_UNCREATABLE ("")
59
60public:
67 ProjectUiState (Project &project, utils::AppSettings &app_settings);
68
69 structure::project::ArrangerTool * tool () const;
70 structure::project::ClipEditor * clipEditor () const;
71 ChordPadBank * chordPadBank () const;
72 TimelineEditor * timeline () const;
73 dsp::SnapGrid * snapGridTimeline () const;
74 dsp::SnapGrid * snapGridEditor () const;
75
76 Q_INVOKABLE dsp::AudioInputSelection *
77 audioInputSelectionForTrack (const structure::tracks::Track * track);
78
79 Q_INVOKABLE dsp::MidiInputSelection *
80 midiInputSelectionForTrack (const structure::tracks::Track * track);
81
82 dsp::AudioInputSelection *
83 find_audio_input_selection (const structure::tracks::Track::Uuid &uuid) const;
84
85 dsp::MidiInputSelection *
86 find_midi_input_selection (const structure::tracks::Track::Uuid &uuid) const;
87
88 static constexpr auto kSnapGridTimelineKey = "snapGridTimeline"sv;
89 static constexpr auto kSnapGridEditorKey = "snapGridEditor"sv;
90 static constexpr auto kChordPadBankKey = "chordPadBank"sv;
91 static constexpr auto kAudioInputSelectionsKey = "audioInputSelections"sv;
92 static constexpr auto kMidiInputSelectionsKey = "midiInputSelections"sv;
93
94Q_SIGNALS:
95 void audioInputSelectionChanged ();
96 void midiInputDeviceChanged ();
97
98private:
99 dsp::AudioInputSelection * get_or_create_audio_input_selection (
100 const structure::tracks::Track::Uuid &uuid);
101
102 dsp::MidiInputSelection * get_or_create_midi_input_selection (
103 const structure::tracks::Track::Uuid &uuid);
104
105 friend void to_json (nlohmann::json &j, const ProjectUiState &p);
106 friend void from_json (const nlohmann::json &j, ProjectUiState &p);
107
108private:
109 Project &project_;
110 utils::AppSettings &app_settings_;
111
113 utils::QObjectUniquePtr<structure::project::ArrangerTool> tool_;
114
116 utils::QObjectUniquePtr<structure::project::ClipEditor> clip_editor_;
117
119 utils::QObjectUniquePtr<ChordPadBank> chord_pad_bank_;
120
122 utils::QObjectUniquePtr<TimelineEditor> timeline_;
123
125 utils::QObjectUniquePtr<dsp::SnapGrid> snap_grid_timeline_;
126
128 utils::QObjectUniquePtr<dsp::SnapGrid> snap_grid_editor_;
129
132 std::map<
133 structure::tracks::Track::Uuid,
134 utils::QObjectUniquePtr<dsp::AudioInputSelection>>
135 audio_input_selections_;
136
139 std::map<
140 structure::tracks::Track::Uuid,
141 utils::QObjectUniquePtr<dsp::MidiInputSelection>>
142 midi_input_selections_;
143};
144
145} // namespace zrythm::structure::project
Snap/grid information.
Definition snap_grid.h:23
A list model of chord descriptors for the chord pad panel.
Backend for the clip editor part of the UI.
Definition clip_editor.h:24
ProjectUiState(Project &project, utils::AppSettings &app_settings)
Constructs ProjectUiState with references from the given Project.
Core functionality of a Zrythm project.
Definition project.h:55
String utilities.