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_COMPOSITE_TOOLBAR_H__ 21 #define __AGS_COMPOSITE_TOOLBAR_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_COMPOSITE_TOOLBAR (ags_composite_toolbar_get_type()) 36 #define AGS_COMPOSITE_TOOLBAR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_COMPOSITE_TOOLBAR, AgsCompositeToolbar)) 37 #define AGS_COMPOSITE_TOOLBAR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_COMPOSITE_TOOLBAR, AgsCompositeToolbarClass)) 38 #define AGS_IS_COMPOSITE_TOOLBAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_COMPOSITE_TOOLBAR)) 39 #define AGS_IS_COMPOSITE_TOOLBAR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_COMPOSITE_TOOLBAR)) 40 #define AGS_COMPOSITE_TOOLBAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (obj, AGS_TYPE_COMPOSITE_TOOLBAR, AgsCompositeToolbarClass)) 41 42 #define AGS_COMPOSITE_TOOLBAR_DEFAULT_VERSION "3.8.0" 43 #define AGS_COMPOSITE_TOOLBAR_DEFAULT_BUILD_ID "Mon Dec 14 15:29:38 UTC 2020" 44 45 #define AGS_COMPOSITE_TOOLBAR_DIALOG_SCOPE_COUNT (5) 46 47 #define AGS_COMPOSITE_TOOLBAR_SCOPE_COMMON "common" 48 #define AGS_COMPOSITE_TOOLBAR_SCOPE_NOTATION "notation" 49 #define AGS_COMPOSITE_TOOLBAR_SCOPE_SHEET "sheet" 50 #define AGS_COMPOSITE_TOOLBAR_SCOPE_AUTOMATION "automation" 51 #define AGS_COMPOSITE_TOOLBAR_SCOPE_WAVE "wave" 52 53 typedef struct _AgsCompositeToolbar AgsCompositeToolbar; 54 typedef struct _AgsCompositeToolbarClass AgsCompositeToolbarClass; 55 56 typedef enum{ 57 AGS_COMPOSITE_TOOLBAR_ADDED_TO_REGISTRY = 1, 58 AGS_COMPOSITE_TOOLBAR_CONNECTED = 1 << 1, 59 }AgsCompositeToolbarFlags; 60 61 typedef enum{ 62 AGS_COMPOSITE_TOOLBAR_TOOL_POSITION = 1, 63 AGS_COMPOSITE_TOOLBAR_TOOL_EDIT = 1 << 1, 64 AGS_COMPOSITE_TOOLBAR_TOOL_CLEAR = 1 << 2, 65 AGS_COMPOSITE_TOOLBAR_TOOL_SELECT = 1 << 3, 66 }AgsCompositeToolbarTool; 67 68 typedef enum{ 69 AGS_COMPOSITE_TOOLBAR_ACTION_INVERT = 1, 70 AGS_COMPOSITE_TOOLBAR_ACTION_COPY = 1 << 1, 71 AGS_COMPOSITE_TOOLBAR_ACTION_CUT = 1 << 2, 72 AGS_COMPOSITE_TOOLBAR_ACTION_PASTE = 1 << 3, 73 }AgsCompositeToolbarAction; 74 75 typedef enum{ 76 AGS_COMPOSITE_TOOLBAR_PASTE_MATCH_AUDIO_CHANNEL = 1, 77 AGS_COMPOSITE_TOOLBAR_PASTE_MATCH_LINE = 1 << 1, 78 AGS_COMPOSITE_TOOLBAR_PASTE_NO_DUPLICATES = 1 << 2, 79 }AgsCompositeToolbarPasteMode; 80 81 typedef enum{ 82 AGS_COMPOSITE_TOOLBAR_HAS_MENU_TOOL = 1, 83 AGS_COMPOSITE_TOOLBAR_HAS_ZOOM = 1 << 1, 84 AGS_COMPOSITE_TOOLBAR_HAS_OPACITY = 1 << 2, 85 AGS_COMPOSITE_TOOLBAR_HAS_PORT = 1 << 3, 86 }AgsCompositeToolbarOption; 87 88 typedef enum{ 89 AGS_COMPOSITE_TOOLBAR_ZOOM_4_1, 90 AGS_COMPOSITE_TOOLBAR_ZOOM_2_1, 91 AGS_COMPOSITE_TOOLBAR_ZOOM_1_1, 92 AGS_COMPOSITE_TOOLBAR_ZOOM_1_2, 93 AGS_COMPOSITE_TOOLBAR_ZOOM_1_4, 94 AGS_COMPOSITE_TOOLBAR_ZOOM_1_8, 95 AGS_COMPOSITE_TOOLBAR_ZOOM_1_16, 96 }AgsCompositeToolbarZoom; 97 98 typedef enum{ 99 AGS_COMPOSITE_TOOLBAR_COMMON_DIALOG_ENABLE_ALL_AUDIO_CHANNELS = 1, 100 AGS_COMPOSITE_TOOLBAR_COMMON_DIALOG_DISABLE_ALL_AUDIO_CHANNELS = 1 << 1, 101 AGS_COMPOSITE_TOOLBAR_COMMON_DIALOG_ENABLE_ALL_LINES = 1 << 2, 102 AGS_COMPOSITE_TOOLBAR_COMMON_DIALOG_DISABLE_ALL_LINES = 1 << 3, 103 }AgsCompositeToolbarCommonDialog; 104 105 typedef enum{ 106 AGS_COMPOSITE_TOOLBAR_NOTATION_DIALOG_MOVE_NOTE = 1, 107 AGS_COMPOSITE_TOOLBAR_NOTATION_DIALOG_CROP_NOTE = 1 << 1, 108 AGS_COMPOSITE_TOOLBAR_NOTATION_DIALOG_SELECT_NOTE = 1 << 2, 109 AGS_COMPOSITE_TOOLBAR_NOTATION_DIALOG_POSITION_CURSOR = 1 << 3, 110 }AgsCompositeToolbarNotationDialog; 111 112 typedef enum{ 113 AGS_COMPOSITE_TOOLBAR_SHEET_DIALOG_POSITION_CURSOR, 114 }AgsCompositeToolbarSheetDialog; 115 116 typedef enum{ 117 AGS_COMPOSITE_TOOLBAR_AUTOMATION_DIALOG_SELECT_ACCELERATION = 1, 118 AGS_COMPOSITE_TOOLBAR_AUTOMATION_DIALOG_RAMP_ACCELERATION = 1 << 1, 119 AGS_COMPOSITE_TOOLBAR_AUTOMATION_DIALOG_POSITION_CURSOR = 1 << 2, 120 }AgsCompositeToolbarAutomationDialog; 121 122 typedef enum{ 123 AGS_COMPOSITE_TOOLBAR_WAVE_DIALOG_SELECT_BUFFER = 1, 124 AGS_COMPOSITE_TOOLBAR_WAVE_DIALOG_POSITION_CURSOR = 1 << 1, 125 }AgsCompositeToolbarWaveDialog; 126 127 struct _AgsCompositeToolbar 128 { 129 GtkToolbar toolbar; 130 131 guint flags; 132 133 guint tool; 134 guint action; 135 guint option; 136 137 gchar *version; 138 gchar *build_id; 139 140 AgsUUID *uuid; 141 142 gboolean block_selected_tool; 143 GtkToggleToolButton *selected_tool; 144 145 GtkToggleToolButton *position; 146 GtkToggleToolButton *edit; 147 GtkToggleToolButton *clear; 148 GtkToggleToolButton *select; 149 150 GtkToolButton *invert; 151 GtkToolButton *copy; 152 GtkToolButton *cut; 153 154 guint paste_mode; 155 GtkMenuToolButton *paste; 156 GtkMenu *paste_popup; 157 158 gchar **menu_tool_dialog; 159 GValue *menu_tool_value; 160 GtkMenuToolButton *menu_tool; 161 GtkMenu *menu_tool_popup; 162 163 GtkComboBox *port; 164 165 gint selected_zoom; 166 GtkComboBox *zoom; 167 168 GtkSpinButton *opacity; 169 170 GtkDialog *notation_move_note; 171 GtkDialog *notation_crop_note; 172 GtkDialog *notation_select_note; 173 GtkDialog *notation_position_cursor; 174 175 GtkDialog *sheet_position_cursor; 176 177 GtkDialog *automation_select_acceleration; 178 GtkDialog *automation_ramp_acceleration; 179 GtkDialog *automation_position_cursor; 180 181 GtkDialog *wave_select_buffer; 182 GtkDialog *wave_position_cursor; 183 }; 184 185 struct _AgsCompositeToolbarClass 186 { 187 GtkToolbarClass toolbar; 188 }; 189 190 GType ags_composite_toolbar_get_type(void); 191 192 gboolean ags_composite_toolbar_test_flags(AgsCompositeToolbar *composite_toolbar, guint flags); 193 void ags_composite_toolbar_set_flags(AgsCompositeToolbar *composite_toolbar, guint flags); 194 void ags_composite_toolbar_unset_flags(AgsCompositeToolbar *composite_toolbar, guint flags); 195 196 gboolean ags_composite_toolbar_test_tool(AgsCompositeToolbar *composite_toolbar, guint tool); 197 void ags_composite_toolbar_set_tool(AgsCompositeToolbar *composite_toolbar, guint tool); 198 void ags_composite_toolbar_unset_tool(AgsCompositeToolbar *composite_toolbar, guint tool); 199 200 gboolean ags_composite_toolbar_test_action(AgsCompositeToolbar *composite_toolbar, guint action); 201 void ags_composite_toolbar_set_action(AgsCompositeToolbar *composite_toolbar, guint action); 202 void ags_composite_toolbar_unset_action(AgsCompositeToolbar *composite_toolbar, guint action); 203 204 gboolean ags_composite_toolbar_test_option(AgsCompositeToolbar *composite_toolbar, guint option); 205 void ags_composite_toolbar_set_option(AgsCompositeToolbar *composite_toolbar, guint option); 206 void ags_composite_toolbar_unset_option(AgsCompositeToolbar *composite_toolbar, guint option); 207 208 GtkMenu* ags_composite_toolbar_paste_popup_new(guint paste_mode); 209 GtkMenu* ags_composite_toolbar_menu_tool_popup_new(gchar **dialog, 210 GValue *value); 211 212 void ags_composite_toolbar_set_selected_tool(AgsCompositeToolbar *composite_toolbar, 213 GtkToggleToolButton *selected_tool); 214 215 void ags_composite_toolbar_scope_create_and_connect(AgsCompositeToolbar *composite_toolbar, 216 gchar *scope); 217 218 AgsCompositeToolbar* ags_composite_toolbar_new(); 219 220 G_END_DECLS 221 222 #endif /*__AGS_COMPOSITE_TOOLBAR_H__*/ 223