1 /* GSequencer - Advanced GTK Sequencer
2  * Copyright (C) 2005-2019 Joël Krähemann
3  *
4  * This file is part of GSequencer.
5  *
6  * GSequencer is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * GSequencer is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with GSequencer.  If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef __AGS_EFFECT_BULK_H__
21 #define __AGS_EFFECT_BULK_H__
22 
23 #include <glib.h>
24 #include <glib-object.h>
25 
26 #include <gtk/gtk.h>
27 
28 #include <ags/libags.h>
29 #include <ags/libags-audio.h>
30 #include <ags/libags-gui.h>
31 
32 G_BEGIN_DECLS
33 
34 #define AGS_TYPE_EFFECT_BULK                (ags_effect_bulk_get_type())
35 #define AGS_EFFECT_BULK(obj)                (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_EFFECT_BULK, AgsEffectBulk))
36 #define AGS_EFFECT_BULK_CLASS(class)        (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_EFFECT_BULK, AgsEffectBulkClass))
37 #define AGS_IS_EFFECT_BULK(obj)             (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_EFFECT_BULK))
38 #define AGS_IS_EFFECT_BULK_CLASS(class)     (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_EFFECT_BULK))
39 #define AGS_EFFECT_BULK_GET_CLASS(obj)      (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_EFFECT_BULK, AgsEffectBulkClass))
40 
41 #define AGS_EFFECT_BULK_PLUGIN(ptr) ((AgsEffectBulkPlugin *)(ptr))
42 
43 #define AGS_EFFECT_BULK_DEFAULT_VERSION "0.7.8"
44 #define AGS_EFFECT_BULK_DEFAULT_BUILD_ID "CEST 01-03-2016 00:23"
45 
46 #define AGS_EFFECT_BULK_COLUMNS_COUNT (4)
47 
48 typedef struct _AgsEffectBulk AgsEffectBulk;
49 typedef struct _AgsEffectBulkPlugin AgsEffectBulkPlugin;
50 typedef struct _AgsEffectBulkClass AgsEffectBulkClass;
51 
52 typedef enum{
53   AGS_EFFECT_BULK_MAPPED_RECALL       = 1,
54   AGS_EFFECT_BULK_PREMAPPED_RECALL    = 1 <<  1,
55   AGS_EFFECT_BULK_CONNECTED           = 1 <<  2,
56   AGS_EFFECT_BULK_HIDE_BUTTONS        = 1 <<  3,
57   AGS_EFFECT_BULK_HIDE_ENTRIES        = 1 <<  4,
58   AGS_EFFECT_BULK_SHOW_LABELS         = 1 <<  5,
59 }AgsEffectBulkFlags;
60 
61 struct _AgsEffectBulk
62 {
63   GtkBox box;
64 
65   guint flags;
66 
67   gchar *name;
68 
69   gchar *version;
70   gchar *build_id;
71 
72   GType channel_type;
73   AgsAudio *audio;
74 
75   GtkButton *add;
76   GtkButton *remove;
77 
78   GtkBox *bulk_member;
79   GtkGrid *grid;
80 
81   GList *plugin;
82   GtkDialog *plugin_browser;
83 
84   GList *queued_drawing;
85 };
86 
87 struct _AgsEffectBulkClass
88 {
89   GtkBoxClass box;
90 
91   void (*add_plugin)(AgsEffectBulk *effect_bulk,
92 		     GList *control_type_name,
93 		     AgsRecallContainer *play_container, AgsRecallContainer *recall_container,
94 		     gchar *plugin_name,
95 		     gchar *filename,
96 		     gchar *effect,
97 		     guint start_audio_channel, guint stop_audio_channel,
98 		     guint start_pad, guint stop_pad,
99 		     gint position,
100 		     guint create_flags, guint recall_flags);
101   void (*remove_plugin)(AgsEffectBulk *effect_bulk,
102 			guint nth);
103 
104   void (*resize_audio_channels)(AgsEffectBulk *effect_bulk,
105 				guint new_size,
106 				guint old_size);
107   void (*resize_pads)(AgsEffectBulk *effect_bulk,
108 		      guint new_size,
109 		      guint old_size);
110 
111   void (*map_recall)(AgsEffectBulk *effect_bulk);
112   GList* (*find_port)(AgsEffectBulk *effect_bulk);
113 };
114 
115 struct _AgsEffectBulkPlugin
116 {
117   AgsRecallContainer *play_container;
118   AgsRecallContainer *recall_container;
119 
120   gchar *plugin_name;
121 
122   gchar *filename;
123   gchar *effect;
124 
125   GList *control_type_name;
126 
127   guint control_count;
128 };
129 
130 GType ags_effect_bulk_get_type(void);
131 
132 AgsEffectBulkPlugin* ags_effect_bulk_plugin_alloc(AgsRecallContainer *play_container, AgsRecallContainer *recall_container,
133 						  gchar *plugin_name,
134 						  gchar *filename,
135 						  gchar *effect);
136 void ags_effect_bulk_plugin_free(AgsEffectBulkPlugin *effect_bulk_plugin);
137 
138 void ags_effect_bulk_add_plugin(AgsEffectBulk *effect_bulk,
139 				GList *control_type_name,
140 				AgsRecallContainer *play_container, AgsRecallContainer *recall_container,
141 				gchar *plugin_name,
142 				gchar *filename,
143 				gchar *effect,
144 				guint start_audio_channel, guint stop_audio_channel,
145 				guint start_pad, guint stop_pad,
146 				gint position,
147 				guint create_flags, guint recall_flags);
148 void ags_effect_bulk_remove_plugin(AgsEffectBulk *effect_bulk,
149 				   guint nth);
150 
151 void ags_effect_bulk_resize_audio_channels(AgsEffectBulk *effect_bulk,
152 					   guint new_size,
153 					   guint old_size);
154 void ags_effect_bulk_resize_pads(AgsEffectBulk *effect_bulk,
155 				 guint new_size,
156 				 guint old_size);
157 
158 void ags_effect_bulk_map_recall(AgsEffectBulk *effect_bulk);
159 GList* ags_effect_bulk_find_port(AgsEffectBulk *effect_bulk);
160 
161 gboolean ags_effect_bulk_indicator_queue_draw_timeout(GtkWidget *widget);
162 
163 AgsEffectBulk* ags_effect_bulk_new(AgsAudio *audio,
164 				   GType channel_type);
165 
166 G_END_DECLS
167 
168 #endif /*__AGS_EFFECT_BULK_H__*/
169