Initial commit
[fillmore] / src / fillmore / fillmore / ProjectProperties.c
1 /* ProjectProperties.c generated by valac, the Vala compiler
2  * generated from ProjectProperties.vala, do not modify */
3
4 /* Copyright 2009-2010 Yorba Foundation
5  *
6  * This software is licensed under the GNU Lesser General Public License
7  * (version 2.1 or later).  See the COPYING file in this distribution. 
8  */
9
10 #include <glib.h>
11 #include <glib-object.h>
12 #include <gtk/gtk.h>
13 #include <marina.h>
14 #include <float.h>
15 #include <math.h>
16 #include <stdlib.h>
17 #include <string.h>
18
19
20 #define TYPE_PROJECT_PROPERTIES (project_properties_get_type ())
21 #define PROJECT_PROPERTIES(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PROJECT_PROPERTIES, ProjectProperties))
22 #define PROJECT_PROPERTIES_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PROJECT_PROPERTIES, ProjectPropertiesClass))
23 #define IS_PROJECT_PROPERTIES(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PROJECT_PROPERTIES))
24 #define IS_PROJECT_PROPERTIES_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PROJECT_PROPERTIES))
25 #define PROJECT_PROPERTIES_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PROJECT_PROPERTIES, ProjectPropertiesClass))
26
27 typedef struct _ProjectProperties ProjectProperties;
28 typedef struct _ProjectPropertiesClass ProjectPropertiesClass;
29 typedef struct _ProjectPropertiesPrivate ProjectPropertiesPrivate;
30 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
31 #define _g_free0(var) (var = (g_free (var), NULL))
32
33 struct _ProjectProperties {
34         GtkDialog parent_instance;
35         ProjectPropertiesPrivate * priv;
36 };
37
38 struct _ProjectPropertiesClass {
39         GtkDialogClass parent_class;
40 };
41
42 struct _ProjectPropertiesPrivate {
43         GTimeVal* tap_time;
44         gint tap_time_length1;
45         gint _tap_time_size_;
46         gint tap_index;
47         gboolean sample_full;
48         GtkAdjustment* tempo_adjustment;
49         GtkAdjustment* volume_adjustment;
50         GtkComboBox* timesignature_combo;
51         GtkToggleButton* click_during_play;
52         GtkToggleButton* click_during_record;
53 };
54
55
56 static gpointer project_properties_parent_class = NULL;
57
58 GType project_properties_get_type (void);
59 #define PROJECT_PROPERTIES_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_PROJECT_PROPERTIES, ProjectPropertiesPrivate))
60 enum  {
61         PROJECT_PROPERTIES_DUMMY_PROPERTY
62 };
63 #define PROJECT_PROPERTIES_NUMBER_OF_SAMPLES 4
64 #define PROJECT_PROPERTIES_G_USEC_PER_SEC ((glong) 1000000)
65 void project_properties_set_tempo (ProjectProperties* self, gint tempo);
66 void project_properties_set_volume (ProjectProperties* self, double volume);
67 static void project_properties_set_during_play (ProjectProperties* self, gboolean active);
68 static void project_properties_set_during_record (ProjectProperties* self, gboolean active);
69 static void project_properties_set_time_signature (ProjectProperties* self, Fraction* time_signature);
70 void project_properties_setup (ProjectProperties* self, ModelProject* project, GtkBuilder* builder);
71 gint project_properties_get_tempo (ProjectProperties* self);
72 double project_properties_get_click_volume (ProjectProperties* self);
73 void project_properties_get_time_signature (ProjectProperties* self, Fraction* result);
74 gboolean project_properties_during_play (ProjectProperties* self);
75 gboolean project_properties_during_record (ProjectProperties* self);
76 static void project_properties_calculate_bpm (ProjectProperties* self);
77 void project_properties_on_tap (ProjectProperties* self);
78 ProjectProperties* project_properties_new (void);
79 ProjectProperties* project_properties_construct (GType object_type);
80 static void project_properties_finalize (GObject* obj);
81 static int _vala_strcmp0 (const char * str1, const char * str2);
82
83
84
85 static gpointer _g_object_ref0 (gpointer self) {
86         return self ? g_object_ref (self) : NULL;
87 }
88
89
90 #line 20 "ProjectProperties.vala"
91 void project_properties_setup (ProjectProperties* self, ModelProject* project, GtkBuilder* builder) {
92 #line 93 "ProjectProperties.c"
93         GtkAdjustment* _tmp0_;
94         GtkAdjustment* _tmp1_;
95         GtkComboBox* _tmp2_;
96         GtkToggleButton* _tmp3_;
97         GtkToggleButton* _tmp4_;
98         Fraction _tmp6_;
99         Fraction _tmp5_ = {0};
100 #line 20 "ProjectProperties.vala"
101         g_return_if_fail (IS_PROJECT_PROPERTIES (self));
102 #line 20 "ProjectProperties.vala"
103         g_return_if_fail (MODEL_IS_PROJECT (project));
104 #line 20 "ProjectProperties.vala"
105         g_return_if_fail (GTK_IS_BUILDER (builder));
106 #line 21 "ProjectProperties.vala"
107         self->priv->tempo_adjustment = (_tmp0_ = _g_object_ref0 (GTK_ADJUSTMENT (gtk_builder_get_object (builder, "tempo_adjustment"))), _g_object_unref0 (self->priv->tempo_adjustment), _tmp0_);
108 #line 22 "ProjectProperties.vala"
109         self->priv->volume_adjustment = (_tmp1_ = _g_object_ref0 (GTK_ADJUSTMENT (gtk_builder_get_object (builder, "volume_adjustment"))), _g_object_unref0 (self->priv->volume_adjustment), _tmp1_);
110 #line 23 "ProjectProperties.vala"
111         self->priv->timesignature_combo = (_tmp2_ = _g_object_ref0 (GTK_COMBO_BOX (gtk_builder_get_object (builder, "timesignature_combo"))), _g_object_unref0 (self->priv->timesignature_combo), _tmp2_);
112 #line 24 "ProjectProperties.vala"
113         self->priv->click_during_play = (_tmp3_ = _g_object_ref0 (GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "playback"))), _g_object_unref0 (self->priv->click_during_play), _tmp3_);
114 #line 25 "ProjectProperties.vala"
115         self->priv->click_during_record = (_tmp4_ = _g_object_ref0 (GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "record"))), _g_object_unref0 (self->priv->click_during_record), _tmp4_);
116 #line 26 "ProjectProperties.vala"
117         project_properties_set_tempo (self, model_tempo_information_get_bpm (MODEL_TEMPO_INFORMATION (project)));
118 #line 27 "ProjectProperties.vala"
119         project_properties_set_volume (self, project->click_volume);
120 #line 28 "ProjectProperties.vala"
121         project_properties_set_during_play (self, project->click_during_play);
122 #line 29 "ProjectProperties.vala"
123         project_properties_set_during_record (self, project->click_during_record);
124 #line 30 "ProjectProperties.vala"
125         project_properties_set_time_signature (self, (_tmp6_ = (model_tempo_information_get_time_signature (MODEL_TEMPO_INFORMATION (project), &_tmp5_), _tmp5_), &_tmp6_));
126 #line 127 "ProjectProperties.c"
127 }
128
129
130 #line 33 "ProjectProperties.vala"
131 void project_properties_set_tempo (ProjectProperties* self, gint tempo) {
132 #line 33 "ProjectProperties.vala"
133         g_return_if_fail (IS_PROJECT_PROPERTIES (self));
134 #line 34 "ProjectProperties.vala"
135         gtk_adjustment_set_value (self->priv->tempo_adjustment, (double) tempo);
136 #line 137 "ProjectProperties.c"
137 }
138
139
140 #line 37 "ProjectProperties.vala"
141 gint project_properties_get_tempo (ProjectProperties* self) {
142 #line 143 "ProjectProperties.c"
143         gint result = 0;
144 #line 37 "ProjectProperties.vala"
145         g_return_val_if_fail (IS_PROJECT_PROPERTIES (self), 0);
146 #line 147 "ProjectProperties.c"
147         result = (gint) gtk_adjustment_get_value (self->priv->tempo_adjustment);
148 #line 38 "ProjectProperties.vala"
149         return result;
150 #line 151 "ProjectProperties.c"
151 }
152
153
154 #line 41 "ProjectProperties.vala"
155 void project_properties_set_volume (ProjectProperties* self, double volume) {
156 #line 41 "ProjectProperties.vala"
157         g_return_if_fail (IS_PROJECT_PROPERTIES (self));
158 #line 42 "ProjectProperties.vala"
159         gtk_adjustment_set_value (self->priv->volume_adjustment, volume);
160 #line 161 "ProjectProperties.c"
161 }
162
163
164 #line 45 "ProjectProperties.vala"
165 double project_properties_get_click_volume (ProjectProperties* self) {
166 #line 167 "ProjectProperties.c"
167         double result = 0.0;
168 #line 45 "ProjectProperties.vala"
169         g_return_val_if_fail (IS_PROJECT_PROPERTIES (self), 0.0);
170 #line 171 "ProjectProperties.c"
171         result = gtk_adjustment_get_value (self->priv->volume_adjustment);
172 #line 46 "ProjectProperties.vala"
173         return result;
174 #line 175 "ProjectProperties.c"
175 }
176
177
178 #line 49 "ProjectProperties.vala"
179 void project_properties_get_time_signature (ProjectProperties* self, Fraction* result) {
180 #line 181 "ProjectProperties.c"
181         Fraction _tmp0_ = {0};
182 #line 49 "ProjectProperties.vala"
183         g_return_if_fail (IS_PROJECT_PROPERTIES (self));
184 #line 185 "ProjectProperties.c"
185         *result = (fraction_init_from_string (&_tmp0_, gtk_combo_box_get_active_text (self->priv->timesignature_combo)), _tmp0_);
186 #line 50 "ProjectProperties.vala"
187         return;
188 #line 189 "ProjectProperties.c"
189 }
190
191
192 #line 53 "ProjectProperties.vala"
193 static void project_properties_set_time_signature (ProjectProperties* self, Fraction* time_signature) {
194 #line 195 "ProjectProperties.c"
195         char* sig;
196         GtkTreeIter iter = {0};
197 #line 53 "ProjectProperties.vala"
198         g_return_if_fail (IS_PROJECT_PROPERTIES (self));
199 #line 54 "ProjectProperties.vala"
200         sig = fraction_to_string (time_signature);
201 #line 57 "ProjectProperties.vala"
202         if (gtk_tree_model_get_iter_first (gtk_combo_box_get_model (self->priv->timesignature_combo), &iter)) {
203 #line 204 "ProjectProperties.c"
204                 {
205                         gboolean _tmp0_;
206 #line 58 "ProjectProperties.vala"
207                         _tmp0_ = TRUE;
208 #line 58 "ProjectProperties.vala"
209                         while (TRUE) {
210 #line 211 "ProjectProperties.c"
211                                 char* s;
212 #line 58 "ProjectProperties.vala"
213                                 if (!_tmp0_) {
214 #line 65 "ProjectProperties.vala"
215                                         if (!gtk_tree_model_iter_next (gtk_combo_box_get_model (self->priv->timesignature_combo), &iter)) {
216 #line 65 "ProjectProperties.vala"
217                                                 break;
218 #line 219 "ProjectProperties.c"
219                                         }
220                                 }
221 #line 58 "ProjectProperties.vala"
222                                 _tmp0_ = FALSE;
223 #line 224 "ProjectProperties.c"
224                                 s = NULL;
225 #line 60 "ProjectProperties.vala"
226                                 gtk_tree_model_get (gtk_combo_box_get_model (self->priv->timesignature_combo), &iter, 0, &s, -1, -1);
227 #line 61 "ProjectProperties.vala"
228                                 if (_vala_strcmp0 (s, sig) == 0) {
229 #line 62 "ProjectProperties.vala"
230                                         gtk_combo_box_set_active_iter (self->priv->timesignature_combo, &iter);
231 #line 232 "ProjectProperties.c"
232                                         _g_free0 (s);
233                                         _g_free0 (sig);
234 #line 63 "ProjectProperties.vala"
235                                         return;
236 #line 237 "ProjectProperties.c"
237                                 }
238                                 _g_free0 (s);
239                         }
240                 }
241         }
242         _g_free0 (sig);
243 }
244
245
246 #line 69 "ProjectProperties.vala"
247 static void project_properties_set_during_play (ProjectProperties* self, gboolean active) {
248 #line 69 "ProjectProperties.vala"
249         g_return_if_fail (IS_PROJECT_PROPERTIES (self));
250 #line 70 "ProjectProperties.vala"
251         gtk_toggle_button_set_active (self->priv->click_during_play, active);
252 #line 253 "ProjectProperties.c"
253 }
254
255
256 #line 73 "ProjectProperties.vala"
257 gboolean project_properties_during_play (ProjectProperties* self) {
258 #line 259 "ProjectProperties.c"
259         gboolean result = FALSE;
260 #line 73 "ProjectProperties.vala"
261         g_return_val_if_fail (IS_PROJECT_PROPERTIES (self), FALSE);
262 #line 263 "ProjectProperties.c"
263         result = gtk_toggle_button_get_active (self->priv->click_during_play);
264 #line 74 "ProjectProperties.vala"
265         return result;
266 #line 267 "ProjectProperties.c"
267 }
268
269
270 #line 77 "ProjectProperties.vala"
271 static void project_properties_set_during_record (ProjectProperties* self, gboolean active) {
272 #line 77 "ProjectProperties.vala"
273         g_return_if_fail (IS_PROJECT_PROPERTIES (self));
274 #line 78 "ProjectProperties.vala"
275         gtk_toggle_button_set_active (self->priv->click_during_record, active);
276 #line 277 "ProjectProperties.c"
277 }
278
279
280 #line 81 "ProjectProperties.vala"
281 gboolean project_properties_during_record (ProjectProperties* self) {
282 #line 283 "ProjectProperties.c"
283         gboolean result = FALSE;
284 #line 81 "ProjectProperties.vala"
285         g_return_val_if_fail (IS_PROJECT_PROPERTIES (self), FALSE);
286 #line 287 "ProjectProperties.c"
287         result = gtk_toggle_button_get_active (self->priv->click_during_record);
288 #line 82 "ProjectProperties.vala"
289         return result;
290 #line 291 "ProjectProperties.c"
291 }
292
293
294 #line 85 "ProjectProperties.vala"
295 void project_properties_on_tap (ProjectProperties* self) {
296 #line 297 "ProjectProperties.c"
297         GTimeVal time_val = {0};
298 #line 85 "ProjectProperties.vala"
299         g_return_if_fail (IS_PROJECT_PROPERTIES (self));
300 #line 301 "ProjectProperties.c"
301         g_get_current_time (&time_val);
302 #line 87 "ProjectProperties.vala"
303         g_get_current_time (&time_val);
304 #line 88 "ProjectProperties.vala"
305         self->priv->tap_time[self->priv->tap_index] = time_val;
306 #line 89 "ProjectProperties.vala"
307         self->priv->tap_index = self->priv->tap_index + 1;
308 #line 90 "ProjectProperties.vala"
309         if (self->priv->tap_index == PROJECT_PROPERTIES_NUMBER_OF_SAMPLES) {
310 #line 91 "ProjectProperties.vala"
311                 self->priv->sample_full = TRUE;
312 #line 92 "ProjectProperties.vala"
313                 self->priv->tap_index = 0;
314 #line 315 "ProjectProperties.c"
315         }
316 #line 94 "ProjectProperties.vala"
317         project_properties_calculate_bpm (self);
318 #line 319 "ProjectProperties.c"
319 }
320
321
322 #line 97 "ProjectProperties.vala"
323 static void project_properties_calculate_bpm (ProjectProperties* self) {
324 #line 325 "ProjectProperties.c"
325         gint _tmp0_ = 0;
326         gint number_of_samples;
327         gint _tmp1_ = 0;
328         gint start_index;
329         double delta_sum;
330         double average;
331 #line 97 "ProjectProperties.vala"
332         g_return_if_fail (IS_PROJECT_PROPERTIES (self));
333 #line 98 "ProjectProperties.vala"
334         if (self->priv->sample_full) {
335 #line 98 "ProjectProperties.vala"
336                 _tmp0_ = PROJECT_PROPERTIES_NUMBER_OF_SAMPLES;
337 #line 338 "ProjectProperties.c"
338         } else {
339 #line 98 "ProjectProperties.vala"
340                 _tmp0_ = self->priv->tap_index;
341 #line 342 "ProjectProperties.c"
342         }
343 #line 98 "ProjectProperties.vala"
344         number_of_samples = _tmp0_;
345 #line 99 "ProjectProperties.vala"
346         if (number_of_samples < 2) {
347 #line 100 "ProjectProperties.vala"
348                 return;
349 #line 350 "ProjectProperties.c"
350         }
351 #line 103 "ProjectProperties.vala"
352         if (self->priv->sample_full) {
353 #line 103 "ProjectProperties.vala"
354                 _tmp1_ = self->priv->tap_index;
355 #line 356 "ProjectProperties.c"
356         } else {
357 #line 103 "ProjectProperties.vala"
358                 _tmp1_ = 0;
359 #line 360 "ProjectProperties.c"
360         }
361 #line 103 "ProjectProperties.vala"
362         start_index = _tmp1_;
363 #line 105 "ProjectProperties.vala"
364         delta_sum = (double) 0;
365 #line 366 "ProjectProperties.c"
366         {
367                 gint i;
368 #line 106 "ProjectProperties.vala"
369                 i = 0;
370 #line 371 "ProjectProperties.c"
371                 {
372                         gboolean _tmp2_;
373 #line 106 "ProjectProperties.vala"
374                         _tmp2_ = TRUE;
375 #line 106 "ProjectProperties.vala"
376                         while (TRUE) {
377 #line 378 "ProjectProperties.c"
378                                 gint current_index;
379                                 gint next_index;
380                                 glong difference;
381 #line 106 "ProjectProperties.vala"
382                                 if (!_tmp2_) {
383 #line 106 "ProjectProperties.vala"
384                                         i = i + 1;
385 #line 386 "ProjectProperties.c"
386                                 }
387 #line 106 "ProjectProperties.vala"
388                                 _tmp2_ = FALSE;
389 #line 106 "ProjectProperties.vala"
390                                 if (!(i < (number_of_samples - 1))) {
391 #line 106 "ProjectProperties.vala"
392                                         break;
393 #line 394 "ProjectProperties.c"
394                                 }
395 #line 107 "ProjectProperties.vala"
396                                 current_index = (i + start_index) % PROJECT_PROPERTIES_NUMBER_OF_SAMPLES;
397 #line 108 "ProjectProperties.vala"
398                                 next_index = (current_index + 1) % PROJECT_PROPERTIES_NUMBER_OF_SAMPLES;
399 #line 110 "ProjectProperties.vala"
400                                 difference = (((self->priv->tap_time[next_index].tv_sec - self->priv->tap_time[current_index].tv_sec) * PROJECT_PROPERTIES_G_USEC_PER_SEC) + self->priv->tap_time[next_index].tv_usec) - self->priv->tap_time[current_index].tv_usec;
401 #line 113 "ProjectProperties.vala"
402                                 if (difference > (5 * PROJECT_PROPERTIES_G_USEC_PER_SEC)) {
403 #line 115 "ProjectProperties.vala"
404                                         self->priv->tap_time[0] = self->priv->tap_time[self->priv->tap_index - 1];
405 #line 116 "ProjectProperties.vala"
406                                         self->priv->sample_full = FALSE;
407 #line 117 "ProjectProperties.vala"
408                                         self->priv->tap_index = 1;
409 #line 118 "ProjectProperties.vala"
410                                         return;
411 #line 412 "ProjectProperties.c"
412                                 }
413 #line 120 "ProjectProperties.vala"
414                                 delta_sum = delta_sum + ((double) difference);
415 #line 416 "ProjectProperties.c"
416                         }
417                 }
418         }
419 #line 122 "ProjectProperties.vala"
420         average = (delta_sum / (number_of_samples - 1)) / PROJECT_PROPERTIES_G_USEC_PER_SEC;
421 #line 123 "ProjectProperties.vala"
422         gtk_adjustment_set_value (self->priv->tempo_adjustment, (double) ((gint) (60.0 / average)));
423 #line 424 "ProjectProperties.c"
424 }
425
426
427 #line 7 "ProjectProperties.vala"
428 ProjectProperties* project_properties_construct (GType object_type) {
429 #line 430 "ProjectProperties.c"
430         ProjectProperties * self;
431         self = g_object_newv (object_type, 0, NULL);
432         return self;
433 }
434
435
436 #line 7 "ProjectProperties.vala"
437 ProjectProperties* project_properties_new (void) {
438 #line 7 "ProjectProperties.vala"
439         return project_properties_construct (TYPE_PROJECT_PROPERTIES);
440 #line 441 "ProjectProperties.c"
441 }
442
443
444 static void project_properties_class_init (ProjectPropertiesClass * klass) {
445         project_properties_parent_class = g_type_class_peek_parent (klass);
446         g_type_class_add_private (klass, sizeof (ProjectPropertiesPrivate));
447         G_OBJECT_CLASS (klass)->finalize = project_properties_finalize;
448 }
449
450
451 static void project_properties_instance_init (ProjectProperties * self) {
452         self->priv = PROJECT_PROPERTIES_GET_PRIVATE (self);
453         self->priv->tap_time = g_new0 (GTimeVal, PROJECT_PROPERTIES_NUMBER_OF_SAMPLES);
454         self->priv->tap_time_length1 = PROJECT_PROPERTIES_NUMBER_OF_SAMPLES;
455         self->priv->_tap_time_size_ = self->priv->tap_time_length1;
456         self->priv->tap_index = 0;
457         self->priv->sample_full = FALSE;
458 }
459
460
461 static void project_properties_finalize (GObject* obj) {
462         ProjectProperties * self;
463         self = PROJECT_PROPERTIES (obj);
464         self->priv->tap_time = (g_free (self->priv->tap_time), NULL);
465         _g_object_unref0 (self->priv->tempo_adjustment);
466         _g_object_unref0 (self->priv->volume_adjustment);
467         _g_object_unref0 (self->priv->timesignature_combo);
468         _g_object_unref0 (self->priv->click_during_play);
469         _g_object_unref0 (self->priv->click_during_record);
470         G_OBJECT_CLASS (project_properties_parent_class)->finalize (obj);
471 }
472
473
474 GType project_properties_get_type (void) {
475         static volatile gsize project_properties_type_id__volatile = 0;
476         if (g_once_init_enter (&project_properties_type_id__volatile)) {
477                 static const GTypeInfo g_define_type_info = { sizeof (ProjectPropertiesClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) project_properties_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ProjectProperties), 0, (GInstanceInitFunc) project_properties_instance_init, NULL };
478                 GType project_properties_type_id;
479                 project_properties_type_id = g_type_register_static (GTK_TYPE_DIALOG, "ProjectProperties", &g_define_type_info, 0);
480                 g_once_init_leave (&project_properties_type_id__volatile, project_properties_type_id);
481         }
482         return project_properties_type_id__volatile;
483 }
484
485
486 static int _vala_strcmp0 (const char * str1, const char * str2) {
487         if (str1 == NULL) {
488                 return -(str1 != str2);
489         }
490         if (str2 == NULL) {
491                 return str1 != str2;
492         }
493         return strcmp (str1, str2);
494 }
495
496
497
498