g_debug("init_combo_box() %s\n", name);
// First modify the combobox model to allow greying out of options
combo = GTK_COMBO_BOX(GHB_WIDGET(builder, name));
+ if (combo == NULL)
+ return;
// Store contains:
// 1 - String to display
// 2 - bool indicating whether the entry is selectable (grey or not)
}
void
-subtitle_opts_set(signal_user_data_t *ud, const gchar *name, gint titleindex)
+ghb_subtitle_track_model(signal_user_data_t *ud, gint titleindex)
{
GtkTreeIter iter;
GtkListStore *store;
hb_subtitle_t * subtitle;
gint ii, count = 0;
- g_debug("subtitle_opts_set () %s\n", name);
- store = get_combo_box_store(ud->builder, name);
- gtk_list_store_clear(store);
+ g_debug("ghb_subtitle_track_model ()\n");
if (h_scan != NULL)
{
list = hb_get_titles( h_scan );
subtitle_opts.count = LANG_TABLE_SIZE+2;
subtitle_opts.map = g_malloc((LANG_TABLE_SIZE+2)*sizeof(options_map_t));
}
+ if (ud->subtitle_track_model == NULL)
+ {
+ // Store contains:
+ // 1 - String to display
+ // 2 - bool indicating whether the entry is selectable (grey or not)
+ // 3 - String that is used for presets
+ // 4 - Int value determined by backend
+ // 5 - String value determined by backend
+ store = gtk_list_store_new(5, G_TYPE_STRING, G_TYPE_BOOLEAN,
+ G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_STRING);
+ ud->subtitle_track_model = store;
+ }
+ else
+ {
+ store = ud->subtitle_track_model;
+ gtk_list_store_clear(store);
+ }
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, "Autoselect",
{
// Already in use, pick another
candidate++;
- if (candidate >= subtitle_opts.count)
+ if (candidate >= subtitle_opts.count-1)
{
candidate = 0;
}
video_rate_opts_set(ud->builder, "VideoFramerate", hb_video_rates, hb_video_rates_count);
mix_opts_set(ud->builder, "AudioMixdown");
language_opts_set(ud->builder, "SourceAudioLang");
- subtitle_opts_set(ud, "SubtitleTrack", user_data);
title_opts_set(ud->builder, "title");
audio_track_opts_set(ud->builder, "AudioTrack", user_data);
generic_opts_set(ud->builder, "VideoQualityGranularity", &vqual_granularity_opts);
mix_opts_set(ud->builder, "AudioMixdown");
else if (strcmp(name, "SourceAudioLang") == 0)
language_opts_set(ud->builder, "SourceAudioLang");
- else if (strcmp(name, "SubtitleTrack") == 0)
- subtitle_opts_set(ud, "SubtitleTrack", user_data);
else if (strcmp(name, "title") == 0)
title_opts_set(ud->builder, "title");
else if (strcmp(name, "AudioTrack") == 0)
init_combo_box(builder, "VideoFramerate");
init_combo_box(builder, "AudioMixdown");
init_combo_box(builder, "SourceAudioLang");
- init_combo_box(builder, "SubtitleTrack");
init_combo_box(builder, "title");
init_combo_box(builder, "AudioTrack");
for (ii = 0; combo_name_map[ii].name != NULL; ii++)
ghb_settings_set_int(subtitle, "SubtitleTrack", track);
// Add to subtitle list
add_pref(ud, subtitle);
- ghb_ui_update(ud, "SubtitleTrack", ghb_int64_value(track));
}
}
g_hash_table_destroy(track_indices);
return settings;
}
-static void
-subtitle_list_refresh_selected(signal_user_data_t *ud)
-{
- GtkTreeView *treeview;
- GtkTreePath *treepath;
- GtkTreeSelection *selection;
- GtkTreeModel *store;
- GtkTreeIter iter;
- gint *indices;
- gint row;
- GValue *settings = NULL;
- const GValue *subtitle_list;
-
- g_debug("subtitle_list_refresh_selected ()");
- treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "subtitle_list"));
- selection = gtk_tree_view_get_selection (treeview);
- if (gtk_tree_selection_get_selected(selection, &store, &iter))
- {
- const gchar *track, *source, *color;
- gboolean forced, burned;
- gchar *s_track;
- gint i_track, weight, style;
-
- // Get the row number
- treepath = gtk_tree_model_get_path (store, &iter);
- indices = gtk_tree_path_get_indices (treepath);
- row = indices[0];
- gtk_tree_path_free(treepath);
- // find subtitle settings
- if (row < 0) return;
- subtitle_list = ghb_settings_get_value(ud->settings, "subtitle_list");
- if (row >= ghb_array_len(subtitle_list))
- return;
- settings = ghb_array_get_nth(subtitle_list, row);
-
- track = ghb_settings_combo_option(settings, "SubtitleTrack");
- forced = ghb_settings_get_boolean(settings, "SubtitleForced");
- burned = ghb_settings_get_boolean(settings, "SubtitleBurned");
-
- s_track = ghb_settings_get_string(settings, "SubtitleTrack");
- i_track = ghb_settings_get_int(settings, "SubtitleTrack");
- source = ghb_subtitle_track_source_name(ud, i_track);
-
- if (!burned && mustBurn(ud, i_track))
- {
- weight = 800;
- style = 2;
- color = "red";
- }
- else
- {
- weight = 400;
- style = 0;
- color = NULL;
- }
-
- gtk_list_store_set(GTK_LIST_STORE(store), &iter,
- // These are displayed in list
- 0, track,
- 1, forced,
- 2, burned,
- 3, source,
- // These are used to set combo values when a list item is selected
- 4, s_track,
- 5, color,
- 6, weight,
- 7, style,
- -1);
- g_free(s_track);
- }
-}
-
G_MODULE_EXPORT void
subtitle_forced_toggled_cb(
GtkCellRendererToggle *cell,
gtk_tree_model_get_iter(tm, &ti, tp);
gtk_tree_model_get(tm, &ti, 1, &active, -1);
active ^= 1;
- gtk_list_store_set(GTK_LIST_STORE(tm), &ti, 1, active, -1);
// Get the row number
indices = gtk_tree_path_get_indices (tp);
if (row >= 0)
{
- GValue *subtitle_list;
+ GValue *subtitle_list, *settings;
+ gint source, track;
subtitle_list = ghb_settings_get_value(ud->settings, "subtitle_list");
+
+ settings = ghb_array_get_nth(subtitle_list, row);
+ track = ghb_settings_combo_int(settings, "SubtitleTrack");
+
+ source = ghb_subtitle_track_source(ud, track);
+ if (source != VOBSUB)
+ return;
+
if (row < ghb_array_len(subtitle_list))
{
GValue *settings;
settings = ghb_array_get_nth(subtitle_list, row);
ghb_settings_set_boolean(settings, "SubtitleForced", active);
+ gtk_list_store_set(GTK_LIST_STORE(tm), &ti, 1, active, -1);
}
}
}
gint row;
gint *indices;
GValue *subtitle_list;
- gint count, track;
+ gint count, track, source;
GValue *settings;
g_debug("burned toggled");
settings = ghb_array_get_nth(subtitle_list, row);
track = ghb_settings_combo_int(settings, "SubtitleTrack");
+
+ source = ghb_subtitle_track_source(ud, track);
+ if (source != VOBSUB)
+ return;
+
if (!active && mustBurn(ud, track))
return;
}
G_MODULE_EXPORT void
-subtitle_track_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
+subtitle_track_changed_cb(
+ GtkCellRendererCombo *combo,
+ gchar *path,
+ GtkTreeIter *iter,
+ signal_user_data_t *ud)
{
- GValue *settings;
+ GtkTreeView *tv;
+ GtkTreeModel *tm;
+ GtkTreeIter ti;
+ GtkTreePath *tp;
+ gdouble dtrack;
+ gint *indices;
+ int tt, row;
+ GValue *subtitle_list, *settings;
+ const char *lang;
g_debug("subtitle_track_changed_cb ()");
- ghb_check_dependency(ud, widget);
- settings = ghb_selected_subtitle_settings(ud);
- if (settings != NULL)
+ gtk_tree_model_get(GTK_TREE_MODEL(ud->subtitle_track_model), iter,
+ 3, &dtrack, -1);
+ tt = (gint)dtrack;
+ if (trackUsed(ud, tt))
+ return;
+
+ tp = gtk_tree_path_new_from_string (path);
+ tv = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "subtitle_list"));
+ g_return_if_fail(tv != NULL);
+ tm = gtk_tree_view_get_model(tv);
+ g_return_if_fail(tm != NULL);
+ gtk_tree_model_get_iter(tm, &ti, tp);
+
+ // Get the row number
+ indices = gtk_tree_path_get_indices (tp);
+ row = indices[0];
+ gtk_tree_path_free(tp);
+
+ subtitle_list = ghb_settings_get_value(ud->settings, "subtitle_list");
+ if (row >= ghb_array_len(subtitle_list))
+ return;
+ settings = ghb_array_get_nth(subtitle_list, row);
+
+ ghb_settings_set_int(settings, "SubtitleTrack", tt);
+ lang = ghb_settings_combo_string(settings, "SubtitleTrack");
+ if (mustBurn(ud, tt))
{
- const gchar *lang;
- GValue *gval;
- GtkWidget *widget;
- gint track;
-
- widget = GHB_WIDGET (ud->builder, "SubtitleTrack");
- gval = ghb_widget_value(widget);
- track = ghb_value_int(gval);
- ghb_value_free(gval);
- if (trackUsed(ud, track))
- return;
- ghb_widget_to_setting(settings, widget);
- track = ghb_settings_combo_int(settings, "SubtitleTrack");
- lang = ghb_settings_combo_string(settings, "SubtitleTrack");
- if (mustBurn(ud, track))
- {
- ghb_settings_set_boolean(settings, "SubtitleBurned", TRUE);
- }
- else
- {
- ghb_settings_set_boolean(settings, "SubtitleBurned", FALSE);
- }
- ghb_settings_set_string(settings, "SubtitleLanguage", lang);
- subtitle_list_refresh_selected(ud);
+ ghb_settings_set_boolean(settings, "SubtitleBurned", TRUE);
+ }
+ else
+ {
+ ghb_settings_set_boolean(settings, "SubtitleBurned", FALSE);
+ }
+ ghb_settings_set_string(settings, "SubtitleLanguage", lang);
+
+ const gchar *track, *source, *color;
+ gboolean forced, burned;
+ gchar *s_track;
+ gint i_track, weight, style;
+
+ track = ghb_settings_combo_option(settings, "SubtitleTrack");
+ forced = ghb_settings_get_boolean(settings, "SubtitleForced");
+ burned = ghb_settings_get_boolean(settings, "SubtitleBurned");
+
+ s_track = ghb_settings_get_string(settings, "SubtitleTrack");
+ i_track = ghb_settings_get_int(settings, "SubtitleTrack");
+ source = ghb_subtitle_track_source_name(ud, i_track);
+
+ if (!burned && mustBurn(ud, i_track))
+ {
+ weight = 800;
+ style = 2;
+ color = "red";
}
+ else
+ {
+ weight = 400;
+ style = 0;
+ color = NULL;
+ }
+
+ gtk_list_store_set(GTK_LIST_STORE(tm), &ti,
+ // These are displayed in list
+ 0, track,
+ 1, forced,
+ 2, burned,
+ 3, source,
+ // These are used to set combo values when a list item is selected
+ 4, s_track,
+ 5, color,
+ 6, weight,
+ 7, style,
+ -1);
+ g_free(s_track);
ghb_live_reset(ud);
+
}
void
-1);
gtk_tree_selection_select_iter(selection, &iter);
g_free(s_track);
- ghb_subtitle_exclusive_burn(ud, i_track);
+ if (burned)
+ ghb_subtitle_exclusive_burn(ud, i_track);
}
G_MODULE_EXPORT void
const gchar *track;
gtk_tree_model_get(store, &iter, 4, &track, -1);
- ghb_ui_update(ud, "SubtitleTrack", ghb_string_value(track));
+ ghb_settings_set_string(ud->settings, "SubtitleTrack", track);
+
widget = GHB_WIDGET (ud->builder, "subtitle_remove");
gtk_widget_set_sensitive(widget, TRUE);
}
{
// Add the current subtitle settings to the list.
GValue *settings;
- GtkWidget *widget;
gint count;
GValue *subtitle_list;
gboolean burned = FALSE;
}
settings = ghb_dict_value_new();
// Only allow up to 8 subtitle entries
- widget = GHB_WIDGET(ud->builder, "SubtitleTrack");
ghb_settings_set_int(settings, "SubtitleTrack", track);
ghb_settings_take_value(settings, "SubtitleForced",
ghb_boolean_value_new(FALSE));