Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
zrythm_application.h
1// SPDX-FileCopyrightText: © 2019-2025 Alexandros Theodotou <alex@zrythm.org>
2/* SPDX-License-Identifier: LicenseRef-ZrythmLicense */
3
4#pragma once
5
6#include "dsp/juce_hardware_audio_interface.h"
7#include "engine/session/control_room.h"
8#include "engine/session/midi_mapping.h"
9#include "gui/backend/alert_manager.h"
10#include "gui/backend/backend/theme_manager.h"
11#include "gui/backend/device_manager.h"
12#include "gui/backend/file_system_model.h"
13#include "gui/backend/plugin_manager.h"
14#include "gui/backend/project_manager.h"
15#include "gui/backend/translation_manager.h"
16#include "utils/app_settings.h"
17#include "utils/directory_manager.h"
18#include "utils/qt.h"
19#include "utils/rt_thread_id.h"
20
21#include <QApplication>
22#include <QCommandLineParser>
23#include <QLocalSocket>
24#include <QProcess>
25#include <QQmlApplicationEngine>
26#include <QTranslator>
27
28namespace backward
29{
30class SignalHandling;
31}
32
33namespace zrythm::gui
34{
35
36class ZrythmApplication final : public QApplication
37{
38 Q_OBJECT
39 Q_PROPERTY (
40 zrythm::gui::ThemeManager * themeManager READ themeManager CONSTANT FINAL)
41 Q_PROPERTY (
42 zrythm::utils::AppSettings * appSettings READ appSettings CONSTANT FINAL)
43 Q_PROPERTY (
44 zrythm::gui::ProjectManager * projectManager READ projectManager CONSTANT
45 FINAL)
46 Q_PROPERTY (
48 pluginManager CONSTANT FINAL)
49 Q_PROPERTY (
50 zrythm::gui::AlertManager * alertManager READ alertManager CONSTANT FINAL)
51 Q_PROPERTY (
52 zrythm::gui::TranslationManager * translationManager READ translationManager
53 CONSTANT FINAL)
54 Q_PROPERTY (
55 zrythm::gui::backend::DeviceManager * deviceManager READ deviceManager
56 CONSTANT FINAL)
57 Q_PROPERTY (
58 zrythm::gui::FileSystemModel * fileSystemModel READ fileSystemModel CONSTANT
59 FINAL)
60 Q_PROPERTY (
61 zrythm::engine::session::ControlRoom * controlRoom READ controlRoom CONSTANT
62 FINAL)
63 QML_ELEMENT
64 QML_UNCREATABLE ("")
65
66public:
67 ZrythmApplication (int &argc, char ** argv);
68 ~ZrythmApplication () override;
69 Z_DISABLE_COPY_MOVE (ZrythmApplication)
70
71 void setup_ui ();
72 void setup_ipc ();
73 void launch_engine_process ();
74
75 zrythm::gui::ThemeManager * themeManager () const
76 {
77 return theme_manager_.get ();
78 }
79 zrythm::utils::AppSettings * appSettings () const
80 {
81 return app_settings_.get ();
82 }
83 zrythm::gui::ProjectManager * projectManager () const
84 {
85 return project_manager_.get ();
86 }
87 old_dsp::plugins::PluginManager * pluginManager () const
88 {
89 return plugin_manager_.get ();
90 }
91 zrythm::gui::AlertManager * alertManager () const
92 {
93 return alert_manager_.get ();
94 }
95 zrythm::gui::TranslationManager * translationManager () const
96 {
97 return translation_manager_.get ();
98 }
99 zrythm::gui::backend::DeviceManager * deviceManager () const
100 {
101 return device_manager_.get ();
102 }
103 zrythm::gui::FileSystemModel * fileSystemModel () const
104 {
105 return file_system_model_.get ();
106 }
107
108 engine::session::ControlRoom * controlRoom () const
109 {
110 return control_room_.get ();
111 }
112
113 DirectoryManager &get_directory_manager () const { return *dir_manager_; }
114
115 QQmlApplicationEngine * get_qml_engine () const { return qml_engine_; }
116
117 bool notify (QObject * receiver, QEvent * event) override;
118
119 std::shared_ptr<gui::backend::DeviceManager> get_device_manager () const
120 {
121 return device_manager_;
122 }
123
124 dsp::IHardwareAudioInterface &hw_audio_interface () const
125 {
126 return *hw_audio_interface_;
127 }
128
129private:
130 void setup_command_line_options ();
131
132 void post_exec_initialization ();
133
134 void setup_device_manager ();
135
136 void setup_control_room ();
137
138private Q_SLOTS:
139 void onEngineOutput ();
140 void onAboutToQuit ();
141
142public:
143 RTThreadId::IdType qt_thread_id_;
144 QCommandLineParser cmd_line_parser_;
145
146private:
147 std::unique_ptr<backward::SignalHandling> signal_handling_;
148 std::unique_ptr<juce::ScopedJuceInitialiser_GUI>
149 juce_message_handler_initializer_;
150
152
156 QLocalSocket * socket_ = nullptr;
157
158 std::unique_ptr<DirectoryManager> dir_manager_;
165
170 plugin_manager_;
171
175 QProcess * engine_process_ = nullptr;
176
177 QQmlApplicationEngine * qml_engine_ = nullptr;
178
179 QTranslator * translator_ = nullptr;
180
181 std::shared_ptr<gui::backend::DeviceManager> device_manager_;
182
188 std::unique_ptr<dsp::IHardwareAudioInterface> hw_audio_interface_;
189
191 std::unique_ptr<engine::session::MidiMappings> midi_mappings_;
192};
193
194} // namespace zrythm::gui
This can just be created on the stack as needed since it uses globally available information.
Abstraction for hardware audio interface.
Abstraction to control the signal coming in from Master and going out into the speakers.
This doesn't work - see https://forum.qt.io/topic/124965/how-to-define-a-property-of-type-palette/8.
Wrapper over juce::AudioDeviceManager that exposes changes as signals.
The PluginManager is responsible for scanning and keeping track of available Plugin's.
A unique pointer for QObject objects that also works with QObject-based ownership.
Definition qt.h:38