1 /* 2 * Copyright (C) 2019-2020 Alexandros Theodotou <alex at zrythm dot org> 3 * 4 * This file is part of Zrythm 5 * 6 * Zrythm is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU Affero 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 * Zrythm 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 Affero General Public License for more details. 15 * 16 * You should have received a copy of the GNU Affero General Public License 17 * along with Zrythm. If not, see <https://www.gnu.org/licenses/>. 18 */ 19 20 /** 21 * \file 22 * 23 * UI event. 24 */ 25 #ifndef __GUI_BACKEND_EVENT_H__ 26 #define __GUI_BACKEND_EVENT_H__ 27 28 /** 29 * @addtogroup events 30 * 31 * @{ 32 */ 33 34 typedef enum EventType 35 { 36 /* arranger objects */ 37 ET_ARRANGER_OBJECT_CREATED, 38 ET_ARRANGER_OBJECT_REMOVED, 39 ET_ARRANGER_OBJECT_CHANGED, 40 41 /* arranger_selections */ 42 ET_ARRANGER_SELECTIONS_CREATED, 43 ET_ARRANGER_SELECTIONS_CHANGED, 44 ET_ARRANGER_SELECTIONS_REMOVED, 45 ET_ARRANGER_SELECTIONS_MOVED, 46 ET_ARRANGER_SELECTIONS_QUANTIZED, 47 48 /** Redraws all arrangers. */ 49 ET_ARRANGER_SELECTIONS_CHANGED_REDRAW_EVERYTHING, 50 51 /** To be used after an action is finished to 52 * redraw everything. */ 53 ET_ARRANGER_SELECTIONS_ACTION_FINISHED, 54 55 /** also for channels */ 56 ET_TRACK_STATE_CHANGED, 57 /** works for all rulers */ 58 ET_RULER_STATE_CHANGED, 59 ET_AUTOMATION_TRACK_ADDED, 60 ET_AUTOMATION_TRACK_REMOVED, 61 ET_TIME_SIGNATURE_CHANGED, 62 ET_TRACK_ADDED, 63 ET_TRACK_CHANGED, 64 ET_TRACK_COLOR_CHANGED, 65 ET_TRACK_NAME_CHANGED, 66 ET_CHANNEL_SEND_CHANGED, 67 68 ET_RULER_DISPLAY_TYPE_CHANGED, 69 70 ET_TRANSPORT_TOTAL_BARS_CHANGED, 71 72 ET_TRACK_AUTOMATION_VISIBILITY_CHANGED, 73 ET_AUTOMATION_TRACK_CHANGED, 74 75 /** 76 * ZRegion (clip) to show in the piano roll 77 * changed. 78 * 79 * Eg., a region in the timeline was clicked. 80 */ 81 ET_CLIP_EDITOR_REGION_CHANGED, 82 83 /** 84 * Clip marker (clip start, loop start, loop end) 85 * position changed. 86 */ 87 ET_CLIP_MARKER_POS_CHANGED, 88 89 ET_UNDO_REDO_ACTION_DONE, 90 ET_RANGE_SELECTION_CHANGED, 91 ET_TIMELINE_LOOP_MARKER_POS_CHANGED, 92 ET_TIMELINE_PUNCH_MARKER_POS_CHANGED, 93 ET_TIMELINE_SONG_MARKER_POS_CHANGED, 94 ET_RULER_SIZE_CHANGED, 95 96 ET_LOOP_TOGGLED, 97 98 /** Selected tool (mode) changed. */ 99 ET_TOOL_CHANGED, 100 101 /** 102 * Zoom level or view area changed. 103 * 104 * Arg: RulerWidget pointer. 105 */ 106 ET_RULER_VIEWPORT_CHANGED, 107 108 ET_PLUGIN_ADDED, 109 ET_PLUGINS_ADDED, 110 ET_PLUGINS_REMOVED, 111 ET_PLUGIN_DELETED, 112 ET_PLUGIN_CRASHED, 113 ET_PLAYHEAD_POS_CHANGED, 114 ET_PLAYHEAD_POS_CHANGED_MANUALLY, 115 ET_AUTOMATION_VALUE_CHANGED, 116 117 ET_TRACKLIST_SELECTIONS_CHANGED, 118 119 /** Plugin visibility parameter changed, should 120 * close/open UI. */ 121 ET_PLUGIN_VISIBILITY_CHANGED, 122 123 /** Plugin UI opened or closed, should redraw */ 124 ET_PLUGIN_WINDOW_VISIBILITY_CHANGED, 125 126 ET_PLUGIN_STATE_CHANGED, 127 128 ET_TRACKS_ADDED, 129 ET_TRACKS_REMOVED, 130 ET_TRACKS_MOVED, 131 ET_CHANNEL_REMOVED, 132 ET_REFRESH_ARRANGER, 133 ET_MIXER_SELECTIONS_CHANGED, 134 ET_CHANNEL_OUTPUT_CHANGED, 135 ET_CHANNEL_SLOTS_CHANGED, 136 137 ET_MODULATOR_ADDED, 138 ET_RT_SELECTIONS_CHANGED, 139 ET_PINNED_TRACKLIST_SIZE_CHANGED, 140 141 /** 142 * Drum mode changed. 143 * 144 * Arg: Track pointer. 145 */ 146 ET_DRUM_MODE_CHANGED, 147 148 /** 149 * Track lanes visibility changed. 150 * 151 * Arg: (null). 152 */ 153 ET_TRACK_LANES_VISIBILITY_CHANGED, 154 155 /** 156 * Track lane added. 157 * 158 * Arg: (null). 159 */ 160 ET_TRACK_LANE_ADDED, 161 162 /** 163 * Track lane removed. 164 * 165 * Arg: (null). 166 */ 167 ET_TRACK_LANE_REMOVED, 168 169 ET_PIANO_ROLL_HIGHLIGHTING_CHANGED, 170 ET_PIANO_ROLL_MIDI_MODIFIER_CHANGED, 171 ET_AUTOMATION_TRACKLIST_AT_REMOVED, 172 ET_ARRANGER_SELECTIONS_IN_TRANSIT, 173 ET_CHORD_KEY_CHANGED, 174 ET_JACK_TRANSPORT_TYPE_CHANGED, 175 ET_TRACK_VISIBILITY_CHANGED, 176 ET_SELECTING_IN_ARRANGER, 177 ET_TRACKS_RESIZED, 178 ET_CLIP_EDITOR_FIRST_TIME_REGION_SELECTED, 179 ET_BPM_CHANGED, 180 ET_CHANNEL_FADER_VAL_CHANGED, 181 ET_PIANO_ROLL_KEY_HEIGHT_CHANGED, 182 183 /** 184 * Trial limit reached. 185 * 186 * Used to show a window to inform the user. 187 */ 188 ET_TRIAL_LIMIT_REACHED, 189 190 /** Sent after the main window finishes loading. */ 191 ET_MAIN_WINDOW_LOADED, 192 193 /** Sent when a project is loaded. */ 194 ET_PROJECT_LOADED, 195 196 /** Sent when a project is saved. */ 197 ET_PROJECT_SAVED, 198 199 /** Sent when plugin latency changes, to update 200 * the graph. */ 201 ET_PLUGIN_LATENCY_CHANGED, 202 203 /** Arranger highlight rectangle changed. */ 204 ET_ARRANGER_HIGHLIGHT_CHANGED, 205 206 ET_ENGINE_ACTIVATE_CHANGED, 207 ET_ENGINE_BUFFER_SIZE_CHANGED, 208 ET_ENGINE_SAMPLE_RATE_CHANGED, 209 ET_MIDI_BINDINGS_CHANGED, 210 ET_PORT_CONNECTION_CHANGED, 211 ET_EDITOR_FUNCTION_APPLIED, 212 213 ET_SPLASH_CLOSED, 214 215 ET_AUTOMATION_VALUE_VISIBILITY_CHANGED, 216 ET_PROJECT_SELECTION_TYPE_CHANGED, 217 218 /** Range selection changed in audio editor. */ 219 ET_AUDIO_SELECTIONS_RANGE_CHANGED, 220 221 ET_PLUGIN_COLLETIONS_CHANGED, 222 223 ET_SNAP_GRID_OPTIONS_CHANGED, 224 225 ET_TRANSPORT_RECORDING_ON_OFF_CHANGED, 226 227 /** 228 * Track freeze status changed. 229 * 230 * Param: Track. 231 */ 232 ET_TRACK_FREEZE_CHANGED, 233 234 /** Log has new unseen warnings or warnings have 235 * been seen. */ 236 ET_LOG_WARNING_STATE_CHANGED, 237 238 /** 239 * Follow playhead/scroll edges state changed. 240 */ 241 ET_PLAYHEAD_SCROLL_MODE_CHANGED, 242 243 /** 244 * Fader button (mute/solo/etc) changed. 245 * 246 * Param: pointer to Track. 247 */ 248 ET_TRACK_FADER_BUTTON_CHANGED, 249 250 /** 251 * Plugin preset saved. 252 * 253 * Arg: Plugin. 254 */ 255 ET_PLUGIN_PRESET_SAVED, 256 257 /** 258 * Plugin preset loaded. 259 * 260 * Arg: Plugin. 261 */ 262 ET_PLUGIN_PRESET_LOADED, 263 264 /** 265 * Track folded status changed. 266 * 267 * Arg: track. 268 */ 269 ET_TRACK_FOLD_CHANGED, 270 271 /** 272 * Channel MIDI FX revealed status changed in the 273 * mixer. 274 * 275 * Arg: Pointer to Channel. 276 */ 277 ET_MIXER_CHANNEL_MIDI_FX_EXPANDED_CHANGED, 278 279 /** 280 * Channel inserts revealed status changed in the 281 * mixer. 282 * 283 * Arg: Pointer to Channel. 284 */ 285 ET_MIXER_CHANNEL_INSERTS_EXPANDED_CHANGED, 286 287 /** 288 * Channel sends revealed status changed in the 289 * mixer. 290 * 291 * Arg: Pointer to Channel. 292 */ 293 ET_MIXER_CHANNEL_SENDS_EXPANDED_CHANGED, 294 295 /** 296 * Double click (or similar action) on region. 297 * 298 * Arg: None. 299 */ 300 ET_REGION_ACTIVATED, 301 302 /** 303 * Piano roll key pressed or unpressed. 304 * 305 * Arg: None. 306 */ 307 ET_PIANO_ROLL_KEY_ON_OFF, 308 309 /** 310 * Velocities have been ramped. 311 * 312 * Arg: None. 313 */ 314 ET_VELOCITIES_RAMPED, 315 316 /** 317 * Audio region fade in/out changed. 318 * 319 * Arg: ZRegion pointer. 320 */ 321 ET_AUDIO_REGION_FADE_IN_CHANGED, 322 ET_AUDIO_REGION_FADE_OUT_CHANGED, 323 324 /** 325 * Audio region gain changed. 326 * 327 * Arg: ZRegion pointer. 328 */ 329 ET_AUDIO_REGION_GAIN_CHANGED, 330 } EventType; 331 332 /** 333 * A Zrythm event. 334 */ 335 typedef struct ZEvent 336 { 337 /** Event type. */ 338 EventType type; 339 340 /** Argument. */ 341 void * arg; 342 343 /** Source file initialized from. */ 344 const char * file; 345 346 /** Function initialized from. */ 347 const char * func; 348 349 /** Line no initialized from. */ 350 int lineno; 351 352 /** Backtrace. */ 353 char * backtrace; 354 } ZEvent; 355 356 ZEvent * 357 event_new (void); 358 359 void 360 event_free (ZEvent * self); 361 362 /** 363 * @} 364 */ 365 366 #endif 367