Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
app_settings.h
1// SPDX-FileCopyrightText: © 2025 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include "utils/isettings_backend.h"
7#include "utils/logger.h"
8#include "utils/qt.h"
9#include "utils/utf8_string.h"
10
11#include <QCoreApplication>
12#include <QStandardPaths>
13#include <QtQmlIntegration/qqmlintegration.h>
14
15using namespace Qt::StringLiterals;
16
17#define DEFINE_SETTING_PROPERTY(ptype, name, default_value) \
18\
19 Q_PROPERTY (ptype name READ name WRITE set_##name NOTIFY name##Changed) \
20\
21public: \
22 [[nodiscard]] static ptype get_default_##name () \
23 { \
24 return default_value; \
25 } \
26 [[nodiscard]] ptype name () const \
27 { \
28 return backend_->value (QStringLiteral (#name), default_value) \
29 .value<ptype> (); \
30 } \
31 void set_##name (ptype value) \
32 { \
33 const auto current_value = \
34 backend_->value (QStringLiteral (#name), default_value).value<ptype> (); \
35 if (utils::values_equal_for_qproperty_type (current_value, value)) \
36 return; \
37 z_debug ("setting '{}' to '{}'", #name, value); \
38 backend_->setValue (QStringLiteral (#name), value); \
39 Q_EMIT name##Changed (value); \
40 } \
41 Q_SIGNAL void name##Changed (ptype value);
42
43namespace zrythm::utils
44{
45class AppSettings : public QObject
46{
47 Q_OBJECT
48 QML_ELEMENT
49 QML_UNCREATABLE ("")
50
51 // FIXME: should be part of DirectoryManager, not an editable setting
52 DEFINE_SETTING_PROPERTY (
53 QString,
54 zrythm_user_path,
55 QStandardPaths::writableLocation (QStandardPaths::AppDataLocation))
56 DEFINE_SETTING_PROPERTY (bool, first_run, true)
57 // DEFINE_SETTING_PROPERTY (bool, transportLoop, true)
58 DEFINE_SETTING_PROPERTY (bool, transportReturnToCue, true)
59 // note: in amplitude (0 to 2)
60 DEFINE_SETTING_PROPERTY (double, metronomeVolume, 1.0)
61 DEFINE_SETTING_PROPERTY (bool, metronomeEnabled, -1)
62 DEFINE_SETTING_PROPERTY (int, metronomeCountIn, 0) // number of bars
63 // DEFINE_SETTING_PROPERTY (bool, punchModeEnabled, false)
64 DEFINE_SETTING_PROPERTY (bool, startPlaybackOnMidiInput, false)
65 DEFINE_SETTING_PROPERTY (int, recordingMode, 2) // takes
66 DEFINE_SETTING_PROPERTY (int, recordingPreroll, 0) // number of bars
67 DEFINE_SETTING_PROPERTY (int, jackTransportType, 0) // timebase master
68 DEFINE_SETTING_PROPERTY (QString, icon_theme, u"zrythm-dark"_s)
69 DEFINE_SETTING_PROPERTY (QStringList, recent_projects, QStringList ())
70 DEFINE_SETTING_PROPERTY (QStringList, lv2_search_paths, QStringList ())
71 DEFINE_SETTING_PROPERTY (QStringList, vst2_search_paths, QStringList ())
72 DEFINE_SETTING_PROPERTY (QStringList, vst3_search_paths, QStringList ())
73 DEFINE_SETTING_PROPERTY (QStringList, sf2_search_paths, QStringList ())
74 DEFINE_SETTING_PROPERTY (QStringList, sfz_search_paths, QStringList ())
75 DEFINE_SETTING_PROPERTY (QStringList, dssi_search_paths, QStringList ())
76 DEFINE_SETTING_PROPERTY (QStringList, ladspa_search_paths, QStringList ())
77 DEFINE_SETTING_PROPERTY (QStringList, clap_search_paths, QStringList ())
78 DEFINE_SETTING_PROPERTY (QStringList, jsfx_search_paths, QStringList ())
79 DEFINE_SETTING_PROPERTY (QStringList, au_search_paths, QStringList ())
80 DEFINE_SETTING_PROPERTY (
81 QString,
82 new_project_directory,
83 utils::Utf8String::from_path (
84 (utils::Utf8String::from_qstring (
85 QStandardPaths::writableLocation (QStandardPaths::DocumentsLocation))
86 .to_path ()
87 / utils::Utf8String::from_qstring (QCoreApplication::applicationName ())
88 .to_path ()))
89 .to_qstring ())
90 DEFINE_SETTING_PROPERTY (bool, leftPanelVisible, true)
91 DEFINE_SETTING_PROPERTY (bool, rightPanelVisible, true)
92 DEFINE_SETTING_PROPERTY (bool, bottomPanelVisible, true)
93 DEFINE_SETTING_PROPERTY (bool, trackAutoArm, true)
94 DEFINE_SETTING_PROPERTY (int, audioBackend, 0) // dummy
95 DEFINE_SETTING_PROPERTY (int, midiBackend, 0) // dummy
96 DEFINE_SETTING_PROPERTY (int, panLaw, 1)
97 DEFINE_SETTING_PROPERTY (int, panAlgorithm, 2)
98 DEFINE_SETTING_PROPERTY (QStringList, midiControllers, QStringList ())
99 DEFINE_SETTING_PROPERTY (QStringList, audioInputs, QStringList ())
100 DEFINE_SETTING_PROPERTY (QStringList, fileBrowserBookmarks, QStringList ())
101 DEFINE_SETTING_PROPERTY (QString, fileBrowserLastLocation, {})
102 DEFINE_SETTING_PROPERTY (int, undoStackLength, 128)
103 DEFINE_SETTING_PROPERTY (int, pianoRollHighlight, 3) // both
104 DEFINE_SETTING_PROPERTY (int, pianoRollMidiModifier, 0) // velocity
105 /* these are all in amplitude (0.0 ~ 2.0) */
106 DEFINE_SETTING_PROPERTY (float, monitorVolume, 1.0f)
107 DEFINE_SETTING_PROPERTY (float, monitorMuteVolume, 0.0f)
108 DEFINE_SETTING_PROPERTY (float, monitorListenVolume, 1.0f)
109 DEFINE_SETTING_PROPERTY (float, monitorDimVolume, 0.1f)
110 DEFINE_SETTING_PROPERTY (bool, monitorDimEnabled, false)
111 DEFINE_SETTING_PROPERTY (bool, monitorMuteEnabled, false)
112 DEFINE_SETTING_PROPERTY (bool, monitorMonoEnabled, false)
113 DEFINE_SETTING_PROPERTY (bool, openPluginsOnInstantiation, true)
114 // list of output devices to connect each channel to
115 DEFINE_SETTING_PROPERTY (
116 QStringList,
117 monitorLeftOutputDeviceList,
118 QStringList ())
119 DEFINE_SETTING_PROPERTY (
120 QStringList,
121 monitorRightOutputDeviceList,
122 QStringList ())
123 DEFINE_SETTING_PROPERTY (bool, musicalMode, false)
124 DEFINE_SETTING_PROPERTY (QString, rtAudioAudioDeviceName, {})
125 DEFINE_SETTING_PROPERTY (int, sampleRate, 3) // 48000
126 DEFINE_SETTING_PROPERTY (int, audioBufferSize, 5) // 512
127 DEFINE_SETTING_PROPERTY (int, bounceTailLength, 100) // 100ms
128 DEFINE_SETTING_PROPERTY (bool, bounceWithParents, 100)
129 DEFINE_SETTING_PROPERTY (int, bounceStep, 2) // post-fader
130 DEFINE_SETTING_PROPERTY (bool, disableAfterBounce, true)
131 DEFINE_SETTING_PROPERTY (bool, autoSelectTracks, true)
132 DEFINE_SETTING_PROPERTY (int, lastAutomationFunction, -1)
133 DEFINE_SETTING_PROPERTY (int, lastAudioFunction, -1)
134 DEFINE_SETTING_PROPERTY (double, lastAudioFunctionPitchShiftRatio, 1.0)
135 DEFINE_SETTING_PROPERTY (int, lastMidiFunction, -1)
136 DEFINE_SETTING_PROPERTY (QString, fileBrowserInstrument, {})
137 DEFINE_SETTING_PROPERTY (int, automationCurveAlgorithm, 1) // superellipse
138 DEFINE_SETTING_PROPERTY (double, timelineLastCreatedObjectLengthInTicks, 3840.0)
139 DEFINE_SETTING_PROPERTY (double, editorLastCreatedObjectLengthInTicks, 480.0)
140 DEFINE_SETTING_PROPERTY (QString, uiLocale, {})
141
142public:
143 explicit AppSettings (
144 std::unique_ptr<ISettingsBackend> backend,
145 QObject * parent = nullptr);
146
147private:
148 std::unique_ptr<ISettingsBackend> backend_;
149};
150}
151
152#undef DEFINE_SETTING_PROPERTY
String utilities.
Definition algorithms.h:12