31 #include "ui_manager.h"
33 static void ui_main_window_new(
ui_infos *infos);
34 static void ui_infos_new(
ui_state *ui);
40 static void ui_infos_free(
ui_infos **infos);
41 static void ui_status_free(
gui_status **status);
45 void ui_set_browser_directory(
ui_state *ui,
const gchar *directory)
49 if (infos->browser_directory)
51 g_free(infos->browser_directory);
52 infos->browser_directory = NULL;
55 if (directory == NULL)
57 infos->browser_directory = NULL;
61 infos->browser_directory = g_strdup(directory);
64 const gchar *ui_get_browser_directory(
ui_state *ui)
66 return ui->infos->browser_directory;
69 void ui_set_main_win_position(
ui_state *ui, gint x, gint y)
77 main_win->root_x_pos = x;
78 main_win->root_y_pos = y;
81 void ui_set_main_win_size(
ui_state *ui, gint width, gint height)
84 main_win->width = width;
85 main_win->height = height;
90 return ui->infos->main_win;
98 ui->preferences = pm_state_new();
100 gint error = SPLT_OK;
104 ui_fail(ui,
"mp3splt state initialization failed\n", NULL);
107 ui->splitpoints = g_array_new(FALSE, FALSE,
sizeof(
Split_point));
108 ui->files_to_split = NULL;
110 ui->status = ui_status_new();
111 ui->gui = ui_gui_new();
112 ui->pi = ui_player_infos_new();
114 ui->return_code = EXIT_SUCCESS;
116 init_mutex(&ui->variables_mutex);
125 ui_infos_free(&ui->infos);
126 pm_free(&ui->preferences);
128 if (ui->mp3splt_state)
133 g_array_free(ui->splitpoints, TRUE);
135 ui_status_free(&ui->status);
136 ui_gui_free(&ui->gui);
137 ui_player_infos_free(&ui->pi);
139 clear_mutex(&ui->variables_mutex);
144 void ui_register_spinner_int_preference(gchar *main_key, gchar *second_key,
145 gint default_value, GtkWidget *spinner,
146 void (*update_spinner_value_cb)(GtkWidget *spinner, gpointer data),
147 gpointer user_data_for_cb,
ui_state *ui)
149 pm_register_spinner_int_preference(main_key, second_key,
150 default_value, spinner, update_spinner_value_cb, user_data_for_cb, ui->preferences);
153 void ui_register_range_preference(gchar *main_key, gchar *second_key,
154 gint default_value, GtkWidget *range,
155 void (*update_adjustment_value)(GtkAdjustment *adjustment, gpointer data),
156 gpointer user_data_for_cb,
ui_state *ui)
158 pm_register_range_preference(main_key, second_key,
159 default_value, range, update_adjustment_value, user_data_for_cb, ui->preferences);
162 void ui_load_preferences(
ui_state *ui)
167 void ui_save_preferences(GtkWidget *dummy_widget,
ui_state *ui)
169 save_preferences(ui);
172 void ui_fail(
ui_state *ui,
const gchar *message, ...)
176 gchar formatted_message[1024] = {
'\0' };
179 va_start(ap, message);
180 g_vsnprintf(formatted_message, 1024, message, ap);
183 fprintf(stderr, formatted_message);
187 ui->return_code = EXIT_FAILURE;
194 static void ui_main_window_new(
ui_infos *infos)
198 main_win->root_x_pos = 0;
199 main_win->root_y_pos = 0;
201 main_win->width = UI_DEFAULT_WIDTH;
202 main_win->height = UI_DEFAULT_HEIGHT;
204 infos->main_win = main_win;
207 static void ui_infos_new(
ui_state *ui)
211 ui_main_window_new(infos);
213 infos->browser_directory = NULL;
214 infos->text_options_list = NULL;
216 infos->silence_points = NULL;
217 infos->malloced_num_of_silence_points = 0;
218 infos->number_of_silence_points = 0;
220 infos->player_seconds = 0;
221 infos->player_minutes = 0;
222 infos->player_hundr_secs = 0;
223 infos->player_seconds2 = 0;
224 infos->player_minutes2 = 0;
225 infos->player_hundr_secs2 = 0;
227 infos->total_time = 0;
228 infos->current_time = 0;
230 infos->splitnumber = 0;
231 infos->width_drawing_area = 0;
232 infos->zoom_coeff = 2.0;
233 infos->zoom_coeff_old = 2.0;
235 infos->hundr_secs_th = 20;
236 infos->tens_of_secs_th = 3 * 100;
237 infos->secs_th = 40 * 100;
238 infos->ten_secs_th = 3 * 6000;
239 infos->minutes_th = 20 * 6000;
240 infos->ten_minutes_th = 3 * 3600 * 100;
242 infos->one_minute_time = 1 * 6000;
243 infos->three_minutes_time = 3 * 6000;
244 infos->six_minutes_time = 6 * 6000;
245 infos->ten_minutes_time = 10 * 6000;
246 infos->twenty_minutes_time = 20 * 6000;
247 infos->fourty_minutes_time = 40 * 6000;
249 GArray *preview_time_windows = g_array_new(TRUE, TRUE,
sizeof(gint));
250 g_array_append_val(preview_time_windows, infos->one_minute_time);
251 g_array_append_val(preview_time_windows, infos->three_minutes_time);
252 g_array_append_val(preview_time_windows, infos->six_minutes_time);
253 g_array_append_val(preview_time_windows, infos->ten_minutes_time);
254 g_array_append_val(preview_time_windows, infos->twenty_minutes_time);
255 g_array_append_val(preview_time_windows, infos->fourty_minutes_time);
256 infos->preview_time_windows = preview_time_windows;
258 infos->filtered_points_presence = NULL;
259 infos->silence_wave_number_of_points_threshold = DEFAULT_SILENCE_WAVE_NUMBER_OF_POINTS_THRESHOLD;
261 infos->selected_player = PLAYER_GSTREAMER;
263 infos->douglas_peucker_thresholds_defaults[0] = 2.0;
264 infos->douglas_peucker_thresholds_defaults[1] = 5.0;
265 infos->douglas_peucker_thresholds_defaults[2] = 8.0;
266 infos->douglas_peucker_thresholds_defaults[3] = 11.0;
267 infos->douglas_peucker_thresholds_defaults[4] = 15.0;
268 infos->douglas_peucker_thresholds_defaults[5] = 22.0;
270 infos->douglas_peucker_thresholds[0] = infos->douglas_peucker_thresholds_defaults[0];
271 infos->douglas_peucker_thresholds[1] = infos->douglas_peucker_thresholds_defaults[1];
272 infos->douglas_peucker_thresholds[2] = infos->douglas_peucker_thresholds_defaults[2];
273 infos->douglas_peucker_thresholds[3] = infos->douglas_peucker_thresholds_defaults[3];
274 infos->douglas_peucker_thresholds[4] = infos->douglas_peucker_thresholds_defaults[4];
275 infos->douglas_peucker_thresholds[5] = infos->douglas_peucker_thresholds_defaults[5];
277 infos->debug_is_active = FALSE;
284 infos->silence_remove_silence_between_tracks = FALSE;
286 infos->freedb_table_number = 0;
287 infos->freedb_selected_id = -1;
289 infos->playlist_tree_number = 0;
290 infos->multiple_files_tree_number = 0;
292 infos->freedb_search_results = NULL;
294 infos->split_file_mode = FILE_MODE_SINGLE;
296 infos->outputdirname = NULL;
299 for (i = 0; i < 6;i++)
301 infos->preview_indexes[i].index = 0;
302 infos->preview_indexes[i].data = NULL;
305 infos->timeout_value = DEFAULT_TIMEOUT_VALUE;
314 status->splitting = FALSE;
315 status->process_in_progress = FALSE;
316 status->mouse_on_progress_bar = FALSE;
318 status->currently_compute_douglas_peucker_filters = FALSE;
319 status->show_silence_wave = FALSE;
321 status->playing = FALSE;
322 status->timer_active = FALSE;
323 status->quick_preview_end_splitpoint = -1;
324 status->preview_start_splitpoint = -1;
326 status->move_time = 0;
328 status->button1_pressed = FALSE;
329 status->button2_pressed = FALSE;
331 status->quick_preview = FALSE;
333 status->button_x = 0;
334 status->button_x2 = 0;
335 status->button_y = 0;
336 status->button_y2 = 0;
338 status->move_splitpoints = FALSE;
339 status->splitpoint_to_move = -1;
340 status->remove_splitpoints = FALSE;
341 status->select_splitpoints = FALSE;
342 status->check_splitpoint = FALSE;
344 status->first_splitpoint_selected = -1;
346 status->spin_mins = 0;
347 status->spin_secs = 0;
348 status->spin_hundr_secs = 0;
350 g_snprintf(status->current_description, 255,
"%s", _(
"description here"));
352 status->preview_start_position = 0;
353 status->timeout_id = 0;
355 status->currently_scanning_for_silence = FALSE;
357 status->filename_to_split = NULL;
359 status->douglas_callback_counter = 0;
361 status->stream = FALSE;
362 status->only_press_pause = FALSE;
364 status->change_volume = TRUE;
365 status->on_the_volume_button = FALSE;
366 status->file_browsed = FALSE;
368 status->preview_row = 0;
369 status->selected_split_mode = SELECTED_SPLIT_NORMAL;
371 status->should_trim = FALSE;
373 status->file_selection_changed = FALSE;
375 status->stop_split = FALSE;
377 status->previous_distance_by_time = NULL;
378 status->previous_zoom_coeff = -2;
379 status->previous_interpolation_level = -2;
380 status->previous_first_time_drawed = -2;
381 status->previous_first_x_drawed = -2;
382 status->previous_second_x_drawed = -2;
383 status->previous_second_time_drawed = -2;
393 pi->song_artist = NULL;
394 pi->song_title = NULL;
398 pi->_gstreamer_is_running = FALSE;
402 pi->dbus_proxy = NULL;
403 pi->dbus_connection = NULL;
409 pi->connected = FALSE;
419 gui->real_erase_split_length = 12;
420 gui->real_move_split_length = 16;
421 gui->real_checkbox_length = 12;
422 gui->real_wave_length = 96;
424 gui->splitpoints_window = NULL;
425 gui->preferences_window = NULL;
426 gui->split_files_window = NULL;
427 gui->freedb_window = NULL;
434 if (!main_win || !*main_win)
443 static void ui_infos_free(
ui_infos **infos)
445 if (!infos || !*infos)
450 ui_main_window_free(&(*infos)->main_win);
452 if ((*infos)->browser_directory)
454 g_free((*infos)->browser_directory);
455 (*infos)->browser_directory = NULL;
458 if ((*infos)->text_options_list)
460 g_list_free((*infos)->text_options_list);
463 if ((*infos)->silence_points)
465 g_free((*infos)->silence_points);
466 (*infos)->silence_points = NULL;
467 (*infos)->number_of_silence_points = 0;
470 g_array_free((*infos)->preview_time_windows, TRUE);
476 static void ui_status_free(
gui_status **status)
478 if (!status || !*status)
483 if ((*status)->previous_distance_by_time != NULL)
485 g_hash_table_destroy((*status)->previous_distance_by_time);
486 (*status)->previous_distance_by_time = NULL;