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