1 /* GSequencer - Advanced GTK Sequencer 2 * Copyright (C) 2005-2020 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_BULK_MEMBER_H__ 21 #define __AGS_BULK_MEMBER_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 31 #include <ags/libags-gui.h> 32 33 G_BEGIN_DECLS 34 35 #define AGS_TYPE_BULK_MEMBER (ags_bulk_member_get_type()) 36 #define AGS_BULK_MEMBER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_BULK_MEMBER, AgsBulkMember)) 37 #define AGS_BULK_MEMBER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_BULK_MEMBER, AgsBulkMemberClass)) 38 #define AGS_IS_BULK_MEMBER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_BULK_MEMBER)) 39 #define AGS_IS_BULK_MEMBER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_BULK_MEMBER)) 40 #define AGS_BULK_MEMBER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_BULK_MEMBER, AgsBulkMemberClass)) 41 42 #define AGS_BULK_PORT(ptr) ((AgsBulkPort *)(ptr)) 43 44 #define AGS_BULK_MEMBER_DEFAULT_VERSION "0.7.21" 45 #define AGS_BULK_MEMBER_DEFAULT_BUILD_ID "CEST 01-03-2016 00:23" 46 47 typedef struct _AgsBulkMember AgsBulkMember; 48 typedef struct _AgsBulkMemberClass AgsBulkMemberClass; 49 typedef struct _AgsBulkPort AgsBulkPort; 50 51 typedef enum{ 52 AGS_BULK_MEMBER_CONNECTED = 1, 53 AGS_BULK_MEMBER_DEFAULT_TEMPLATE = 1 << 1, 54 AGS_BULK_MEMBER_RESET_BY_ATOMIC = 1 << 2, 55 AGS_BULK_MEMBER_RESET_BY_TASK = 1 << 3, 56 AGS_BULK_MEMBER_APPLY_RECALL = 1 << 4, 57 AGS_BULK_MEMBER_NO_UPDATE = 1 << 5, 58 AGS_BULK_MEMBER_APPLY_INITIAL = 1 << 6, 59 }AgsBulkMemberFlags; 60 61 typedef enum{ 62 AGS_BULK_MEMBER_PORT_BOOLEAN = 1, 63 AGS_BULK_MEMBER_PORT_INTEGER = 1 << 1, 64 }AgsBulkMemberPortFlags; 65 66 struct _AgsBulkMember 67 { 68 GtkFrame frame; 69 70 guint flags; 71 guint port_flags; 72 73 gchar *version; 74 gchar *build_id; 75 76 GList *handler; 77 78 GType widget_type; 79 guint widget_orientation; 80 gchar *widget_label; 81 82 AgsRecallContainer *play_container; 83 AgsRecallContainer *recall_container; 84 85 gchar *plugin_name; 86 87 gchar *filename; 88 gchar *effect; 89 90 gchar *specifier; 91 92 guint port_index; 93 gchar *control_port; 94 95 guint scale_precision; 96 gdouble step_count; 97 98 AgsConversion *conversion; 99 100 GList *bulk_port; 101 GList *recall_bulk_port; 102 103 GType task_type; 104 }; 105 106 struct _AgsBulkMemberClass 107 { 108 GtkFrameClass frame; 109 110 void (*change_port)(AgsBulkMember *bulk_member, 111 gpointer port_data); 112 113 GList* (*find_port)(AgsBulkMember *bulk_member); 114 }; 115 116 struct _AgsBulkPort 117 { 118 AgsPort *port; 119 120 guint pad; 121 guint audio_channel; 122 123 gpointer port_data; 124 gboolean active; 125 }; 126 127 GType ags_bulk_member_get_type(void); 128 129 AgsBulkPort* ags_bulk_port_alloc(AgsPort *port, guint pad, guint audio_channel); 130 void ags_bulk_port_free(AgsBulkPort *bulk_port); 131 132 GList* ags_bulk_port_find(GList *list, AgsPort *port); 133 134 GtkWidget* ags_bulk_member_get_widget(AgsBulkMember *bulk_member); 135 void ags_bulk_member_set_label(AgsBulkMember *bulk_member, 136 gchar *label); 137 138 void ags_bulk_member_change_port(AgsBulkMember *bulk_member, 139 gpointer port_data); 140 141 GList* ags_bulk_member_find_port(AgsBulkMember *bulk_member); 142 143 GList* ags_bulk_member_find_effect_and_specifier(GList *bulk_member, 144 gchar *filename, gchar *effect, 145 gchar *specifier); 146 147 void ags_bulk_member_remap_bulk_port(AgsBulkMember *bulk_member); 148 149 AgsBulkMember* ags_bulk_member_new(); 150 151 G_END_DECLS 152 153 #endif /*__AGS_BULK_MEMBER_H__*/ 154