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