/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
/*
* callbacks.c
- * Copyright (C) John Stebbins 2008 <stebbins@stebbins>
+ * Copyright (C) John Stebbins 2008-2011 <stebbins@stebbins>
*
* callbacks.c is free software.
*
{
int container;
const gchar *extension = "error";
- GValue *audio_list;
- GValue *subtitle_list;
container = ghb_settings_combo_int(ud->settings, "FileFormat");
if (container == HB_MUX_MP4)
{
extension = "mp4";
- audio_list = ghb_settings_get_value(ud->settings, "audio_list");
- subtitle_list = ghb_settings_get_value(ud->settings, "subtitle_list");
- if (ghb_ac3_in_audio_list(audio_list) ||
- ghb_soft_in_subtitle_list(subtitle_list) ||
- ghb_settings_get_boolean(ud->settings, "ChapterMarkers") ||
- ghb_settings_get_boolean(ud->settings, "UseM4v"))
+ if (ghb_settings_get_boolean(ud->settings, "UseM4v"))
{
extension = "m4v";
}
gboolean foundit = FALSE;
GtkComboBox *combo;
+ g_debug("chooser_file_selected_cb ()");
+
if (name == NULL) return;
combo = GTK_COMBO_BOX(GHB_WIDGET(ud->builder, "source_device"));
store = gtk_combo_box_get_model(combo);
GtkWidget *dialog;
gint ii;
+ g_debug("dvd_device_changed_cb ()");
ii = gtk_combo_box_get_active (combo);
if (ii > 0)
{
}
}
-G_MODULE_EXPORT void
-source_type_changed_cb(GtkToggleButton *toggle, signal_user_data_t *ud)
-{
- gchar *folder;
- GtkFileChooser *chooser;
- GtkWidget *dvd_device_combo;
-
- g_debug("source_type_changed_cb ()");
- chooser = GTK_FILE_CHOOSER(GHB_WIDGET(ud->builder, "source_dialog"));
- dvd_device_combo = GHB_WIDGET(ud->builder, "source_device");
- folder = gtk_file_chooser_get_current_folder (chooser);
- if (gtk_toggle_button_get_active (toggle))
- {
- gtk_file_chooser_set_action (chooser,
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
- gtk_widget_set_sensitive (dvd_device_combo, FALSE);
- gtk_combo_box_set_active (GTK_COMBO_BOX(dvd_device_combo), 0);
- }
- else
- {
- gtk_file_chooser_set_action (chooser, GTK_FILE_CHOOSER_ACTION_OPEN);
- gtk_widget_set_sensitive (dvd_device_combo, TRUE);
- }
- if (folder != NULL)
- {
- gtk_file_chooser_set_current_folder(chooser, folder);
- g_free(folder);
- }
-}
-
static void
source_dialog_extra_widgets(
signal_user_data_t *ud,
- GtkWidget *dialog,
- gboolean checkbutton_active)
+ GtkWidget *dialog)
{
- GtkToggleButton *checkbutton;
GtkComboBox *combo;
GList *drives, *link;
- checkbutton = GTK_TOGGLE_BUTTON(
- GHB_WIDGET(ud->builder, "source_folder_flag"));
- gtk_toggle_button_set_active(checkbutton, checkbutton_active);
+ g_debug("source_dialog_extra_widgets ()");
combo = GTK_COMBO_BOX(GHB_WIDGET(ud->builder, "source_device"));
- gtk_list_store_clear(GTK_LIST_STORE(
- gtk_combo_box_get_model(combo)));
+ gtk_list_store_clear(GTK_LIST_STORE(gtk_combo_box_get_model(combo)));
link = drives = dvd_device_list();
gtk_combo_box_append_text (combo, "Not Selected");
link = link->next;
}
g_list_free(drives);
+ gtk_combo_box_set_active (combo, 0);
}
extern GValue *ghb_queue_edit_settings;
gtk_action_set_sensitive(action, FALSE);
action = GHB_ACTION(ud->builder, "source_single_action");
gtk_action_set_sensitive(action, FALSE);
- ghb_backend_scan(path, titlenum, preview_count);
+ ghb_backend_scan(path, titlenum, preview_count,
+ 90000L * ghb_settings_get_int64(ud->settings, "MinTitleDuration"));
+}
+
+gboolean
+ghb_idle_scan(signal_user_data_t *ud)
+{
+ gchar *path;
+ gint preview_count;
+
+ show_scan_progress(ud);
+ path = ghb_settings_get_string( ud->settings, "scan_source");
+ prune_logs(ud);
+
+ preview_count = ghb_settings_get_int(ud->settings, "preview_count");
+ start_scan(ud, path, 0, preview_count);
+ g_free(path);
+ return FALSE;
}
void
}
}
-static gboolean
-update_source_name(gpointer data)
-{
- signal_user_data_t *ud = (signal_user_data_t*)data;
- GtkWidget *dialog;
- gchar *sourcename;
-
- sourcename = ghb_settings_get_string(ud->settings, "scan_source");
- dialog = GHB_WIDGET(ud->builder, "source_dialog");
- gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), sourcename);
- g_free(sourcename);
- return FALSE;
-}
-
static void
do_source_dialog(GtkButton *button, gboolean single, signal_user_data_t *ud)
{
GtkWidget *dialog;
gchar *sourcename;
gint response;
- GtkFileChooserAction action;
- gboolean checkbutton_active;
g_debug("source_browse_clicked_cb ()");
sourcename = ghb_settings_get_string(ud->settings, "scan_source");
- checkbutton_active = FALSE;
- if (g_file_test(sourcename, G_FILE_TEST_IS_DIR))
- {
- action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
- checkbutton_active = TRUE;
- }
- else
- {
- action = GTK_FILE_CHOOSER_ACTION_OPEN;
- }
GtkWidget *widget;
widget = GHB_WIDGET(ud->builder, "single_title_box");
if (single)
else
gtk_widget_hide(widget);
dialog = GHB_WIDGET(ud->builder, "source_dialog");
- source_dialog_extra_widgets(ud, dialog, checkbutton_active);
- gtk_file_chooser_set_action(GTK_FILE_CHOOSER(dialog), action);
- // Updating the filename in the file chooser dialog doesn't seem
- // to work unless the dialog is running for some reason.
- // So handle it in an "idle" event.
- //gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), sourcename);
- g_idle_add((GSourceFunc)update_source_name, ud);
+ source_dialog_extra_widgets(ud, dialog);
+ gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), sourcename);
response = gtk_dialog_run(GTK_DIALOG (dialog));
gtk_widget_hide(dialog);
- if (response == GTK_RESPONSE_ACCEPT)
+ if (response == GTK_RESPONSE_NO)
{
gchar *filename;
gtk_label_set_text (GTK_LABEL(widget), text);
g_free(text);
+ //widget = GHB_WIDGET (ud->builder, "source_interlaced");
+ //gtk_label_set_text (GTK_LABEL(widget), tinfo->interlaced ? "Yes" : "No");
+
ghb_ui_update(ud, "scale_width",
ghb_int64_value(tinfo->width - tinfo->crop[2] - tinfo->crop[3]));
// If anamorphic or keep_aspect, the hight will be automatically calculated
ghb_adjust_audio_rate_combos(ud);
ghb_set_pref_audio(titleindex, ud);
ghb_set_pref_subtitle(titleindex, ud);
- if (ghb_settings_get_boolean(ud->settings, "vquality_type_target"))
- {
- gint bitrate = ghb_calculate_target_bitrate (ud->settings, titleindex);
- ghb_ui_update(ud, "VideoAvgBitrate", ghb_int64_value(bitrate));
- }
// Unfortunately, there is no way to query how many frames were
// actually generated during the scan.
gint end;
widget = GHB_WIDGET (ud->builder, "ChapterMarkers");
- gtk_widget_set_sensitive(widget, TRUE);
end = ghb_settings_get_int(ud->settings, "end_point");
if (1 == end)
{
- ud->dont_clear_presets = TRUE;
- ghb_ui_update(ud, "ChapterMarkers", ghb_boolean_value(FALSE));
- ud->dont_clear_presets = FALSE;
gtk_widget_set_sensitive(widget, FALSE);
}
+ else
+ {
+ gtk_widget_set_sensitive(widget, TRUE);
+ }
}
G_MODULE_EXPORT void
}
G_MODULE_EXPORT void
+framerate_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
+{
+ ghb_widget_to_setting(ud->settings, widget);
+
+ if (ghb_settings_combo_int(ud->settings, "VideoFramerate") != 0)
+ {
+ if (!ghb_settings_get_boolean(ud->settings, "VideoFrameratePFR"))
+ {
+ ghb_ui_update(ud, "VideoFramerateCFR", ghb_boolean_value(TRUE));
+ }
+ }
+ if (ghb_settings_combo_int(ud->settings, "VideoFramerate") == 0 &&
+ ghb_settings_get_boolean(ud->settings, "VideoFrameratePFR"))
+ {
+ ghb_ui_update(ud, "VideoFramerateVFR", ghb_boolean_value(TRUE));
+ }
+ ghb_check_dependency(ud, widget, NULL);
+ ghb_clear_presets_selection(ud);
+ ghb_live_reset(ud);
+}
+
+G_MODULE_EXPORT void
setting_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
ghb_widget_to_setting(ud->settings, widget);
}
G_MODULE_EXPORT void
-target_size_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
-{
- const gchar *name = ghb_get_setting_key(widget);
- g_debug("target_size_changed_cb () %s", name);
- ghb_widget_to_setting(ud->settings, widget);
- ghb_check_dependency(ud, widget, NULL);
- ghb_clear_presets_selection(ud);
- ghb_live_reset(ud);
- if (ghb_settings_get_boolean(ud->settings, "vquality_type_target"))
- {
- gint titleindex;
- titleindex = ghb_settings_combo_int(ud->settings, "title");
- gint bitrate = ghb_calculate_target_bitrate (ud->settings, titleindex);
- ghb_ui_update(ud, "VideoAvgBitrate", ghb_int64_value(bitrate));
- }
-}
-
-G_MODULE_EXPORT void
start_point_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
gint start, end;
set_destination(ud);
}
widget = GHB_WIDGET (ud->builder, "ChapterMarkers");
- gtk_widget_set_sensitive(widget, TRUE);
// End may have been changed above, get it again
end = ghb_settings_get_int(ud->settings, "end_point");
if (start == end)
{
- ud->dont_clear_presets = TRUE;
- ghb_ui_update(ud, "ChapterMarkers", ghb_boolean_value(FALSE));
- ud->dont_clear_presets = FALSE;
gtk_widget_set_sensitive(widget, FALSE);
}
+ else
+ {
+ gtk_widget_set_sensitive(widget, TRUE);
+ }
update_title_duration(ud);
}
else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 1)
set_destination(ud);
}
widget = GHB_WIDGET (ud->builder, "ChapterMarkers");
- gtk_widget_set_sensitive(widget, TRUE);
// Start may have been changed above, get it again
start = ghb_settings_get_int(ud->settings, "start_point");
if (start == end)
{
- ud->dont_clear_presets = TRUE;
- ghb_ui_update(ud, "ChapterMarkers", ghb_boolean_value(FALSE));
- ud->dont_clear_presets = FALSE;
gtk_widget_set_sensitive(widget, FALSE);
}
+ else
+ {
+ gtk_widget_set_sensitive(widget, TRUE);
+ }
update_title_duration(ud);
}
else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 1)
const gchar *msg;
const gchar *action;
gint timeout;
+ signal_user_data_t *ud;
} countdown_t;
static gboolean
+quit_cb(countdown_t *cd)
+{
+ gchar *str;
+
+ cd->timeout--;
+ if (cd->timeout == 0)
+ {
+ ghb_hb_cleanup(FALSE);
+ prune_logs(cd->ud);
+
+ gtk_widget_destroy (GTK_WIDGET(cd->dlg));
+ gtk_main_quit();
+ return FALSE;
+ }
+ str = g_strdup_printf("%s\n\n%s in %d seconds ...",
+ cd->msg, cd->action, cd->timeout);
+ gtk_message_dialog_set_markup(cd->dlg, str);
+ g_free(str);
+ return TRUE;
+}
+
+static gboolean
shutdown_cb(countdown_t *cd)
{
gchar *str;
cd->timeout--;
if (cd->timeout == 0)
{
+ ghb_hb_cleanup(FALSE);
+ prune_logs(cd->ud);
+
ghb_shutdown_gsm();
gtk_main_quit();
return FALSE;
const gchar *action,
const gchar *cancel,
GSourceFunc action_func,
+ signal_user_data_t *ud,
gint timeout)
{
GtkWidget *dialog;
cd.msg = message;
cd.action = action;
cd.timeout = timeout;
+ cd.ud = ud;
// Toss up a warning dialog
dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL,
NULL);
response = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy (dialog);
- switch (response)
+ switch ((int)response)
{
case 1:
ghb_stop_queue();
NULL);
response = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy (dialog);
- switch (response)
+ switch ((int)response)
{
case 1:
ghb_stop_queue();
{
case HB_VCODEC_X264:
{
- return g_strdup_printf("RF: %.4g", val);
+ if (val == 0.0)
+ {
+ return g_strdup_printf("RF: %.4g (Warning: lossless)", val);
+ }
+ else
+ {
+ return g_strdup_printf("RF: %.4g", val);
+ }
} break;
case HB_VCODEC_FFMPEG:
ghb_countdown_dialog(GTK_MESSAGE_WARNING,
"Your encode is complete.",
"Shutting down the computer",
- "Cancel", (GSourceFunc)shutdown_cb, 60);
+ "Cancel", (GSourceFunc)shutdown_cb, ud, 60);
}
}
if (ghb_settings_combo_int(ud->settings, "WhenComplete") == 2)
ghb_countdown_dialog(GTK_MESSAGE_WARNING,
"Your encode is complete.",
"Putting computer to sleep",
- "Cancel", (GSourceFunc)suspend_cb, 60);
+ "Cancel", (GSourceFunc)suspend_cb, ud, 60);
}
}
+ if (ghb_settings_combo_int(ud->settings, "WhenComplete") == 4)
+ {
+ ghb_countdown_dialog(GTK_MESSAGE_WARNING,
+ "Your encode is complete.",
+ "Quiting Handbrake",
+ "Cancel", (GSourceFunc)quit_cb, ud, 60);
+ }
}