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 "zrythm-config.h"
7
8#include "gui/backend/alert_manager.h"
9#include "gui/backend/backend/settings_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/project_manager.h"
14#include "gui/backend/translation_manager.h"
15#include "utils/directory_manager.h"
16#include "utils/qt.h"
17#include "utils/rt_thread_id.h"
18
19#include <QApplication>
20#include <QCommandLineParser>
21#include <QLocalSocket>
22#include <QProcess>
23#include <QQmlApplicationEngine>
24#include <QTranslator>
25
26namespace backward
27{
28class SignalHandling;
29}
30
31namespace zrythm::gui
32{
33
34class ZrythmApplication final : public QApplication
35{
36 Q_OBJECT
37 Q_PROPERTY (
38 zrythm::gui::ThemeManager * themeManager READ themeManager CONSTANT FINAL)
39 Q_PROPERTY (
40 zrythm::gui::SettingsManager * settingsManager READ settingsManager CONSTANT
41 FINAL)
42 Q_PROPERTY (
43 zrythm::gui::ProjectManager * projectManager READ projectManager CONSTANT
44 FINAL)
45 Q_PROPERTY (
46 zrythm::gui::AlertManager * alertManager READ alertManager CONSTANT FINAL)
47 Q_PROPERTY (
48 zrythm::gui::TranslationManager * translationManager READ translationManager
49 CONSTANT FINAL)
50 Q_PROPERTY (
51 zrythm::gui::backend::DeviceManager * deviceManager READ deviceManager
52 CONSTANT FINAL)
53 Q_PROPERTY (
54 zrythm::gui::FileSystemModel * fileSystemModel READ fileSystemModel CONSTANT
55 FINAL)
56 QML_ELEMENT
57 QML_UNCREATABLE ("")
58
59public:
60 ZrythmApplication (int &argc, char ** argv);
61 ~ZrythmApplication () override;
62 Z_DISABLE_COPY_MOVE (ZrythmApplication)
63
64 void setup_ui ();
65 void setup_ipc ();
66 void launch_engine_process ();
67
68 zrythm::gui::ThemeManager * themeManager () const
69 {
70 return theme_manager_.get ();
71 }
72 zrythm::gui::SettingsManager * settingsManager () const
73 {
74 return settings_manager_.get ();
75 }
76 zrythm::gui::ProjectManager * projectManager () const
77 {
78 return project_manager_.get ();
79 }
80 zrythm::gui::AlertManager * alertManager () const
81 {
82 return alert_manager_.get ();
83 }
84 zrythm::gui::TranslationManager * translationManager () const
85 {
86 return translation_manager_.get ();
87 }
88 zrythm::gui::backend::DeviceManager * deviceManager () const
89 {
90 return device_manager_.get ();
91 }
92 zrythm::gui::FileSystemModel * fileSystemModel () const
93 {
94 return file_system_model_.get ();
95 }
96
97 DirectoryManager &get_directory_manager () const { return *dir_manager_; }
98
99 QQmlApplicationEngine * get_qml_engine () const { return qml_engine_; }
100
101 bool notify (QObject * receiver, QEvent * event) override;
102
103 std::shared_ptr<gui::backend::DeviceManager> get_device_manager () const
104 {
105 return device_manager_;
106 }
107
108private:
109 void setup_command_line_options ();
110
111 void post_exec_initialization ();
112
113 void setup_device_manager ();
114
115private Q_SLOTS:
116 void onEngineOutput ();
117 void onAboutToQuit ();
118
119public:
120 RTThreadId::IdType qt_thread_id_;
121 QCommandLineParser cmd_line_parser_;
122
123private:
124 std::unique_ptr<backward::SignalHandling> signal_handling_;
125 std::unique_ptr<juce::ScopedJuceInitialiser_GUI>
126 juce_message_handler_initializer_;
127
131 QLocalSocket * socket_ = nullptr;
132
133 std::unique_ptr<DirectoryManager> dir_manager_;
140
144 QProcess * engine_process_ = nullptr;
145
146 QQmlApplicationEngine * qml_engine_ = nullptr;
147
148 QTranslator * translator_ = nullptr;
149
150 std::shared_ptr<gui::backend::DeviceManager> device_manager_;
151};
152
153} // namespace zrythm::gui
This can just be created on the stack as needed since it uses globally available information.
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.
A unique pointer for QObject objects that also works with QObject-based ownership.
Definition qt.h:38