mp3splt-gtk 0.9.2
Loading...
Searching...
No Matches
ui_types.h
1/**********************************************************
2 * mp3splt-gtk -- utility based on mp3splt,
3 *
4 *
5 * Contact: m@ioalex.net
6 * Copyright: (C) 2005-2014 Alexandru Munteanu
7 *
8 * http://mp3splt.sourceforge.net/
9 *
10 *********************************************************/
11
12/**********************************************************
13 *
14 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License
16 * as published by the Free Software Foundation; either version 2
17 * of the License, or (at your option) any later version.
18 *
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 * You should have received a copy of the GNU General Public License
25 * along with this program; if not, write to the Free Software
26 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
27 * USA.
28 *
29 *********************************************************/
30
31#ifndef UI_TYPES_H
32
33#define UI_TYPES_H
34
35#include <libmp3splt/mp3splt.h>
36
37#ifndef NO_GSTREAMER
38 #include <gst/gst.h>
39#endif
40
41#ifndef NO_AUDACIOUS
42 #include <audacious/audctrl.h>
43 #include <audacious/dbus.h>
44#endif
45
46#ifdef __WIN32__
47 #include <windows.h>
48 #include <winsock2.h>
49#endif
50
51typedef struct {
52 gchar* main_key;
53 gchar* second_key;
54 gint default_value;
55 GtkWidget *spinner;
56 void (*update_spinner_value_cb)(GtkWidget *spinner, gpointer data);
57 gpointer user_data_for_cb;
59
60typedef struct {
61 gchar* main_key;
62 gchar* second_key;
63 gint default_value;
64 GtkWidget *range;
65 void (*update_adjustment_value)(GtkAdjustment *adjustment, gpointer data);
66 gpointer user_data_for_cb;
68
69typedef struct {
70 GArray *spinner_int_preferences;
71 GArray *range_preferences;
73
74typedef struct
75{
76 gboolean checked;
77 gint mins;
78 gint secs;
79 gint hundr_secs;
81
82typedef struct {
83 gint root_x_pos;
84 gint root_y_pos;
85 gint width;
86 gint height;
88
89typedef struct {
90 long time;
91 float level;
93
94typedef struct {
95 gint index;
96 gpointer data;
98
99typedef struct points_and_tags {
100 GPtrArray *splitpoints;
101 GPtrArray *tags;
103
104typedef struct {
105 gchar *browser_directory;
106 ui_main_window *main_win;
107 GList *text_options_list;
108
109 silence_wave *silence_points;
110 gint number_of_silence_points;
111 gint malloced_num_of_silence_points;
112
113 gint player_seconds;
114 gint player_minutes;
115 gint player_hundr_secs;
116 //only for internal use when we change manually we have the real
117 //time which is player_seconds and the imaginary time player_seconds2
118 gint player_seconds2;
119 gint player_minutes2;
120 gint player_hundr_secs2;
121
122 gfloat total_time;
123 gfloat current_time;
124
125 gint splitnumber;
126 gint width_drawing_area;
127 gfloat zoom_coeff;
128 gfloat zoom_coeff_old;
129
130 gint hundr_secs_th;
131 gint tens_of_secs_th;
132 gint secs_th;
133 gint ten_secs_th;
134 gint minutes_th;
135 gint ten_minutes_th;
136
137 gint one_minute_time;
138 gint three_minutes_time;
139 gint six_minutes_time;
140 gint ten_minutes_time;
141 gint twenty_minutes_time;
142 gint fourty_minutes_time;
143
144 GArray *preview_time_windows;
145
146 GPtrArray *filtered_points_presence;
147 gint silence_wave_number_of_points_threshold;
148
149 gint selected_player;
150
151 gdouble douglas_peucker_thresholds[6];
152 gdouble douglas_peucker_thresholds_defaults[6];
153
154 gint debug_is_active;
155
156 gfloat silence_threshold_value;
157 gfloat silence_offset_value;
158 gint silence_number_of_tracks;
159 gfloat silence_minimum_length;
160 gfloat silence_minimum_track_length;
161 gboolean silence_remove_silence_between_tracks;
162
163 gint freedb_table_number;
164 gint playlist_tree_number;
165 gint multiple_files_tree_number;
166
167 gint freedb_selected_id;
168
169 splt_freedb_results *freedb_search_results;
170
171 gint split_file_mode;
172
173 GString *outputdirname;
174
175 preview_index_and_data preview_indexes[6];
176
177 gint timeout_value;
178
179 gint gstreamer_stop_before_end;
180
181 gint small_seek_jump_value;
182 gint seek_jump_value;
183 gint big_seek_jump_value;
184
185 //make export threads to execute in order
186 GThread *previous_export_thread;
187
188 //previous right mark time/pixels
189 gint previous_mark_time;
190 gfloat previous_mark_pixel;
191 gfloat accumulated_diff;
192 gint pixels_diff_regarding_previous;
193 GHashTable *previous_pixel_by_time;
194 GHashTable *pixel_moved_by_time;
195
196 gint drawing_preferences_silence_wave;
197} ui_infos;
198
199typedef struct {
200#ifndef NO_GSTREAMER
201 const gchar *song_artist;
202 const gchar *song_title;
203 gint rate;
204 GstElement *play;
205 GstBus *bus;
206 gint _gstreamer_is_running;
207#endif
208
209#ifndef NO_AUDACIOUS
210 DBusGProxy *dbus_proxy;
211 DBusGConnection *dbus_connection;
212#endif
213
214 //snackamp
215 FILE *in;
216 FILE *out;
217 gboolean connected;
218#ifdef __WIN32__
219 SOCKET socket_id;
220#else
221 gint socket_id;
222#endif
223
225
226typedef struct {
227 GtkApplication *application;
228 GtkWidget *window;
229
230 GtkWidget *open_file_chooser_button;
231 GString *input_filename;
232
233 GtkWidget *player_box;
234 GtkWidget *playlist_box;
235
236 GtkWidget *song_name_label;
237 GtkWidget *song_infos;
238 GtkWidget *label_time;
239
240 GtkAdjustment *progress_adj;
241 GtkWidget *progress_bar;
242
243 GtkTreeView *tree_view;
244
245 GtkWidget *drawing_area;
246 GtkProgressBar *percent_progress_bar;
247 GtkWidget *drawing_area_expander;
248
249 //drawing area variables
250 gint margin;
251 gint real_erase_split_length;
252 gint real_move_split_length;
253 gint real_checkbox_length;
254 gint real_wave_length;
255
256 gint erase_split_ylimit;
257 gint progress_ylimit;
258 gint splitpoint_ypos;
259 gint checkbox_ypos;
260 gint text_ypos;
261 gint wave_ypos;
262
263 GPtrArray *wave_quality_das;
264 GtkWidget *player_scrolled_window;
265
266 GtkStatusbar *status_bar;
267
268 GtkWidget *add_button;
269 GtkWidget *remove_row_button;
270 GtkWidget *remove_all_button;
271
272 GtkTextTagTable *mess_hist_tag_table;
273 GtkTextBuffer *mess_hist_buffer;
274
275 GtkToggleButton *names_from_filename;
276
277 GtkWidget *pause_button;
278
279 GtkBox *player_buttons_hbox;
280
281 //player button images
282 GtkWidget *Go_BegButton_active;
283 GtkWidget *Go_BegButton_inactive;
284 GtkWidget *Go_EndButton_active;
285 GtkWidget *Go_EndButton_inactive;
286 GtkWidget *PlayButton_active;
287 GtkWidget *PlayButton_inactive;
288 GtkWidget *StopButton_active;
289 GtkWidget *StopButton_inactive;
290 GtkWidget *PauseButton_active;
291 GtkWidget *PauseButton_inactive;
292
293 //player buttons
294 GtkWidget *play_button;
295 GtkWidget *stop_button;
296 GtkWidget *player_add_button;
297 GtkWidget *go_beg_button;
298 GtkWidget *go_end_button;
299
300 GtkWidget *connect_button;
301 GtkWidget *disconnect_button;
302
303 GtkWidget *silence_wave_check_button;
304
305 GtkWidget *cancel_button;
306
307 GtkWidget *volume_button;
308
309 GtkTreeView *playlist_tree;
310
311 GtkWidget *playlist_remove_file_button;
312 GtkWidget *playlist_remove_all_files_button;
313
314 GtkWidget *frame_mode;
315 GtkWidget *bit_reservoir_mode;
316 GtkWidget *adjust_mode;
317
318 GtkWidget *spinner_adjust_offset;
319 GtkWidget *spinner_adjust_gap;
320 GtkWidget *spinner_adjust_min;
321 GtkWidget *spinner_adjust_threshold;
322
323 GtkWidget *adjust_param_vbox;
324
325 GtkWidget *spinner_time;
326 GtkWidget *spinner_equal_tracks;
327
328 GtkWidget *all_spinner_silence_number_tracks;
329 GtkWidget *all_spinner_silence_minimum;
330 GtkWidget *all_spinner_track_minimum;
331 GtkWidget *all_spinner_silence_offset;
332 GtkWidget *all_spinner_trim_silence_threshold;
333 GtkWidget *all_spinner_silence_threshold;
334 GtkWidget *all_silence_remove_silence;
335
336 GtkWidget *all_threshold_label;
337 GtkWidget *all_trim_threshold_label;
338 GtkWidget *all_offset_label;
339 GtkWidget *all_number_of_tracks_label;
340 GtkWidget *all_min_silence_label;
341 GtkWidget *all_min_track_label;
342
343 GtkWidget *tags_radio;
344 GtkWidget *tags_version_radio;
345
346 GtkWidget *output_dir_radio;
347 GtkWidget *custom_dir_file_chooser_button;
348 GtkWidget *example_output_dir_entry;
349 GtkWidget *example_output_dir_box;
350
351 GtkWidget *replace_underscore_by_space_check_box;
352 GtkComboBox *artist_text_properties_combo;
353 GtkComboBox *album_text_properties_combo;
354 GtkComboBox *title_text_properties_combo;
355 GtkComboBox *comment_text_properties_combo;
356 GtkComboBox *genre_combo;
357 GtkWidget *comment_tag_entry;
358 GtkWidget *regex_entry;
359 GtkWidget *test_regex_fname_entry;
360 GtkWidget *sample_result_label;
361 GtkWidget *extract_tags_box;
362
363 GtkWidget *create_dirs_from_output_files;
364
365 GtkWidget *output_entry;
366 GtkWidget *output_label;
367 GtkWidget *output_default_label;
368
369 GtkTreeView *split_tree;
370
371 GtkWidget *spinner_minutes;
372 GtkWidget *spinner_seconds;
373 GtkWidget *spinner_hundr_secs;
374
375 GtkWidget *scan_trim_silence_button;
376 GtkWidget *scan_trim_silence_button_player;
377 GtkWidget *scan_silence_button;
378 GtkWidget *scan_silence_button_player;
379
380 GtkWidget *spinner_silence_number_tracks;
381 GtkWidget *spinner_silence_minimum;
382 GtkWidget *spinner_silence_minimum_track;
383 GtkWidget *spinner_silence_offset;
384 GtkWidget *spinner_silence_threshold;
385 GtkWidget *silence_remove_silence;
386
387 GtkWidget *queue_files_button;
388 GtkWidget *remove_file_button;
389 GtkWidget *remove_all_files_button;
390
391 GtkWidget *freedb_entry;
392 GtkWidget *freedb_search_button;
393 GtkWidget *freedb_spinner;
394 GtkTreeView *freedb_tree;
395 GtkWidget *freedb_add_button;
396
397 GtkWidget *radio_output;
398
399 GtkWidget *split_mode_radio_button;
400
401 GtkWidget *time_label;
402 GtkWidget *time_label_after;
403 GtkWidget *equal_tracks_label;
404 GtkWidget *equal_tracks_label_after;
405
406 GtkWidget *multiple_files_component;
407
408 GtkWidget *player_combo_box;
409 GtkWidget *radio_button;
410 GtkWidget *gstreamer_stop_before_end_box;
411
412 GPtrArray *wave_preview_labels;
413
414 GtkWidget *mess_history_window;
415 GtkWidget *mess_hist_view;
416
417 GtkTreeView *multiple_files_tree;
418
419 GtkWidget *multiple_files_remove_file_button;
420 GtkWidget *multiple_files_remove_all_files_button;
421
422 GtkWidget *preferences_widget;
423 GtkWidget *preferences_window;
424
425 GtkWidget *split_files_widget;
426 GtkWidget *split_files_window;
427
428 GtkWidget *freedb_widget;
429 GtkWidget *freedb_window;
430
431 GtkWidget *splitpoints_widget;
432 GtkWidget *splitpoints_window;
433} gui_state;
434
435typedef struct {
436 gint splitting;
437 gint process_in_progress;
438 gint mouse_on_progress_bar;
439 gint currently_compute_douglas_peucker_filters;
440 gint show_silence_wave;
441 gboolean playing;
442 gboolean timer_active;
443
444 gint quick_preview_end_splitpoint;
445 gint preview_start_splitpoint;
446 gboolean stop_preview_right_after_start;
447
448 gfloat move_time;
449
450 gboolean button1_pressed;
451 gboolean button2_pressed;
452 gboolean quick_preview;
453
454 gint button_x;
455 gint button_y;
456 gint button_x2;
457 gint button_y2;
458
459 gboolean move_splitpoints;
460 gint splitpoint_to_move;
461 gboolean remove_splitpoints;
462 gboolean select_splitpoints;
463 gboolean check_splitpoint;
464
465 gint first_splitpoint_selected;
466
467 gint spin_mins;
468 gint spin_secs;
469 gint spin_hundr_secs;
470
471 gchar current_description[255];
472
473 gint preview_start_position;
474
475 gint timeout_id;
476
477 gint currently_scanning_for_silence;
478
479 gchar *filename_to_split;
480
481 gint douglas_callback_counter;
482
483 gboolean stream;
484
485 gint only_press_pause;
486
487 gboolean change_volume;
488 gboolean on_the_volume_button;
489 gint file_browsed;
490 gint preview_row;
491 gint selected_split_mode;
492
493 gint file_selection_changed;
494
495 gint stop_split;
496
497 gfloat previous_zoom_coeff;
498 gint previous_interpolation_level;
499
500 gint lock_cue_export;
501} gui_status;
502
503#define SPLT_MUTEX GMutex
504
505typedef struct {
506 gint return_code;
507
508 ui_infos *infos;
509 preferences_state *preferences;
510 splt_state *mp3splt_state;
511
512 GArray *splitpoints;
513 gui_state *gui;
514 gui_status *status;
515 player_infos *pi;
516
517 GPtrArray *files_to_split;
518
519 SPLT_MUTEX variables_mutex;
520
521 int importing_cue_from_configuration_directory;
522
523 gint argc;
524 gchar **argv;
525} ui_state;
526
527typedef struct {
528 gint err;
529 ui_state *ui;
531
532typedef struct {
533 ui_state *ui;
534 gpointer data;
535 GThreadFunc thread;
536 gint is_checked_output_radio_box;
537 gchar *filename_to_split;
539
540typedef struct {
541 ui_state *ui;
542 char *fname;
543 gboolean is_checked_output_radio_box;
544 gchar *output_format;
546
547typedef struct {
548 ui_state *ui;
549 points_and_tags *pat;
550 GThread *previous_thread;
551 gchar *export_filename;
553
554typedef struct {
555 ui_state *ui;
556 GSList *list;
558
559typedef struct {
560 ui_state *ui;
561 char **filenames;
562 int num_of_filenames;
564
565typedef struct {
566 ui_state *ui;
567
568 int frame_mode;
569 int bit_reservoir_mode;
570
571 //adjust options
572 int adjust_mode;
573 float adjust_offset;
574 int adjust_gap;
575 float adjust_threshold;
576 float adjust_min;
577
578 //single or batch
579 int split_file_mode;
580
581 //type of split
582 int selected_split_mode;
583
584 long time_split_value;
585 int equal_tracks_value;
586
587 //batch split by silence options
588 float silence_threshold;
589 float silence_offset;
590 int silence_number;
591 float silence_minimum_length;
592 float silence_minimum_track_length;
593 int silence_remove;
594
595 float trim_silence_threshold;
596
597 //single split by silence options
598 float single_silence_threshold;
599 float single_silence_offset;
600 int single_silence_number;
601 float single_silence_minimum_length;
602 float single_silence_minimum_track_length;
603 int single_silence_remove;
604
605 //no_tags, default_tags, ...
606 int selected_tags_value;
607 //version of tags
608 int tags_version;
609
610 int create_dirs_from_filenames;
611
612 //tags from filename regex
613 int regex_replace_underscores;
614 int regex_artist_tag_format;
615 int regex_album_tag_format;
616 int regex_title_tag_format;
617 int regex_comment_tag_format;
618 gchar *regex;
619 gchar *regex_default_comment;
620 gchar *regex_default_genre;
621
622 points_and_tags *pat;
623 gchar *output_format;
624 gboolean is_checked_output_radio_box;
625 gchar *output_directory;
626
627 gchar *test_regex_filename;
628 gboolean should_trim;
629 gint freedb_selected_id;
631
632#endif
633