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