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 #include <ags/X/editor/ags_composite_toolbar_callbacks.h>
21 
22 #include <ags/X/ags_ui_provider.h>
23 #include <ags/X/ags_window.h>
24 #include <ags/X/ags_composite_editor.h>
25 #include <ags/X/ags_notation_editor.h>
26 #include <ags/X/ags_sheet_window.h>
27 #include <ags/X/ags_sheet_editor.h>
28 #include <ags/X/ags_automation_window.h>
29 #include <ags/X/ags_automation_editor.h>
30 #include <ags/X/ags_wave_window.h>
31 #include <ags/X/ags_wave_editor.h>
32 
33 void
ags_composite_toolbar_position_callback(GtkToolButton * button,AgsCompositeToolbar * composite_toolbar)34 ags_composite_toolbar_position_callback(GtkToolButton *button, AgsCompositeToolbar *composite_toolbar)
35 {
36   if(composite_toolbar->block_selected_tool){
37     return;
38   }
39 
40   composite_toolbar->block_selected_tool = TRUE;
41 
42   ags_composite_toolbar_set_selected_tool(composite_toolbar,
43 					  (GtkToggleToolButton *) button);
44 
45   composite_toolbar->block_selected_tool = FALSE;
46 }
47 
48 void
ags_composite_toolbar_edit_callback(GtkToolButton * button,AgsCompositeToolbar * composite_toolbar)49 ags_composite_toolbar_edit_callback(GtkToolButton *button, AgsCompositeToolbar *composite_toolbar)
50 {
51   if(composite_toolbar->block_selected_tool){
52     return;
53   }
54 
55   composite_toolbar->block_selected_tool = TRUE;
56 
57   ags_composite_toolbar_set_selected_tool(composite_toolbar,
58 					  (GtkToggleToolButton *) button);
59 
60   composite_toolbar->block_selected_tool = FALSE;
61 }
62 
63 void
ags_composite_toolbar_clear_callback(GtkToolButton * button,AgsCompositeToolbar * composite_toolbar)64 ags_composite_toolbar_clear_callback(GtkToolButton *button, AgsCompositeToolbar *composite_toolbar)
65 {
66   if(composite_toolbar->block_selected_tool){
67     return;
68   }
69 
70   composite_toolbar->block_selected_tool = TRUE;
71 
72   ags_composite_toolbar_set_selected_tool(composite_toolbar,
73 					  (GtkToggleToolButton *) button);
74 
75   composite_toolbar->block_selected_tool = FALSE;
76 }
77 
78 void
ags_composite_toolbar_select_callback(GtkToolButton * button,AgsCompositeToolbar * composite_toolbar)79 ags_composite_toolbar_select_callback(GtkToolButton *button, AgsCompositeToolbar *composite_toolbar)
80 {
81   if(composite_toolbar->block_selected_tool){
82     return;
83   }
84 
85   composite_toolbar->block_selected_tool = TRUE;
86 
87   ags_composite_toolbar_set_selected_tool(composite_toolbar,
88 					  (GtkToggleToolButton *) button);
89 
90   composite_toolbar->block_selected_tool = FALSE;
91 }
92 
93 void
ags_composite_toolbar_invert_callback(GtkToolButton * button,AgsCompositeToolbar * composite_toolbar)94 ags_composite_toolbar_invert_callback(GtkToolButton *button, AgsCompositeToolbar *composite_toolbar)
95 {
96   AgsCompositeEditor *composite_editor;
97   AgsNotationEditor *notation_editor;
98   AgsSheetEditor *sheet_editor;
99   AgsAutomationEditor *automation_editor;
100   AgsWaveEditor *wave_editor;
101 
102   AgsApplicationContext *application_context;
103 
104   gboolean success;
105 
106   application_context = ags_application_context_get_instance();
107 
108   composite_editor = (AgsCompositeEditor *) ags_ui_provider_get_composite_editor(AGS_UI_PROVIDER(application_context));
109 
110   notation_editor = NULL;
111   sheet_editor = NULL;
112   automation_editor = NULL;
113   wave_editor = NULL;
114 
115   success = FALSE;
116 
117   if(composite_editor != NULL){
118     ags_composite_editor_invert(composite_editor);
119 
120     success = TRUE;
121   }else{
122     notation_editor = gtk_widget_get_ancestor(composite_toolbar,
123 					      AGS_TYPE_NOTATION_EDITOR);
124 
125     if(notation_editor != NULL){
126       ags_notation_editor_invert(notation_editor);
127 
128       success = TRUE;
129     }else{
130       sheet_editor = gtk_widget_get_ancestor(composite_toolbar,
131 					     AGS_TYPE_SHEET_EDITOR);
132     }
133 
134     if(sheet_editor != NULL){
135       g_warning("invert not supported");
136 
137       success = TRUE;
138     }else{
139       if(notation_editor == NULL){
140 	automation_editor = gtk_widget_get_ancestor(composite_toolbar,
141 						    AGS_TYPE_AUTOMATION_EDITOR);
142       }
143     }
144 
145     if(automation_editor != NULL){
146       g_warning("invert not supported");
147 
148       success = TRUE;
149     }else{
150       if(notation_editor == NULL &&
151 	 sheet_editor == NULL){
152 	wave_editor = gtk_widget_get_ancestor(composite_toolbar,
153 					      AGS_TYPE_WAVE_EDITOR);
154       }
155     }
156 
157     if(wave_editor != NULL){
158       g_warning("invert not supported");
159 
160       success = TRUE;
161     }
162   }
163 }
164 
165 void
ags_composite_toolbar_copy_callback(GtkToolButton * button,AgsCompositeToolbar * composite_toolbar)166 ags_composite_toolbar_copy_callback(GtkToolButton *button, AgsCompositeToolbar *composite_toolbar)
167 {
168   AgsCompositeEditor *composite_editor;
169   AgsNotationEditor *notation_editor;
170   AgsSheetEditor *sheet_editor;
171   AgsAutomationEditor *automation_editor;
172   AgsWaveEditor *wave_editor;
173 
174   AgsApplicationContext *application_context;
175 
176   gboolean success;
177 
178   application_context = ags_application_context_get_instance();
179 
180   composite_editor = (AgsCompositeEditor *) ags_ui_provider_get_composite_editor(AGS_UI_PROVIDER(application_context));
181 
182   notation_editor = NULL;
183   sheet_editor = NULL;
184   automation_editor = NULL;
185   wave_editor = NULL;
186 
187   success = FALSE;
188 
189   if(composite_editor != NULL){
190     ags_composite_editor_copy(composite_editor);
191 
192     success = TRUE;
193   }else{
194     notation_editor = gtk_widget_get_ancestor(composite_toolbar,
195 					      AGS_TYPE_NOTATION_EDITOR);
196 
197     if(notation_editor != NULL){
198       ags_notation_editor_copy(notation_editor);
199 
200       success = TRUE;
201     }else{
202       sheet_editor = gtk_widget_get_ancestor(composite_toolbar,
203 					     AGS_TYPE_SHEET_EDITOR);
204     }
205 
206     if(sheet_editor != NULL){
207       ags_sheet_editor_copy(sheet_editor);
208 
209       success = TRUE;
210     }else{
211       if(notation_editor == NULL){
212 	automation_editor = gtk_widget_get_ancestor(composite_toolbar,
213 						    AGS_TYPE_AUTOMATION_EDITOR);
214       }
215     }
216 
217     if(automation_editor != NULL){
218       ags_automation_editor_copy(automation_editor);
219 
220       success = TRUE;
221     }else{
222       if(notation_editor == NULL &&
223 	 sheet_editor == NULL){
224 	wave_editor = gtk_widget_get_ancestor(composite_toolbar,
225 					      AGS_TYPE_WAVE_EDITOR);
226       }
227     }
228 
229     if(wave_editor != NULL){
230       ags_wave_editor_copy(wave_editor);
231 
232       success = TRUE;
233     }
234   }
235 }
236 
237 void
ags_composite_toolbar_cut_callback(GtkToolButton * button,AgsCompositeToolbar * composite_toolbar)238 ags_composite_toolbar_cut_callback(GtkToolButton *button, AgsCompositeToolbar *composite_toolbar)
239 {
240   AgsCompositeEditor *composite_editor;
241   AgsNotationEditor *notation_editor;
242   AgsSheetEditor *sheet_editor;
243   AgsAutomationEditor *automation_editor;
244   AgsWaveEditor *wave_editor;
245 
246   AgsApplicationContext *application_context;
247 
248   gboolean success;
249 
250   application_context = ags_application_context_get_instance();
251 
252   composite_editor = (AgsCompositeEditor *) ags_ui_provider_get_composite_editor(AGS_UI_PROVIDER(application_context));
253 
254   notation_editor = NULL;
255   sheet_editor = NULL;
256   automation_editor = NULL;
257   wave_editor = NULL;
258 
259   success = FALSE;
260 
261   if(composite_editor != NULL){
262     ags_composite_editor_cut(composite_editor);
263 
264     success = TRUE;
265   }else{
266     notation_editor = gtk_widget_get_ancestor(composite_toolbar,
267 					      AGS_TYPE_NOTATION_EDITOR);
268 
269     if(notation_editor != NULL){
270       ags_notation_editor_cut(notation_editor);
271 
272       success = TRUE;
273     }else{
274       sheet_editor = gtk_widget_get_ancestor(composite_toolbar,
275 					     AGS_TYPE_SHEET_EDITOR);
276     }
277 
278     if(sheet_editor != NULL){
279       ags_sheet_editor_cut(sheet_editor);
280 
281       success = TRUE;
282     }else{
283       if(notation_editor == NULL){
284 	automation_editor = gtk_widget_get_ancestor(composite_toolbar,
285 						    AGS_TYPE_AUTOMATION_EDITOR);
286       }
287     }
288 
289     if(automation_editor != NULL){
290       ags_automation_editor_cut(automation_editor);
291 
292       success = TRUE;
293     }else{
294       if(notation_editor == NULL &&
295 	 sheet_editor == NULL){
296 	wave_editor = gtk_widget_get_ancestor(composite_toolbar,
297 					      AGS_TYPE_WAVE_EDITOR);
298       }
299     }
300 
301     if(wave_editor != NULL){
302       ags_wave_editor_cut(wave_editor);
303 
304       success = TRUE;
305     }
306   }
307 }
308 
309 void
ags_composite_toolbar_paste_callback(GtkToolButton * button,AgsCompositeToolbar * composite_toolbar)310 ags_composite_toolbar_paste_callback(GtkToolButton *button, AgsCompositeToolbar *composite_toolbar)
311 {
312   AgsCompositeEditor *composite_editor;
313   AgsNotationEditor *notation_editor;
314   AgsSheetEditor *sheet_editor;
315   AgsAutomationEditor *automation_editor;
316   AgsWaveEditor *wave_editor;
317 
318   AgsApplicationContext *application_context;
319 
320   gboolean success;
321 
322   application_context = ags_application_context_get_instance();
323 
324   composite_editor = (AgsCompositeEditor *) ags_ui_provider_get_composite_editor(AGS_UI_PROVIDER(application_context));
325 
326   notation_editor = NULL;
327   sheet_editor = NULL;
328   automation_editor = NULL;
329   wave_editor = NULL;
330 
331   success = FALSE;
332 
333   if(composite_editor != NULL){
334     ags_composite_editor_paste(composite_editor);
335 
336     success = TRUE;
337   }else{
338     notation_editor = gtk_widget_get_ancestor(composite_toolbar,
339 					      AGS_TYPE_NOTATION_EDITOR);
340 
341     if(notation_editor != NULL){
342       ags_notation_editor_paste(notation_editor);
343 
344       success = TRUE;
345     }else{
346       sheet_editor = gtk_widget_get_ancestor(composite_toolbar,
347 					     AGS_TYPE_SHEET_EDITOR);
348     }
349 
350     if(sheet_editor != NULL){
351       ags_sheet_editor_paste(sheet_editor);
352 
353       success = TRUE;
354     }else{
355       if(notation_editor == NULL){
356 	automation_editor = gtk_widget_get_ancestor(composite_toolbar,
357 						    AGS_TYPE_AUTOMATION_EDITOR);
358       }
359     }
360 
361     if(automation_editor != NULL){
362       ags_automation_editor_paste(automation_editor);
363 
364       success = TRUE;
365     }else{
366       if(notation_editor == NULL &&
367 	 sheet_editor == NULL){
368 	wave_editor = gtk_widget_get_ancestor(composite_toolbar,
369 					      AGS_TYPE_WAVE_EDITOR);
370       }
371     }
372 
373     if(wave_editor != NULL){
374       ags_wave_editor_paste(wave_editor);
375 
376       success = TRUE;
377     }
378   }
379 }
380 
381 void
ags_composite_toolbar_paste_match_audio_channel_callback(GtkMenuItem * button,AgsCompositeToolbar * composite_toolbar)382 ags_composite_toolbar_paste_match_audio_channel_callback(GtkMenuItem *button, AgsCompositeToolbar *composite_toolbar)
383 {
384   //TODO:JK: implement me
385 }
386 
387 void
ags_composite_toolbar_paste_match_line_callback(GtkMenuItem * button,AgsCompositeToolbar * composite_toolbar)388 ags_composite_toolbar_paste_match_line_callback(GtkMenuItem *button, AgsCompositeToolbar *composite_toolbar)
389 {
390   //TODO:JK: implement me
391 }
392 
393 void
ags_composite_toolbar_paste_no_duplicates_callback(GtkMenuItem * button,AgsCompositeToolbar * composite_toolbar)394 ags_composite_toolbar_paste_no_duplicates_callback(GtkMenuItem *button, AgsCompositeToolbar *composite_toolbar)
395 {
396   //TODO:JK: implement me
397 }
398 
399 void
ags_composite_toolbar_menu_tool_popup_notation_move_note_callback(GtkMenuItem * item,AgsCompositeToolbar * composite_toolbar)400 ags_composite_toolbar_menu_tool_popup_notation_move_note_callback(GtkMenuItem *item, AgsCompositeToolbar *composite_toolbar)
401 {
402   //TODO:JK: implement me
403 }
404 
405 void
ags_composite_toolbar_menu_tool_popup_notation_crop_note_callback(GtkMenuItem * item,AgsCompositeToolbar * composite_toolbar)406 ags_composite_toolbar_menu_tool_popup_notation_crop_note_callback(GtkMenuItem *item, AgsCompositeToolbar *composite_toolbar)
407 {
408   //TODO:JK: implement me
409 }
410 
411 void
ags_composite_toolbar_menu_tool_popup_notation_select_note_callback(GtkMenuItem * item,AgsCompositeToolbar * composite_toolbar)412 ags_composite_toolbar_menu_tool_popup_notation_select_note_callback(GtkMenuItem *item, AgsCompositeToolbar *composite_toolbar)
413 {
414   //TODO:JK: implement me
415 }
416 
417 void
ags_composite_toolbar_menu_tool_popup_notation_position_cursor_callback(GtkMenuItem * item,AgsCompositeToolbar * composite_toolbar)418 ags_composite_toolbar_menu_tool_popup_notation_position_cursor_callback(GtkMenuItem *item, AgsCompositeToolbar *composite_toolbar)
419 {
420   //TODO:JK: implement me
421 }
422 
423 void
ags_composite_toolbar_menu_tool_popup_sheet_position_cursor_callback(GtkMenuItem * item,AgsCompositeToolbar * composite_toolbar)424 ags_composite_toolbar_menu_tool_popup_sheet_position_cursor_callback(GtkMenuItem *item, AgsCompositeToolbar *composite_toolbar)
425 {
426   //TODO:JK: implement me
427 }
428 
429 void
ags_composite_toolbar_menu_tool_popup_automation_select_acceleration_callback(GtkMenuItem * item,AgsCompositeToolbar * composite_toolbar)430 ags_composite_toolbar_menu_tool_popup_automation_select_acceleration_callback(GtkMenuItem *item, AgsCompositeToolbar *composite_toolbar)
431 {
432   //TODO:JK: implement me
433 }
434 
435 void
ags_composite_toolbar_menu_tool_popup_automation_ramp_acceleration_callback(GtkMenuItem * item,AgsCompositeToolbar * composite_toolbar)436 ags_composite_toolbar_menu_tool_popup_automation_ramp_acceleration_callback(GtkMenuItem *item, AgsCompositeToolbar *composite_toolbar)
437 {
438   //TODO:JK: implement me
439 }
440 
441 void
ags_composite_toolbar_menu_tool_popup_automation_position_cursor_callback(GtkMenuItem * item,AgsCompositeToolbar * composite_toolbar)442 ags_composite_toolbar_menu_tool_popup_automation_position_cursor_callback(GtkMenuItem *item, AgsCompositeToolbar *composite_toolbar)
443 {
444   //TODO:JK: implement me
445 }
446 
447 void
ags_composite_toolbar_menu_tool_popup_wave_select_buffer_callback(GtkMenuItem * item,AgsCompositeToolbar * composite_toolbar)448 ags_composite_toolbar_menu_tool_popup_wave_select_buffer_callback(GtkMenuItem *item, AgsCompositeToolbar *composite_toolbar)
449 {
450   //TODO:JK: implement me
451 }
452 
453 void
ags_composite_toolbar_menu_tool_popup_wave_position_cursor_callback(GtkMenuItem * item,AgsCompositeToolbar * composite_toolbar)454 ags_composite_toolbar_menu_tool_popup_wave_position_cursor_callback(GtkMenuItem *item, AgsCompositeToolbar *composite_toolbar)
455 {
456   //TODO:JK: implement me
457 }
458 
459 void
ags_composite_toolbar_menu_tool_popup_enable_all_audio_channels_callback(GtkMenuItem * item,AgsCompositeToolbar * composite_toolbar)460 ags_composite_toolbar_menu_tool_popup_enable_all_audio_channels_callback(GtkMenuItem *item, AgsCompositeToolbar *composite_toolbar)
461 {
462   //TODO:JK: implement me
463 }
464 
465 void
ags_composite_toolbar_menu_tool_popup_disable_all_audio_channels_callback(GtkMenuItem * item,AgsCompositeToolbar * composite_toolbar)466 ags_composite_toolbar_menu_tool_popup_disable_all_audio_channels_callback(GtkMenuItem *item, AgsCompositeToolbar *composite_toolbar)
467 {
468   //TODO:JK: implement me
469 }
470 
471 void
ags_composite_toolbar_menu_tool_popup_enable_all_lines_callback(GtkMenuItem * item,AgsCompositeToolbar * composite_toolbar)472 ags_composite_toolbar_menu_tool_popup_enable_all_lines_callback(GtkMenuItem *item, AgsCompositeToolbar *composite_toolbar)
473 {
474   //TODO:JK: implement me
475 }
476 
477 void
ags_composite_toolbar_menu_tool_popup_disable_all_lines_callback(GtkMenuItem * item,AgsCompositeToolbar * composite_toolbar)478 ags_composite_toolbar_menu_tool_popup_disable_all_lines_callback(GtkMenuItem *item, AgsCompositeToolbar *composite_toolbar)
479 {
480   //TODO:JK: implement me
481 }
482 
483 void
ags_composite_toolbar_zoom_callback(GtkComboBox * combo_box,AgsCompositeToolbar * composite_toolbar)484 ags_composite_toolbar_zoom_callback(GtkComboBox *combo_box, AgsCompositeToolbar *composite_toolbar)
485 {
486   //TODO:JK: implement me
487 }
488 
489 void
ags_composite_toolbar_opacity_callback(GtkSpinButton * spin_button,AgsCompositeToolbar * composite_toolbar)490 ags_composite_toolbar_opacity_callback(GtkSpinButton *spin_button, AgsCompositeToolbar *composite_toolbar)
491 {
492   //TODO:JK: implement me
493 }
494