Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
wrapped_object_with_change_signal.h
1// SPDX-FileCopyrightText: © 2021-2022 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#ifndef __GUI_BACKEND_WRAPPED_OBJECT_WITH_CHANGE_SIGNAL_H__
5#define __GUI_BACKEND_WRAPPED_OBJECT_WITH_CHANGE_SIGNAL_H__
6
7#include "common/dsp/track.h"
8#include "common/utils/types.h"
9#include "gui/backend/backend/project_info.h"
10
11#include <giomm/listmodel.h>
12#include <glib-object.h>
13
14class ChordDescriptor;
15class ChordPresetPack;
16class ChordPreset;
17class FileDescriptor;
18class MidiMapping;
19class Port;
20struct ChannelSendTarget;
21class ExtPort;
23class ArrangerObject;
24class Track;
25namespace zrythm::plugins
26{
27class Plugin;
28class PluginCollection;
30}
31
32#define WRAPPED_OBJECT_WITH_CHANGE_SIGNAL_TYPE \
33 (wrapped_object_with_change_signal_get_type ())
34G_DECLARE_FINAL_TYPE (
35 WrappedObjectWithChangeSignal,
36 wrapped_object_with_change_signal,
37 Z,
38 WRAPPED_OBJECT_WITH_CHANGE_SIGNAL,
39 GObject)
40
41
46
47enum class WrappedObjectType
48{
49 WRAPPED_OBJECT_TYPE_TRACK,
50 WRAPPED_OBJECT_TYPE_PLUGIN,
51 WRAPPED_OBJECT_TYPE_PLUGIN_DESCR,
52 WRAPPED_OBJECT_TYPE_CHORD_DESCR,
53 WRAPPED_OBJECT_TYPE_CHORD_PSET,
54 WRAPPED_OBJECT_TYPE_CHORD_PSET_PACK,
55 WRAPPED_OBJECT_TYPE_SUPPORTED_FILE,
56 WRAPPED_OBJECT_TYPE_MIDI_MAPPING,
57 WRAPPED_OBJECT_TYPE_ARRANGER_OBJECT,
58 WRAPPED_OBJECT_TYPE_PROJECT_INFO,
59 WRAPPED_OBJECT_TYPE_PORT,
60 WRAPPED_OBJECT_TYPE_CHANNEL_SEND_TARGET,
61 WRAPPED_OBJECT_TYPE_PLUGIN_COLLECTION,
62 WRAPPED_OBJECT_TYPE_EXT_PORT,
63 WRAPPED_OBJECT_TYPE_FILE_BROWSER_LOCATION,
64};
65
73using WrappedObjectWithChangeSignal = struct _WrappedObjectWithChangeSignal
74{
75 GObject parent_instance;
76
77 using ObjVariant = merge_variants_t<
78 TrackVariant,
79 zrythm::plugins::PluginVariant,
80 ArrangerObjectVariant,
81 PortVariant,
82 std::variant<
84 ChordDescriptor,
88 MidiMapping,
89 ProjectInfo,
90 ChannelSendTarget,
91 zrythm::plugins::PluginCollection,
92 ExtPort,
94 using ObjPtrVariant =
95 merge_variants_t<std::variant<std::nullptr_t>, to_pointer_variant<ObjVariant>>;
96
97 WrappedObjectType type;
98 ObjPtrVariant obj = nullptr;
99
101 GListModel * parent_model;
102
105 GListModel * child_model;
106
107 ObjectFreeFunc free_func;
108};
109
115void
116wrapped_object_with_change_signal_fire (WrappedObjectWithChangeSignal * self);
117
124char *
126
130WrappedObjectWithChangeSignal *
132 WrappedObjectWithChangeSignal::ObjPtrVariant obj,
133 WrappedObjectType type);
134
138WrappedObjectWithChangeSignal *
140 WrappedObjectWithChangeSignal::ObjPtrVariant obj,
141 WrappedObjectType type,
142 ObjectFreeFunc free_func);
143
144ArrangerObject *
145wrapped_object_with_change_signal_get_arranger_object (
146 WrappedObjectWithChangeSignal * self);
147
148Track *
149wrapped_object_with_change_signal_get_track (
150 WrappedObjectWithChangeSignal * self);
151
152Port *
153wrapped_object_with_change_signal_get_port (
154 WrappedObjectWithChangeSignal * self);
155
157wrapped_object_with_change_signal_get_plugin (
158 WrappedObjectWithChangeSignal * self);
159
163
164#endif
Chord preset pack.
A preset of chord descriptors.
Descriptor of a file.
The PluginDescriptor class provides a set of static utility functions and member functions to work wi...
DSP processing plugin.
Definition plugin.h:30
WrappedObjectWithChangeSignal * wrapped_object_with_change_signal_new(WrappedObjectWithChangeSignal::ObjPtrVariant obj, WrappedObjectType type)
Instantiates a new WrappedObjectWithChangeSignal.
char * wrapped_object_with_change_signal_get_display_name(void *data)
Returns a display name for the given object, intended to be used where the object should be displayed...
WrappedObjectWithChangeSignal * wrapped_object_with_change_signal_new_with_free_func(WrappedObjectWithChangeSignal::ObjPtrVariant obj, WrappedObjectType type, ObjectFreeFunc free_func)
If this function is not used, the internal object will not be free'd.
Locations to be used in the file browser.