Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
plugin_configuration_manager.h
1// SPDX-FileCopyrightText: © 2021-2022, 2024-2025 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include <memory>
7
8#include "plugins/plugin_configuration.h"
9
10#include <boost/describe.hpp>
11
12using namespace std::string_view_literals;
13
14namespace zrythm::gui::old_dsp::plugins
15{
16class Plugin;
17}
18
19using namespace zrythm;
20
26
28{
29public:
30 using PluginConfiguration = zrythm::plugins::PluginConfiguration;
31
40 std::unique_ptr<PluginConfiguration>
42
47 static std::unique_ptr<PluginConfigurationManager> read_or_new ();
48
55
61
62 int get_format_major_version () const { return 7; }
63 int get_format_minor_version () const { return 0; }
64 std::string get_document_type () const
65 {
66 return "PluginConfigurationCollection";
67 }
68
74 PluginConfiguration * find (const zrythm::plugins::PluginDescriptor &descr);
75
83 void set (const PluginConfiguration &setting, bool serialize);
84
89 const plugins::PluginDescriptor &descr);
90
103 const PluginConfiguration &config,
104 bool autoroute_multiout,
105 bool has_stereo_outputs);
106
111 void activate_plugin_configuration_async (const PluginConfiguration &config);
112
113private:
114 static constexpr auto kSettingsKey = "settings"sv;
115 friend void to_json (nlohmann::json &j, const PluginConfigurationManager &p);
116 friend void
117 from_json (const nlohmann::json &j, PluginConfigurationManager &p);
118
119 static std::filesystem::path get_file_path ();
120
126 static void delete_file ();
127
128private:
130 std::vector<std::unique_ptr<PluginConfiguration>> settings_;
131
133 using NumInstantiations = int;
134
137 using LastInstantiatedTimeAsMSecsSinceEpoch = std::int64_t;
138
143 std::unordered_map<
145 std::pair<NumInstantiations, LastInstantiatedTimeAsMSecsSinceEpoch>>
146 instantiations_;
147};
148
void serialize_to_file_no_throw()
Wrapper over serialize_to_file that ignores exceptions.
static std::unique_ptr< PluginConfigurationManager > read_or_new()
Reads the file and fills up the object, or creates an empty object if the file could not be read.
PluginConfiguration * find(const zrythm::plugins::PluginDescriptor &descr)
Finds a setting for the given plugin descriptor.
std::unique_ptr< PluginConfiguration > create_configuration_for_descriptor(const plugins::PluginDescriptor &descr)
Creates a configuration for the given descriptor based on an existing configuration if it exists,...
void increment_num_instantiations_for_plugin(const plugins::PluginDescriptor &descr)
void set(const PluginConfiguration &setting, bool serialize)
Replaces a setting or appends a setting to the cache.
void activate_plugin_configuration(const PluginConfiguration &config, bool autoroute_multiout, bool has_stereo_outputs)
Creates necessary tracks at the end of the tracklist.
void activate_plugin_configuration_async(const PluginConfiguration &config)
Asks the user a few things via dialogs then calls activate_plugin_configuration().
void serialize_to_file()
Serializes the current settings.
Configuration for instantiating a plugin descriptor.
The PluginDescriptor class provides a set of static utility functions and member functions to work wi...