From 10db4c77eab8a5e839076cf4988f1746ec3a69a0 Mon Sep 17 00:00:00 2001 From: waker Date: Sun, 13 Mar 2011 21:26:06 +0100 Subject: finalized converter gui --- plugins/converter/callbacks.c | 2 + plugins/converter/callbacks.h | 40 ++++++ plugins/converter/converter.c | 18 +-- plugins/converter/converter.glade | 286 +++++++++++++++++++++++++++++++------- plugins/converter/converter.h | 4 +- plugins/converter/convgui.c | 152 ++++++++++++++++++-- plugins/converter/interface.c | 163 +++++++++++++++++----- 7 files changed, 566 insertions(+), 99 deletions(-) (limited to 'plugins') diff --git a/plugins/converter/callbacks.c b/plugins/converter/callbacks.c index 019fde92..f609a9a1 100644 --- a/plugins/converter/callbacks.c +++ b/plugins/converter/callbacks.c @@ -8,3 +8,5 @@ #include "interface.h" #include "support.h" + + diff --git a/plugins/converter/callbacks.h b/plugins/converter/callbacks.h index b349820f..1f5d7938 100644 --- a/plugins/converter/callbacks.h +++ b/plugins/converter/callbacks.h @@ -78,3 +78,43 @@ on_converterdlg_delete_event (GtkWidget *widget, GtkWidget* title_formatting_help_link_create (gchar *widget_name, gchar *string1, gchar *string2, gint int1, gint int2); + +void +on_output_folder_changed (GtkEditable *editable, + gpointer user_data); + +void +on_numthreads_changed (GtkEditable *editable, + gpointer user_data); + +void +on_overwrite_action_changed (GtkComboBox *combobox, + gpointer user_data); + +void +on_encoder_changed (GtkEditable *editable, + gpointer user_data); + +void +on_preserve_folder_browse_clicked (GtkButton *button, + gpointer user_data); + +void +on_fname_changed (GtkEditable *editable, + gpointer user_data); + +void +on_checkbutton1_toggled (GtkToggleButton *togglebutton, + gpointer user_data); + +void +on_preserve_folders_toggled (GtkToggleButton *togglebutton, + gpointer user_data); + +void +on_output_file_changed (GtkEditable *editable, + gpointer user_data); + +void +on_preserve_folder_root_changed (GtkEditable *editable, + gpointer user_data); diff --git a/plugins/converter/converter.c b/plugins/converter/converter.c index 93e67b67..d9c59b22 100644 --- a/plugins/converter/converter.c +++ b/plugins/converter/converter.c @@ -50,8 +50,8 @@ encoder_preset_free (ddb_encoder_preset_t *p) { if (p->title) { free (p->title); } - if (p->fname) { - free (p->fname); + if (p->ext) { + free (p->ext); } if (p->encoder) { free (p->encoder); @@ -90,8 +90,8 @@ encoder_preset_load (const char *fname) { if (!strcmp (str, "title")) { p->title = strdup (item); } - else if (!strcmp (str, "fname")) { - p->fname = strdup (item); + else if (!strcmp (str, "ext")) { + p->ext = strdup (item); } else if (!strcmp (str, "encoder")) { p->encoder = strdup (item); @@ -147,7 +147,7 @@ encoder_preset_save (ddb_encoder_preset_t *p, int overwrite) { } fprintf (fp, "title %s\n", p->title); - fprintf (fp, "fname %s\n", p->fname); + fprintf (fp, "ext %s\n", p->ext); fprintf (fp, "encoder %s\n", p->encoder); fprintf (fp, "method %d\n", p->method); fprintf (fp, "formats %08X\n", p->formats); @@ -159,7 +159,7 @@ encoder_preset_save (ddb_encoder_preset_t *p, int overwrite) { void encoder_preset_copy (ddb_encoder_preset_t *to, ddb_encoder_preset_t *from) { to->title = strdup (from->title); - to->fname = strdup (from->fname); + to->ext = strdup (from->ext); to->encoder = strdup (from->encoder); to->method = from->method; to->formats = from->formats; @@ -460,7 +460,7 @@ dsp_preset_replace (ddb_dsp_preset_t *from, ddb_dsp_preset_t *to) { } int -convert (DB_playItem_t *it, const char *outfolder, int selected_format, ddb_encoder_preset_t *encoder_preset, ddb_dsp_preset_t *dsp_preset, int *abort) { +convert (DB_playItem_t *it, const char *outfolder, const char *outfile, int selected_format, int preserve_folder_structure, const char *root_folder, ddb_encoder_preset_t *encoder_preset, ddb_dsp_preset_t *dsp_preset, int *abort) { int err = -1; FILE *enc_pipe = NULL; FILE *temp_file = NULL; @@ -478,8 +478,8 @@ convert (DB_playItem_t *it, const char *outfolder, int selected_format, ddb_enco if (fileinfo) { char fname[PATH_MAX]; int idx = deadbeef->pl_get_idx_of (it); - deadbeef->pl_format_title (it, idx, fname, sizeof (fname), -1, encoder_preset->fname); - snprintf (out, sizeof (out), "%s/%s", outfolder, fname); + deadbeef->pl_format_title (it, idx, fname, sizeof (fname), -1, outfile); + snprintf (out, sizeof (out), "%s/%s.%s", outfolder, fname, encoder_preset->ext); if (encoder_preset->method == DDB_ENCODER_METHOD_FILE) { const char *tmp = getenv ("TMPDIR"); if (!tmp) { diff --git a/plugins/converter/converter.glade b/plugins/converter/converter.glade index 30d55ca5..b28c37f3 100644 --- a/plugins/converter/converter.glade +++ b/plugins/converter/converter.glade @@ -81,7 +81,7 @@ True - Output folder + Output folder: False False GTK_JUSTIFY_LEFT @@ -120,6 +120,7 @@ True False + 0 @@ -159,6 +160,94 @@ + + + True + False + 8 + + + + True + Output file name: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + False + 0 + + + + True + Extension (e.g. .mp3) will be appended automatically. +Leave the field empty for default. + True + True + True + 0 + + True + + False + + + + 0 + True + True + + + + + + True + title_formatting_help_link_create + 0 + 0 + Fri, 03 Dec 2010 20:39:24 GMT + + + 0 + True + True + + + + + 0 + True + True + + + + + 0 + True + True + + + True @@ -168,7 +257,7 @@ True - Encoder + Encoder: False False GTK_JUSTIFY_LEFT @@ -260,7 +349,7 @@ True - DSP preset + DSP preset: False False GTK_JUSTIFY_LEFT @@ -353,7 +442,7 @@ True - Number of threads + Number of threads: False False GTK_JUSTIFY_LEFT @@ -386,6 +475,7 @@ False False 1 0 100 1 10 0 + 0 @@ -410,7 +500,7 @@ True - Output sample format + Output sample format: False False GTK_JUSTIFY_LEFT @@ -458,6 +548,130 @@ True + + + + True + False + 8 + + + + True + When file exists: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + Prompt +Overwrite + False + True + + + + 0 + True + True + + + + + 0 + True + True + + + + + + True + True + Preserve folder structure, starting from: + True + GTK_RELIEF_NORMAL + True + False + False + True + + + + 0 + False + False + + + + + + True + False + 0 + + + + True + True + True + True + 0 + + True + + False + + + + 0 + True + True + + + + + + True + True + ... + True + GTK_RELIEF_NORMAL + True + + + + 0 + False + False + + + + + 0 + True + True + + 0 @@ -547,7 +761,7 @@ True - Title + Title: False False GTK_JUSTIFY_LEFT @@ -604,7 +818,7 @@ True - Output file name + Output file extension: False False GTK_JUSTIFY_LEFT @@ -627,44 +841,17 @@ - + True - False - 0 - - - - True - True - True - True - 0 - - True - - True - - - 0 - True - True - - - - - - True - title_formatting_help_link_create - 0 - 0 - Fri, 03 Dec 2010 20:39:24 GMT - - - 0 - True - True - - + E.g. mp3 + True + True + True + 0 + + True + + True 0 @@ -689,7 +876,7 @@ True - Command line + Command line: False False GTK_JUSTIFY_LEFT @@ -720,14 +907,17 @@ True + Example: lame - %o +%i for input file, %o for output file, - for stdin True True True 0 - encodername - %s + True True + 0 @@ -774,7 +964,7 @@ True - Method + Method: False False GTK_JUSTIFY_LEFT @@ -964,7 +1154,7 @@ Temporary file True - <b>Sample formats</b> + <b>Sample formats supported by the encoder</b> False True GTK_JUSTIFY_LEFT diff --git a/plugins/converter/converter.h b/plugins/converter/converter.h index f1fbfdea..87a595ee 100644 --- a/plugins/converter/converter.h +++ b/plugins/converter/converter.h @@ -43,7 +43,7 @@ typedef struct ddb_preset_s { typedef struct ddb_encoder_preset_s { char *title; struct ddb_encoder_preset_s *next; - char *fname; + char *ext; char *encoder; int method; // pipe or file uint32_t formats; // combination of supported flags (FMT_*) @@ -133,7 +133,7 @@ typedef struct { ///////////////////////////// int - (*convert) (DB_playItem_t *it, const char *outfolder, int selected_format, ddb_encoder_preset_t *encoder_preset, ddb_dsp_preset_t *dsp_preset, int *abort); + (*convert) (DB_playItem_t *it, const char *outfolder, const char *outfile, int selected_format, int preserve_folder_structure, const char *root_folder, ddb_encoder_preset_t *encoder_preset, ddb_dsp_preset_t *dsp_preset, int *abort); } ddb_converter_t; diff --git a/plugins/converter/convgui.c b/plugins/converter/convgui.c index 3e1403cb..3f8c3145 100644 --- a/plugins/converter/convgui.c +++ b/plugins/converter/convgui.c @@ -39,6 +39,9 @@ typedef struct { DB_playItem_t **convert_items; int convert_items_count; char *outfolder; + char *outfile; + int preserve_folder_structure; + char *preserve_root_folder; int selected_format; ddb_encoder_preset_t *encoder_preset; ddb_dsp_preset_t *dsp_preset; @@ -99,7 +102,7 @@ converter_worker (void *ctx) { info->text = strdup (deadbeef->pl_find_meta (conv->convert_items[n], ":URI")); g_idle_add (update_progress_cb, info); - converter_plugin->convert (conv->convert_items[n], conv->outfolder, conv->selected_format, conv->encoder_preset, conv->dsp_preset, &conv->cancelled); + converter_plugin->convert (conv->convert_items[n], conv->outfolder, conv->outfile, conv->selected_format, conv->preserve_folder_structure, conv->preserve_root_folder, conv->encoder_preset, conv->dsp_preset, &conv->cancelled); if (conv->cancelled) { for (; n < conv->convert_items_count; n++) { deadbeef->pl_item_unref (conv->convert_items[n]); @@ -122,8 +125,9 @@ int converter_process (converter_ctx_t *conv) { conv->outfolder = strdup (gtk_entry_get_text (GTK_ENTRY (lookup_widget (conv->converter, "output_folder")))); - deadbeef->conf_set_str ("converter.output_folder", conv->outfolder); - deadbeef->conf_save (); + conv->outfile = strdup (gtk_entry_get_text (GTK_ENTRY (lookup_widget (conv->converter, "output_file")))); + conv->preserve_folder_structure = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (lookup_widget (conv->converter, "preserve_folders"))); + conv->preserve_root_folder = strdup (gtk_entry_get_text (GTK_ENTRY (lookup_widget (conv->converter, "preserve_root_folder")))); GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (conv->converter, "encoder")); int enc_preset = gtk_combo_box_get_active (combo); @@ -212,6 +216,10 @@ converter_show (DB_plugin_action_t *act, DB_playItem_t *it) { conv->converter = create_converterdlg (); gtk_entry_set_text (GTK_ENTRY (lookup_widget (conv->converter, "output_folder")), deadbeef->conf_get_str ("converter.output_folder", "")); + gtk_entry_set_text (GTK_ENTRY (lookup_widget (conv->converter, "output_file")), deadbeef->conf_get_str ("converter.output_file", "")); + gtk_entry_set_text (GTK_ENTRY (lookup_widget (conv->converter, "preserve_folder_root")), deadbeef->conf_get_str ("converter.preserve_root_folder", "")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lookup_widget (conv->converter, "preserve_folders")), deadbeef->conf_get_int ("converter.preserve_folder_structure", 0)); + gtk_combo_box_set_active (GTK_COMBO_BOX (lookup_widget (conv->converter, "overwrite_action")), deadbeef->conf_get_int ("converter.overwrite_action", 0)); GtkComboBox *combo; // fill encoder presets @@ -234,6 +242,9 @@ converter_show (DB_plugin_action_t *act, DB_playItem_t *it) { combo = GTK_COMBO_BOX (lookup_widget (conv->converter, "output_format")); gtk_combo_box_set_active (combo, deadbeef->conf_get_int ("converter.output_format", 0)); + // overwrite action + combo = GTK_COMBO_BOX (lookup_widget (conv->converter, "overwrite_action")); + gtk_combo_box_set_active (combo, deadbeef->conf_get_int ("converter.overwrite_action", 0)); for (;;) { int response = gtk_dialog_run (GTK_DIALOG (conv->converter)); @@ -311,6 +322,131 @@ on_converter_output_browse_clicked (GtkButton *button, } } + +void +on_output_folder_changed (GtkEntry *entry, + gpointer user_data) +{ + deadbeef->conf_set_str ("converter.output_folder", gtk_entry_get_text (entry)); + deadbeef->conf_save (); +} + + +void +on_numthreads_changed (GtkEditable *editable, + gpointer user_data) +{ + deadbeef->conf_set_int ("converter.threads", gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (editable))); + deadbeef->conf_save (); +} + +void +on_overwrite_action_changed (GtkComboBox *combobox, + gpointer user_data) +{ + deadbeef->conf_set_int ("converter.overwrite_action", gtk_combo_box_get_active (combobox)); + deadbeef->conf_save (); +} + +void +on_encoder_changed (GtkEditable *editable, + gpointer user_data) +{ + gtk_widget_set_has_tooltip (GTK_WIDGET (editable), TRUE); + + char enc[2000]; + const char *e = gtk_entry_get_text (GTK_ENTRY (editable)); + char *o = enc; + *o = 0; + int len = sizeof (enc); + while (e && *e) { + if (len <= 0) { + break; + } + if (e[0] == '%' && e[1]) { + if (e[1] == 'o') { + int l = snprintf (o, len, "\"OUTPUT_FILE_NAME\""); + o += l; + len -= l; + } + else if (e[1] == 'i') { + int l = snprintf (o, len, "\"TEMP_FILE_NAME\""); + o += l; + len -= l; + } + else { + strncpy (o, e, 2); + o += 2; + len -= 2; + } + e += 2; + } + else { + *o++ = *e++; + *o = 0; + len--; + } + } + + gtk_widget_set_tooltip_text (GTK_WIDGET (editable), enc); +} + +void +on_preserve_folder_browse_clicked (GtkButton *button, + gpointer user_data) +{ + GtkWidget *dlg = gtk_file_chooser_dialog_new (_("Select folder..."), GTK_WINDOW (current_ctx->converter), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); + gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (current_ctx->converter)); + + gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dlg), FALSE); + // restore folder + gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (dlg), deadbeef->conf_get_str ("filechooser.lastdir", "")); + int response = gtk_dialog_run (GTK_DIALOG (dlg)); + // store folder + gchar *folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (dlg)); + if (folder) { + deadbeef->conf_set_str ("filechooser.lastdir", folder); + g_free (folder); + deadbeef->sendmessage (M_CONFIG_CHANGED, 0, 0, 0); + } + if (response == GTK_RESPONSE_OK) { + folder = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dlg)); + gtk_widget_destroy (dlg); + if (folder) { + GtkWidget *entry = lookup_widget (current_ctx->converter, "preserve_folder_root"); + gtk_entry_set_text (GTK_ENTRY (entry), folder); + g_free (folder); + } + } + else { + gtk_widget_destroy (dlg); + } +} + +void +on_output_file_changed (GtkEntry *entry, + gpointer user_data) +{ + deadbeef->conf_set_str ("converter.output_file", gtk_entry_get_text (entry)); + deadbeef->conf_save (); +} + +void +on_preserve_folders_toggled (GtkToggleButton *togglebutton, + gpointer user_data) +{ + deadbeef->conf_set_int ("converter.preserve_folder_structure", gtk_toggle_button_get_active (togglebutton)); + deadbeef->conf_save (); +} + +void +on_preserve_folder_root_changed (GtkEntry *entry, + gpointer user_data) +{ + deadbeef->conf_set_str ("converter.preserve_root_folder", gtk_entry_get_text (entry)); + deadbeef->conf_save (); +} + DB_decoder_t * plug_get_decoder_for_id (const char *id) { DB_decoder_t **plugins = deadbeef->plug_get_decoder_list (); @@ -325,7 +461,7 @@ plug_get_decoder_for_id (const char *id) { void init_encoder_preset_from_dlg (GtkWidget *dlg, ddb_encoder_preset_t *p) { p->title = strdup (gtk_entry_get_text (GTK_ENTRY (lookup_widget (dlg, "title")))); - p->fname = strdup (gtk_entry_get_text (GTK_ENTRY (lookup_widget (dlg, "fname")))); + p->ext = strdup (gtk_entry_get_text (GTK_ENTRY (lookup_widget (dlg, "ext")))); p->encoder = strdup (gtk_entry_get_text (GTK_ENTRY (lookup_widget (dlg, "encoder")))); int method_idx = gtk_combo_box_get_active (GTK_COMBO_BOX (lookup_widget (dlg, "method"))); switch (method_idx) { @@ -367,8 +503,8 @@ edit_encoder_preset (char *title, GtkWidget *toplevel, int overwrite) { if (p->title) { gtk_entry_set_text (GTK_ENTRY (lookup_widget (dlg, "title")), p->title); } - if (p->fname) { - gtk_entry_set_text (GTK_ENTRY (lookup_widget (dlg, "fname")), p->fname); + if (p->ext) { + gtk_entry_set_text (GTK_ENTRY (lookup_widget (dlg, "ext")), p->ext); } if (p->encoder) { gtk_entry_set_text (GTK_ENTRY (lookup_widget (dlg, "encoder")), p->encoder); @@ -407,10 +543,10 @@ edit_encoder_preset (char *title, GtkWidget *toplevel, int overwrite) { } } free (old->title); - free (old->fname); + free (old->ext); free (old->encoder); old->title = p->title; - old->fname = p->fname; + old->ext = p->ext; old->encoder = p->encoder; old->method = p->method; old->formats = p->formats; diff --git a/plugins/converter/interface.c b/plugins/converter/interface.c index dec1e948..e217bf87 100644 --- a/plugins/converter/interface.c +++ b/plugins/converter/interface.c @@ -37,6 +37,11 @@ create_converterdlg (void) GtkWidget *hbox68; GtkWidget *output_folder; GtkWidget *converter_output_browse; + GtkWidget *hbox100; + GtkWidget *label122; + GtkWidget *hbox101; + GtkWidget *output_file; + GtkWidget *custom6; GtkWidget *hbox69; GtkWidget *label104; GtkWidget *hbox90; @@ -56,9 +61,19 @@ create_converterdlg (void) GtkWidget *hbox89; GtkWidget *label117; GtkWidget *output_format; + GtkWidget *hbox99; + GtkWidget *label121; + GtkWidget *overwrite_action; + GtkWidget *preserve_folders; + GtkWidget *hbox102; + GtkWidget *preserve_folder_root; + GtkWidget *preserve_folder_browse; GtkWidget *dialog_action_area5; GtkWidget *converter_cancel; GtkWidget *converter_ok; + GtkTooltips *tooltips; + + tooltips = gtk_tooltips_new (); converterdlg = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (converterdlg), _("Converter")); @@ -79,7 +94,7 @@ create_converterdlg (void) gtk_widget_show (hbox67); gtk_box_pack_start (GTK_BOX (vbox26), hbox67, FALSE, TRUE, 0); - label103 = gtk_label_new (_("Output folder")); + label103 = gtk_label_new (_("Output folder:")); gtk_widget_show (label103); gtk_box_pack_start (GTK_BOX (hbox67), label103, FALSE, FALSE, 0); @@ -96,11 +111,35 @@ create_converterdlg (void) gtk_widget_show (converter_output_browse); gtk_box_pack_start (GTK_BOX (hbox68), converter_output_browse, FALSE, FALSE, 0); + hbox100 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox100); + gtk_box_pack_start (GTK_BOX (vbox26), hbox100, TRUE, TRUE, 0); + + label122 = gtk_label_new (_("Output file name:")); + gtk_widget_show (label122); + gtk_box_pack_start (GTK_BOX (hbox100), label122, FALSE, FALSE, 0); + + hbox101 = gtk_hbox_new (FALSE, 0); + gtk_widget_show (hbox101); + gtk_box_pack_start (GTK_BOX (hbox100), hbox101, TRUE, TRUE, 0); + + output_file = gtk_entry_new (); + gtk_widget_show (output_file); + gtk_box_pack_start (GTK_BOX (hbox101), output_file, TRUE, TRUE, 0); + gtk_tooltips_set_tip (tooltips, output_file, _("Extension (e.g. .mp3) will be appended automatically.\nLeave the field empty for default."), NULL); + gtk_entry_set_invisible_char (GTK_ENTRY (output_file), 8226); + + custom6 = title_formatting_help_link_create ("custom6", "", "", 0, 0); + gtk_widget_show (custom6); + gtk_box_pack_start (GTK_BOX (hbox101), custom6, TRUE, TRUE, 0); + GTK_WIDGET_UNSET_FLAGS (custom6, GTK_CAN_FOCUS); + GTK_WIDGET_UNSET_FLAGS (custom6, GTK_CAN_DEFAULT); + hbox69 = gtk_hbox_new (FALSE, 8); gtk_widget_show (hbox69); gtk_box_pack_start (GTK_BOX (vbox26), hbox69, FALSE, FALSE, 0); - label104 = gtk_label_new (_("Encoder")); + label104 = gtk_label_new (_("Encoder:")); gtk_widget_show (label104); gtk_box_pack_start (GTK_BOX (hbox69), label104, FALSE, FALSE, 0); @@ -124,7 +163,7 @@ create_converterdlg (void) gtk_widget_show (hbox86); gtk_box_pack_start (GTK_BOX (vbox26), hbox86, FALSE, TRUE, 0); - label114 = gtk_label_new (_("DSP preset")); + label114 = gtk_label_new (_("DSP preset:")); gtk_widget_show (label114); gtk_box_pack_start (GTK_BOX (hbox86), label114, FALSE, FALSE, 0); @@ -148,7 +187,7 @@ create_converterdlg (void) gtk_widget_show (hbox88); gtk_box_pack_start (GTK_BOX (vbox26), hbox88, FALSE, TRUE, 0); - label116 = gtk_label_new (_("Number of threads")); + label116 = gtk_label_new (_("Number of threads:")); gtk_widget_show (label116); gtk_box_pack_start (GTK_BOX (hbox88), label116, FALSE, FALSE, 0); @@ -161,7 +200,7 @@ create_converterdlg (void) gtk_widget_show (hbox89); gtk_box_pack_start (GTK_BOX (vbox26), hbox89, FALSE, TRUE, 0); - label117 = gtk_label_new (_("Output sample format")); + label117 = gtk_label_new (_("Output sample format:")); gtk_widget_show (label117); gtk_box_pack_start (GTK_BOX (hbox89), label117, FALSE, FALSE, 0); @@ -175,6 +214,37 @@ create_converterdlg (void) gtk_combo_box_append_text (GTK_COMBO_BOX (output_format), _("32 bit signed int")); gtk_combo_box_append_text (GTK_COMBO_BOX (output_format), _("32 bit float")); + hbox99 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox99); + gtk_box_pack_start (GTK_BOX (vbox26), hbox99, TRUE, TRUE, 0); + + label121 = gtk_label_new (_("When file exists:")); + gtk_widget_show (label121); + gtk_box_pack_start (GTK_BOX (hbox99), label121, FALSE, FALSE, 0); + + overwrite_action = gtk_combo_box_new_text (); + gtk_widget_show (overwrite_action); + gtk_box_pack_start (GTK_BOX (hbox99), overwrite_action, TRUE, TRUE, 0); + gtk_combo_box_append_text (GTK_COMBO_BOX (overwrite_action), _("Prompt")); + gtk_combo_box_append_text (GTK_COMBO_BOX (overwrite_action), _("Overwrite")); + + preserve_folders = gtk_check_button_new_with_mnemonic (_("Preserve folder structure, starting from:")); + gtk_widget_show (preserve_folders); + gtk_box_pack_start (GTK_BOX (vbox26), preserve_folders, FALSE, FALSE, 0); + + hbox102 = gtk_hbox_new (FALSE, 0); + gtk_widget_show (hbox102); + gtk_box_pack_start (GTK_BOX (vbox26), hbox102, TRUE, TRUE, 0); + + preserve_folder_root = gtk_entry_new (); + gtk_widget_show (preserve_folder_root); + gtk_box_pack_start (GTK_BOX (hbox102), preserve_folder_root, TRUE, TRUE, 0); + gtk_entry_set_invisible_char (GTK_ENTRY (preserve_folder_root), 8226); + + preserve_folder_browse = gtk_button_new_with_mnemonic (_("...")); + gtk_widget_show (preserve_folder_browse); + gtk_box_pack_start (GTK_BOX (hbox102), preserve_folder_browse, FALSE, FALSE, 0); + dialog_action_area5 = GTK_DIALOG (converterdlg)->action_area; gtk_widget_show (dialog_action_area5); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area5), GTK_BUTTONBOX_END); @@ -189,9 +259,15 @@ create_converterdlg (void) gtk_dialog_add_action_widget (GTK_DIALOG (converterdlg), converter_ok, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (converter_ok, GTK_CAN_DEFAULT); + g_signal_connect ((gpointer) output_folder, "changed", + G_CALLBACK (on_output_folder_changed), + NULL); g_signal_connect ((gpointer) converter_output_browse, "clicked", G_CALLBACK (on_converter_output_browse_clicked), NULL); + g_signal_connect ((gpointer) output_file, "changed", + G_CALLBACK (on_output_file_changed), + NULL); g_signal_connect ((gpointer) encoder, "changed", G_CALLBACK (on_converter_encoder_changed), NULL); @@ -204,9 +280,24 @@ create_converterdlg (void) g_signal_connect ((gpointer) edit_dsp_presets, "clicked", G_CALLBACK (on_edit_dsp_presets_clicked), NULL); + g_signal_connect ((gpointer) numthreads, "changed", + G_CALLBACK (on_numthreads_changed), + NULL); g_signal_connect ((gpointer) output_format, "changed", G_CALLBACK (on_converter_output_format_changed), NULL); + g_signal_connect ((gpointer) overwrite_action, "changed", + G_CALLBACK (on_overwrite_action_changed), + NULL); + g_signal_connect ((gpointer) preserve_folders, "toggled", + G_CALLBACK (on_preserve_folders_toggled), + NULL); + g_signal_connect ((gpointer) preserve_folder_root, "changed", + G_CALLBACK (on_preserve_folder_root_changed), + NULL); + g_signal_connect ((gpointer) preserve_folder_browse, "clicked", + G_CALLBACK (on_preserve_folder_browse_clicked), + NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (converterdlg, converterdlg, "converterdlg"); @@ -217,6 +308,11 @@ create_converterdlg (void) GLADE_HOOKUP_OBJECT (converterdlg, hbox68, "hbox68"); GLADE_HOOKUP_OBJECT (converterdlg, output_folder, "output_folder"); GLADE_HOOKUP_OBJECT (converterdlg, converter_output_browse, "converter_output_browse"); + GLADE_HOOKUP_OBJECT (converterdlg, hbox100, "hbox100"); + GLADE_HOOKUP_OBJECT (converterdlg, label122, "label122"); + GLADE_HOOKUP_OBJECT (converterdlg, hbox101, "hbox101"); + GLADE_HOOKUP_OBJECT (converterdlg, output_file, "output_file"); + GLADE_HOOKUP_OBJECT (converterdlg, custom6, "custom6"); GLADE_HOOKUP_OBJECT (converterdlg, hbox69, "hbox69"); GLADE_HOOKUP_OBJECT (converterdlg, label104, "label104"); GLADE_HOOKUP_OBJECT (converterdlg, hbox90, "hbox90"); @@ -235,9 +331,17 @@ create_converterdlg (void) GLADE_HOOKUP_OBJECT (converterdlg, hbox89, "hbox89"); GLADE_HOOKUP_OBJECT (converterdlg, label117, "label117"); GLADE_HOOKUP_OBJECT (converterdlg, output_format, "output_format"); + GLADE_HOOKUP_OBJECT (converterdlg, hbox99, "hbox99"); + GLADE_HOOKUP_OBJECT (converterdlg, label121, "label121"); + GLADE_HOOKUP_OBJECT (converterdlg, overwrite_action, "overwrite_action"); + GLADE_HOOKUP_OBJECT (converterdlg, preserve_folders, "preserve_folders"); + GLADE_HOOKUP_OBJECT (converterdlg, hbox102, "hbox102"); + GLADE_HOOKUP_OBJECT (converterdlg, preserve_folder_root, "preserve_folder_root"); + GLADE_HOOKUP_OBJECT (converterdlg, preserve_folder_browse, "preserve_folder_browse"); GLADE_HOOKUP_OBJECT_NO_REF (converterdlg, dialog_action_area5, "dialog_action_area5"); GLADE_HOOKUP_OBJECT (converterdlg, converter_cancel, "converter_cancel"); GLADE_HOOKUP_OBJECT (converterdlg, converter_ok, "converter_ok"); + GLADE_HOOKUP_OBJECT_NO_REF (converterdlg, tooltips, "tooltips"); return converterdlg; } @@ -253,9 +357,7 @@ create_convpreset_editor (void) GtkWidget *title; GtkWidget *hbox96; GtkWidget *label120; - GtkWidget *hbox97; - GtkWidget *fname; - GtkWidget *custom5; + GtkWidget *ext; GtkWidget *hbox72; GtkWidget *label106; GtkWidget *hbox93; @@ -276,6 +378,9 @@ create_convpreset_editor (void) GtkWidget *dialog_action_area6; GtkWidget *convpreset_cancel; GtkWidget *convpreset_ok; + GtkTooltips *tooltips; + + tooltips = gtk_tooltips_new (); convpreset_editor = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (convpreset_editor), _("Edit Encoder Preset")); @@ -294,7 +399,7 @@ create_convpreset_editor (void) gtk_widget_show (hbox70); gtk_box_pack_start (GTK_BOX (vbox27), hbox70, FALSE, TRUE, 0); - label105 = gtk_label_new (_("Title")); + label105 = gtk_label_new (_("Title:")); gtk_widget_show (label105); gtk_box_pack_start (GTK_BOX (hbox70), label105, FALSE, FALSE, 0); @@ -309,31 +414,22 @@ create_convpreset_editor (void) gtk_widget_show (hbox96); gtk_box_pack_start (GTK_BOX (vbox27), hbox96, TRUE, TRUE, 0); - label120 = gtk_label_new (_("Output file name")); + label120 = gtk_label_new (_("Output file extension:")); gtk_widget_show (label120); gtk_box_pack_start (GTK_BOX (hbox96), label120, FALSE, FALSE, 0); - hbox97 = gtk_hbox_new (FALSE, 0); - gtk_widget_show (hbox97); - gtk_box_pack_start (GTK_BOX (hbox96), hbox97, TRUE, TRUE, 0); - - fname = gtk_entry_new (); - gtk_widget_show (fname); - gtk_box_pack_start (GTK_BOX (hbox97), fname, TRUE, TRUE, 0); - gtk_entry_set_invisible_char (GTK_ENTRY (fname), 9679); - gtk_entry_set_activates_default (GTK_ENTRY (fname), TRUE); - - custom5 = title_formatting_help_link_create ("custom5", "", "", 0, 0); - gtk_widget_show (custom5); - gtk_box_pack_start (GTK_BOX (hbox97), custom5, TRUE, TRUE, 0); - GTK_WIDGET_UNSET_FLAGS (custom5, GTK_CAN_FOCUS); - GTK_WIDGET_UNSET_FLAGS (custom5, GTK_CAN_DEFAULT); + ext = gtk_entry_new (); + gtk_widget_show (ext); + gtk_box_pack_start (GTK_BOX (hbox96), ext, TRUE, TRUE, 0); + gtk_tooltips_set_tip (tooltips, ext, _("E.g. mp3"), NULL); + gtk_entry_set_invisible_char (GTK_ENTRY (ext), 9679); + gtk_entry_set_activates_default (GTK_ENTRY (ext), TRUE); hbox72 = gtk_hbox_new (FALSE, 8); gtk_widget_show (hbox72); gtk_box_pack_start (GTK_BOX (vbox27), hbox72, FALSE, TRUE, 0); - label106 = gtk_label_new (_("Command line")); + label106 = gtk_label_new (_("Command line:")); gtk_widget_show (label106); gtk_box_pack_start (GTK_BOX (hbox72), label106, FALSE, FALSE, 0); @@ -344,7 +440,7 @@ create_convpreset_editor (void) encoder = gtk_entry_new (); gtk_widget_show (encoder); gtk_box_pack_start (GTK_BOX (hbox93), encoder, TRUE, TRUE, 0); - gtk_entry_set_text (GTK_ENTRY (encoder), _("encodername - %s")); + gtk_tooltips_set_tip (tooltips, encoder, _("Example: lame - %o\n%i for input file, %o for output file, - for stdin"), NULL); gtk_entry_set_invisible_char (GTK_ENTRY (encoder), 9679); gtk_entry_set_activates_default (GTK_ENTRY (encoder), TRUE); @@ -358,7 +454,7 @@ create_convpreset_editor (void) gtk_widget_show (hbox73); gtk_box_pack_start (GTK_BOX (vbox27), hbox73, FALSE, TRUE, 0); - label107 = gtk_label_new (_("Method")); + label107 = gtk_label_new (_("Method:")); gtk_widget_show (label107); gtk_box_pack_start (GTK_BOX (hbox73), label107, FALSE, FALSE, 0); @@ -414,7 +510,7 @@ create_convpreset_editor (void) (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); - label118 = gtk_label_new (_("Sample formats")); + label118 = gtk_label_new (_("Sample formats supported by the encoder")); gtk_widget_show (label118); gtk_frame_set_label_widget (GTK_FRAME (frame8), label118); gtk_label_set_use_markup (GTK_LABEL (label118), TRUE); @@ -433,6 +529,10 @@ create_convpreset_editor (void) gtk_dialog_add_action_widget (GTK_DIALOG (convpreset_editor), convpreset_ok, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (convpreset_ok, GTK_CAN_DEFAULT); + g_signal_connect ((gpointer) encoder, "changed", + G_CALLBACK (on_encoder_changed), + NULL); + /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (convpreset_editor, convpreset_editor, "convpreset_editor"); GLADE_HOOKUP_OBJECT_NO_REF (convpreset_editor, dialog_vbox7, "dialog_vbox7"); @@ -442,9 +542,7 @@ create_convpreset_editor (void) GLADE_HOOKUP_OBJECT (convpreset_editor, title, "title"); GLADE_HOOKUP_OBJECT (convpreset_editor, hbox96, "hbox96"); GLADE_HOOKUP_OBJECT (convpreset_editor, label120, "label120"); - GLADE_HOOKUP_OBJECT (convpreset_editor, hbox97, "hbox97"); - GLADE_HOOKUP_OBJECT (convpreset_editor, fname, "fname"); - GLADE_HOOKUP_OBJECT (convpreset_editor, custom5, "custom5"); + GLADE_HOOKUP_OBJECT (convpreset_editor, ext, "ext"); GLADE_HOOKUP_OBJECT (convpreset_editor, hbox72, "hbox72"); GLADE_HOOKUP_OBJECT (convpreset_editor, label106, "label106"); GLADE_HOOKUP_OBJECT (convpreset_editor, hbox93, "hbox93"); @@ -465,6 +563,7 @@ create_convpreset_editor (void) GLADE_HOOKUP_OBJECT_NO_REF (convpreset_editor, dialog_action_area6, "dialog_action_area6"); GLADE_HOOKUP_OBJECT (convpreset_editor, convpreset_cancel, "convpreset_cancel"); GLADE_HOOKUP_OBJECT (convpreset_editor, convpreset_ok, "convpreset_ok"); + GLADE_HOOKUP_OBJECT_NO_REF (convpreset_editor, tooltips, "tooltips"); return convpreset_editor; } -- cgit v1.2.3