diff options
author | waker <wakeroid@gmail.com> | 2010-12-07 22:05:30 +0100 |
---|---|---|
committer | waker <wakeroid@gmail.com> | 2010-12-07 22:05:30 +0100 |
commit | 3e6756b0afb4ed938fa0a8d8d5d42c9d0e48e9e0 (patch) | |
tree | b49647cbc3207bfc88aeec0c1d7efaa909f3eeba /plugins/gtkui | |
parent | 247e06f034ddaffe81c1c27de96c04ca66900978 (diff) |
converter DSP presets WIP
Diffstat (limited to 'plugins/gtkui')
-rw-r--r-- | plugins/gtkui/callbacks.h | 8 | ||||
-rw-r--r-- | plugins/gtkui/converter.c | 315 | ||||
-rw-r--r-- | plugins/gtkui/converter.h | 59 | ||||
-rw-r--r-- | plugins/gtkui/deadbeef.glade | 63 | ||||
-rw-r--r-- | plugins/gtkui/interface.c | 80 |
5 files changed, 455 insertions, 70 deletions
diff --git a/plugins/gtkui/callbacks.h b/plugins/gtkui/callbacks.h index 7ea048a5..78234f01 100644 --- a/plugins/gtkui/callbacks.h +++ b/plugins/gtkui/callbacks.h @@ -1061,3 +1061,11 @@ on_converter_encoder_changed (GtkComboBox *combobox, void on_presets_cursor_changed (GtkTreeView *treeview, gpointer user_data); + +void +on_dsp_preset_add_plugin_clicked (GtkButton *button, + gpointer user_data); + +void +on_dsp_preset_remove_plugin_clicked (GtkButton *button, + gpointer user_data); diff --git a/plugins/gtkui/converter.c b/plugins/gtkui/converter.c index 71841bae..b26247ec 100644 --- a/plugins/gtkui/converter.c +++ b/plugins/gtkui/converter.c @@ -26,29 +26,8 @@ #include "interface.h" #include "gtkui.h" -enum { - DDB_ENCODER_METHOD_PIPE = 0, - DDB_ENCODER_METHOD_FILE = 1, -}; - -enum { - DDB_ENCODER_FMT_8BIT = 0x1, - DDB_ENCODER_FMT_16BIT = 0x2, - DDB_ENCODER_FMT_24BIT = 0x4, - DDB_ENCODER_FMT_32BIT = 0x8, - DDB_ENCODER_FMT_32BITFLOAT = 0x10, -}; - -typedef struct ddb_encoder_preset_s { - char *title; - char *fname; - char *encoder; - int method; // pipe or file - uint32_t formats; // combination of supported flags (FMT_*) - struct ddb_encoder_preset_s *next; -} ddb_encoder_preset_t; - ddb_encoder_preset_t *encoder_presets; +ddb_dsp_preset_t *dsp_presets; ddb_encoder_preset_t * ddb_encoder_preset_alloc (void) { @@ -163,12 +142,89 @@ ddb_encoder_preset_save (ddb_encoder_preset_t *p, int overwrite) { return 0; } +ddb_dsp_preset_t * +ddb_dsp_preset_alloc (void) { + ddb_dsp_preset_t *p = malloc (sizeof (ddb_dsp_preset_t)); + if (!p) { + fprintf (stderr, "failed to alloc ddb_encoder_preset_t\n"); + return NULL; + } + memset (p, 0, sizeof (ddb_dsp_preset_t)); + return p; +} + +void +ddb_dsp_preset_free (ddb_dsp_preset_t *p) { + if (p) { + if (p->title) { + free (p->title); + } + free (p); + } +} + +ddb_dsp_preset_t * +ddb_dsp_preset_load (const char *fname) { + return NULL; +} + +int +ddb_dsp_preset_save (ddb_dsp_preset_t *p, int overwrite) { + const char *confdir = deadbeef->get_config_dir (); + char path[1024]; + if (snprintf (path, sizeof (path), "%s/presets", confdir) < 0) { + return -1; + } + mkdir (path, 0755); + if (snprintf (path, sizeof (path), "%s/presets/dsp", confdir) < 0) { + return -1; + } + mkdir (path, 0755); + if (snprintf (path, sizeof (path), "%s/presets/dsp/%s.txt", confdir, p->title) < 0) { + return -1; + } + + if (!overwrite) { + FILE *fp = fopen (path, "rb"); + if (fp) { + fclose (fp); + return -2; + } + } + + FILE *fp = fopen (path, "w+b"); + if (!fp) { + return -1; + } + + fprintf (fp, "title %s\n", p->title); + + DB_dsp_instance_t *inst = p->chain; + while (inst) { + fprintf (fp, "%s {\n", inst->plugin->plugin.id); + fprintf (fp, "\t%s\n", inst->id); + if (inst->plugin->num_params) { + int n = inst->plugin->num_params (); + int i; + for (i = 0; i < n; i++) { + float v = inst->plugin->get_param (inst, i); + fprintf (fp, "\t%d %f\n", i, v); + } + } + fprintf (fp, "}\n"); + inst = inst->next; + } + + fclose (fp); + return 0; +} + static int dirent_alphasort (const struct dirent **a, const struct dirent **b) { return strcmp ((*a)->d_name, (*b)->d_name); } int -enc_preset_filter (const struct dirent *ent) { +scandir_preset_filter (const struct dirent *ent) { char *ext = strrchr (ent->d_name, '.'); if (ext && !strcasecmp (ext, ".txt")) { return 1; @@ -184,7 +240,7 @@ load_encoder_presets (void) { return -1; } struct dirent **namelist = NULL; - int n = scandir (path, &namelist, enc_preset_filter, dirent_alphasort); + int n = scandir (path, &namelist, scandir_preset_filter, dirent_alphasort); int i; for (i = 0; i < n; i++) { char s[1024]; @@ -499,13 +555,13 @@ on_encoder_preset_add (GtkButton *button, encoder_presets = p; } else { - GtkWidget *warndlg = gtk_message_dialog_new (GTK_WINDOW (mainwin), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Failed to save preset")); + GtkWidget *warndlg = gtk_message_dialog_new (GTK_WINDOW (mainwin), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Failed to save encoder preset")); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (warndlg), err == -1 ? _("Check preset folder permissions, try to pick different title, or free up some disk space") : _("Preset with the same name already exists. Try to pick another title.")); gtk_window_set_title (GTK_WINDOW (warndlg), _("Error")); gtk_window_set_transient_for (GTK_WINDOW (warndlg), GTK_WINDOW (dlg)); int response = gtk_dialog_run (GTK_DIALOG (warndlg)); - gtk_widget_destroy (dlg); + gtk_widget_destroy (warndlg); continue; } } @@ -605,7 +661,7 @@ on_encoder_preset_edit (GtkButton *button, free (p); } else { - GtkWidget *warndlg = gtk_message_dialog_new (GTK_WINDOW (mainwin), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Failed to save preset")); + GtkWidget *warndlg = gtk_message_dialog_new (GTK_WINDOW (mainwin), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Failed to save encoder preset")); gtk_window_set_transient_for (GTK_WINDOW (warndlg), GTK_WINDOW (dlg)); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (warndlg), err == -1 ? _("Check preset folder permissions, try to pick different title, or free up some disk space") : _("Preset with the same name already exists. Try to pick another title.")); gtk_window_set_title (GTK_WINDOW (warndlg), _("Error")); @@ -704,6 +760,7 @@ on_edit_encoder_presets_clicked (GtkButton *button, gpointer user_data) { GtkWidget *dlg = create_preset_list (); + gtk_window_set_title (GTK_WINDOW (dlg), _("Encoders")); gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (converter)); g_signal_connect ((gpointer)lookup_widget (dlg, "add"), "clicked", G_CALLBACK (on_encoder_preset_add), NULL); g_signal_connect ((gpointer)lookup_widget (dlg, "remove"), "clicked", G_CALLBACK (on_encoder_preset_remove), NULL); @@ -724,11 +781,215 @@ on_edit_encoder_presets_clicked (GtkButton *button, gtk_widget_destroy (dlg); } +///// dsp preset gui + +ddb_dsp_preset_t *current_dsp_preset; + +void +fill_dsp_plugin_list (GtkListStore *mdl) { + struct DB_dsp_s **dsp = deadbeef->plug_get_dsp_list (); + int i; + for (i = 0; dsp[i]; i++) { + GtkTreeIter iter; + gtk_list_store_append (mdl, &iter); + gtk_list_store_set (mdl, &iter, 0, dsp[i]->plugin.name, -1); + } +} + +void +fill_dsp_preset_chain (GtkListStore *mdl) { + DB_dsp_instance_t *dsp = current_dsp_preset->chain; + while (dsp) { + GtkTreeIter iter; + gtk_list_store_append (mdl, &iter); + gtk_list_store_set (mdl, &iter, 0, dsp->plugin->plugin.name, 1, dsp->id, -1); + dsp = dsp->next; + } +} + +void +on_dsp_preset_add_plugin_clicked (GtkButton *button, + gpointer user_data) +{ + GtkWidget *dlg = create_select_dsp_plugin (); + GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button)); + gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (toplevel)); + gtk_window_set_title (GTK_WINDOW (dlg), _("Add plugin to DSP chain")); + + GtkComboBox *combo; + // fill encoder presets + combo = GTK_COMBO_BOX (lookup_widget (dlg, "plugin")); + GtkListStore *mdl = GTK_LIST_STORE (gtk_combo_box_get_model (combo)); + fill_dsp_plugin_list (mdl); + gtk_combo_box_set_active (combo, deadbeef->conf_get_int ("converter.last_selected_dsp", 0)); + + int r = gtk_dialog_run (GTK_DIALOG (dlg)); + if (r == GTK_RESPONSE_OK) { + // get title + const char *title = gtk_entry_get_text (GTK_ENTRY (lookup_widget (dlg, "title"))); + + // create new instance of the selected plugin + int idx = gtk_combo_box_get_active (combo); + struct DB_dsp_s **dsp = deadbeef->plug_get_dsp_list (); + int i; + DB_dsp_instance_t *inst = NULL; + for (i = 0; dsp[i]; i++) { + if (i == idx) { + inst = dsp[i]->open (title); + break; + } + } + if (inst) { + // append to DSP chain + DB_dsp_instance_t *tail = current_dsp_preset->chain; + while (tail && tail->next) { + tail = tail->next; + } + if (tail) { + tail->next = inst; + } + else { + current_dsp_preset->chain = inst; + } + + // reinit list of instances + GtkWidget *list = lookup_widget (toplevel, "plugins"); + GtkListStore *mdl = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW(list))); + gtk_list_store_clear (mdl); + fill_dsp_preset_chain (mdl); + } + else { + fprintf (stderr, "converter: failed to add DSP plugin to chain\n"); + } + } + gtk_widget_destroy (dlg); +} + + +void +on_dsp_preset_remove_plugin_clicked (GtkButton *button, + gpointer user_data) +{ + +} + + +void +on_dsp_preset_add (GtkButton *button, + gpointer user_data) +{ + GtkWidget *dlg = create_dsppreset_editor (); + gtk_dialog_set_default_response (GTK_DIALOG (dlg), GTK_RESPONSE_OK); + GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button)); + gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (toplevel)); + gtk_window_set_title (GTK_WINDOW (dlg), _("New DSP Preset")); + + current_dsp_preset = ddb_dsp_preset_alloc (); + + { + // left list + GtkWidget *list = lookup_widget (dlg, "plugins"); + GtkCellRenderer *title_cell = gtk_cell_renderer_text_new (); + GtkTreeViewColumn *col1 = gtk_tree_view_column_new_with_attributes (_("ID"), title_cell, "text", 0, NULL); + GtkTreeViewColumn *col2 = gtk_tree_view_column_new_with_attributes (_("Plugin"), title_cell, "text", 1, NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (list), GTK_TREE_VIEW_COLUMN (col1)); + gtk_tree_view_append_column (GTK_TREE_VIEW (list), GTK_TREE_VIEW_COLUMN (col2)); + GtkListStore *mdl = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); + gtk_tree_view_set_model (GTK_TREE_VIEW (list), GTK_TREE_MODEL (mdl)); + } + + { + // right list + GtkWidget *list = lookup_widget (dlg, "params"); + GtkCellRenderer *title_cell = gtk_cell_renderer_text_new (); + GtkTreeViewColumn *col1 = gtk_tree_view_column_new_with_attributes (_("Param"), title_cell, "text", 0, NULL); + GtkTreeViewColumn *col2 = gtk_tree_view_column_new_with_attributes (_("Value"), title_cell, "text", 1, NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (list), GTK_TREE_VIEW_COLUMN (col1)); + gtk_tree_view_append_column (GTK_TREE_VIEW (list), GTK_TREE_VIEW_COLUMN (col2)); + GtkListStore *mdl = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); + gtk_tree_view_set_model (GTK_TREE_VIEW (list), GTK_TREE_MODEL (mdl)); + } + + + for (;;) { + int r = gtk_dialog_run (GTK_DIALOG (dlg)); + + if (r == GTK_RESPONSE_OK) { + if (current_dsp_preset->title) { + free (current_dsp_preset->title); + } + current_dsp_preset->title = strdup (gtk_entry_get_text (GTK_ENTRY (lookup_widget (dlg, "title")))); + int err = ddb_dsp_preset_save (current_dsp_preset, 0); + if (err < 0) { + GtkWidget *warndlg = gtk_message_dialog_new (GTK_WINDOW (mainwin), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Failed to save DSP preset")); + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (warndlg), err == -1 ? _("Check preset folder permissions, try to pick different title, or free up some disk space") : _("Preset with the same name already exists. Try to pick another title.")); + gtk_window_set_title (GTK_WINDOW (warndlg), _("Error")); + + gtk_window_set_transient_for (GTK_WINDOW (warndlg), GTK_WINDOW (dlg)); + int response = gtk_dialog_run (GTK_DIALOG (warndlg)); + gtk_widget_destroy (warndlg); + continue; + } + + // append to list of presets + ddb_dsp_preset_t *tail = dsp_presets; + while (tail && tail->next) { + tail = tail->next; + } + if (tail) { + tail->next = current_dsp_preset; + } + else { + dsp_presets = current_dsp_preset; + } + } + else { + ddb_dsp_preset_free (current_dsp_preset); + } + + current_dsp_preset = NULL; + break; + } + + gtk_widget_destroy (dlg); +} + +void +on_dsp_preset_remove (GtkButton *button, + gpointer user_data) +{ +} + +void +on_dsp_preset_edit (GtkButton *button, + gpointer user_data) +{ +} void on_edit_dsp_presets_clicked (GtkButton *button, gpointer user_data) { + GtkWidget *dlg = create_preset_list (); + gtk_window_set_title (GTK_WINDOW (dlg), _("DSP Presets")); + gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (converter)); + g_signal_connect ((gpointer)lookup_widget (dlg, "add"), "clicked", G_CALLBACK (on_dsp_preset_add), NULL); + g_signal_connect ((gpointer)lookup_widget (dlg, "remove"), "clicked", G_CALLBACK (on_dsp_preset_remove), NULL); + g_signal_connect ((gpointer)lookup_widget (dlg, "edit"), "clicked", G_CALLBACK (on_dsp_preset_edit), NULL); + + GtkWidget *list = lookup_widget (dlg, "presets"); + GtkCellRenderer *title_cell = gtk_cell_renderer_text_new (); + GtkTreeViewColumn *col = gtk_tree_view_column_new_with_attributes (_("Title"), title_cell, "text", 0, NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (list), GTK_TREE_VIEW_COLUMN (col)); + GtkListStore *mdl = gtk_list_store_new (1, G_TYPE_STRING); + gtk_tree_view_set_model (GTK_TREE_VIEW (list), GTK_TREE_MODEL (mdl)); +// fill_dsp_presets (mdl); +// int curr = deadbeef->conf_get_int ("converter.dsp_preset", 0); +// GtkTreePath *path = gtk_tree_path_new_from_indices (curr, -1); +// gtk_tree_view_set_cursor (GTK_TREE_VIEW (list), path, col, FALSE); +// gtk_tree_path_free (path); + gtk_dialog_run (GTK_DIALOG (dlg)); + gtk_widget_destroy (dlg); } diff --git a/plugins/gtkui/converter.h b/plugins/gtkui/converter.h index 56bcfe12..d9cb3eed 100644 --- a/plugins/gtkui/converter.h +++ b/plugins/gtkui/converter.h @@ -19,6 +19,65 @@ #ifndef __CONVERTER_H #define __CONVERTER_H +#include <stdint.h> +#include "../../deadbeef.h" + +enum { + DDB_ENCODER_METHOD_PIPE = 0, + DDB_ENCODER_METHOD_FILE = 1, +}; + +enum { + DDB_ENCODER_FMT_8BIT = 0x1, + DDB_ENCODER_FMT_16BIT = 0x2, + DDB_ENCODER_FMT_24BIT = 0x4, + DDB_ENCODER_FMT_32BIT = 0x8, + DDB_ENCODER_FMT_32BITFLOAT = 0x10, +}; + +typedef struct ddb_encoder_preset_s { + char *title; + char *fname; + char *encoder; + int method; // pipe or file + uint32_t formats; // combination of supported flags (FMT_*) + struct ddb_encoder_preset_s *next; +} ddb_encoder_preset_t; + +typedef struct ddb_dsp_preset_s { + char *title; + DB_dsp_instance_t *chain; + struct ddb_dsp_preset_s *next; +} ddb_dsp_preset_t; + +ddb_encoder_preset_t * +ddb_encoder_preset_alloc (void); + +void +ddb_encoder_preset_free (ddb_encoder_preset_t *p); + +ddb_encoder_preset_t * +ddb_encoder_preset_load (const char *fname); + +// @return -1 on path/write error, -2 if file already exists +int +ddb_encoder_preset_save (ddb_encoder_preset_t *p, int overwrite); + +ddb_dsp_preset_t * +ddb_dsp_preset_alloc (void); + +void +ddb_dsp_preset_free (ddb_dsp_preset_t *p); + +ddb_dsp_preset_t * +ddb_dsp_preset_load (const char *fname); + +// @return -1 on path/write error, -2 if file already exists +int +ddb_dsp_preset_save (ddb_dsp_preset_t *p, int overwrite); + + +// gtk stuff void converter_show (void); diff --git a/plugins/gtkui/deadbeef.glade b/plugins/gtkui/deadbeef.glade index d60bb237..f48cdad1 100644 --- a/plugins/gtkui/deadbeef.glade +++ b/plugins/gtkui/deadbeef.glade @@ -6660,10 +6660,10 @@ SOCKS5_HOSTNAME</property> <widget class="GtkDialog" id="convpreset_editor"> <property name="visible">True</property> - <property name="title" translatable="yes">Edit Converter Preset</property> + <property name="title" translatable="yes">Edit Encoder Preset</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</property> + <property name="modal">True</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</property> <property name="decorated">True</property> @@ -7409,8 +7409,8 @@ Descending</property> </widget> <widget class="GtkDialog" id="dsppreset_editor"> - <property name="width_request">700</property> - <property name="height_request">500</property> + <property name="width_request">468</property> + <property name="height_request">254</property> <property name="visible">True</property> <property name="title" translatable="yes">DSP Preset Editor</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> @@ -7488,7 +7488,7 @@ Descending</property> <child> <widget class="GtkLabel" id="label111"> <property name="visible">True</property> - <property name="label" translatable="yes">Preset Title</property> + <property name="label" translatable="yes">Title</property> <property name="use_underline">False</property> <property name="use_markup">False</property> <property name="justify">GTK_JUSTIFY_LEFT</property> @@ -7511,16 +7511,16 @@ Descending</property> </child> <child> - <widget class="GtkEntry" id="entry1"> + <widget class="GtkEntry" id="title"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">True</property> <property name="visibility">True</property> <property name="max_length">0</property> - <property name="text" translatable="yes"></property> + <property name="text" translatable="yes">Untitled DSP Preset</property> <property name="has_frame">True</property> <property name="invisible_char">●</property> - <property name="activates_default">False</property> + <property name="activates_default">True</property> </widget> <packing> <property name="padding">0</property> @@ -7554,13 +7554,14 @@ Descending</property> <property name="spacing">8</property> <child> - <widget class="GtkButton" id="button4"> + <widget class="GtkButton" id="add"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="label" translatable="yes">Add</property> <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> + <signal name="clicked" handler="on_dsp_preset_add_plugin_clicked" last_modification_time="Tue, 07 Dec 2010 20:11:31 GMT"/> </widget> <packing> <property name="padding">0</property> @@ -7570,13 +7571,14 @@ Descending</property> </child> <child> - <widget class="GtkButton" id="button5"> + <widget class="GtkButton" id="remove"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="label" translatable="yes">Remove</property> <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> + <signal name="clicked" handler="on_dsp_preset_remove_plugin_clicked" last_modification_time="Tue, 07 Dec 2010 20:12:20 GMT"/> </widget> <packing> <property name="padding">0</property> @@ -7596,13 +7598,14 @@ Descending</property> <widget class="GtkScrolledWindow" id="scrolledwindow7"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property> - <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> <property name="shadow_type">GTK_SHADOW_IN</property> <property name="window_placement">GTK_CORNER_TOP_LEFT</property> <child> - <widget class="GtkTreeView" id="treeview1"> + <widget class="GtkTreeView" id="plugins"> + <property name="width_request">196</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="headers_visible">False</property> @@ -7660,7 +7663,33 @@ Descending</property> </child> <child> - <placeholder/> + <widget class="GtkScrolledWindow" id="scrolledwindow9"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="shadow_type">GTK_SHADOW_IN</property> + <property name="window_placement">GTK_CORNER_TOP_LEFT</property> + + <child> + <widget class="GtkTreeView" id="params"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="headers_visible">True</property> + <property name="rules_hint">False</property> + <property name="reorderable">False</property> + <property name="enable_search">True</property> + <property name="fixed_height_mode">False</property> + <property name="hover_selection">False</property> + <property name="hover_expand">False</property> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> </child> </widget> <packing> @@ -7815,7 +7844,7 @@ Descending</property> <child> <widget class="GtkLabel" id="label112"> <property name="visible">True</property> - <property name="label" translatable="yes">Title (leave empty for auto)</property> + <property name="label" translatable="yes">Title</property> <property name="use_underline">False</property> <property name="use_markup">False</property> <property name="justify">GTK_JUSTIFY_LEFT</property> @@ -7844,10 +7873,10 @@ Descending</property> <property name="editable">True</property> <property name="visibility">True</property> <property name="max_length">0</property> - <property name="text" translatable="yes"></property> + <property name="text" translatable="yes">Untitled</property> <property name="has_frame">True</property> <property name="invisible_char">●</property> - <property name="activates_default">False</property> + <property name="activates_default">True</property> </widget> <packing> <property name="padding">0</property> diff --git a/plugins/gtkui/interface.c b/plugins/gtkui/interface.c index ffb2d602..e2517e23 100644 --- a/plugins/gtkui/interface.c +++ b/plugins/gtkui/interface.c @@ -3533,7 +3533,8 @@ create_convpreset_editor (void) GtkWidget *convpreset_ok; convpreset_editor = gtk_dialog_new (); - gtk_window_set_title (GTK_WINDOW (convpreset_editor), _("Edit Converter Preset")); + gtk_window_set_title (GTK_WINDOW (convpreset_editor), _("Edit Encoder Preset")); + gtk_window_set_modal (GTK_WINDOW (convpreset_editor), TRUE); gtk_window_set_type_hint (GTK_WINDOW (convpreset_editor), GDK_WINDOW_TYPE_HINT_DIALOG); dialog_vbox7 = GTK_DIALOG (convpreset_editor)->vbox; @@ -3837,22 +3838,24 @@ create_dsppreset_editor (void) GtkWidget *vbox30; GtkWidget *hbox81; GtkWidget *label111; - GtkWidget *entry1; + GtkWidget *title; GtkWidget *hpaned2; GtkWidget *vbox29; GtkWidget *hbox82; - GtkWidget *button4; - GtkWidget *button5; + GtkWidget *add; + GtkWidget *remove; GtkWidget *scrolledwindow7; - GtkWidget *treeview1; + GtkWidget *plugins; GtkWidget *vbox32; GtkWidget *label110; + GtkWidget *scrolledwindow9; + GtkWidget *params; GtkWidget *dialog_action_area8; GtkWidget *cancelbutton6; GtkWidget *okbutton6; dsppreset_editor = gtk_dialog_new (); - gtk_widget_set_size_request (dsppreset_editor, 700, 500); + gtk_widget_set_size_request (dsppreset_editor, 468, 254); gtk_window_set_title (GTK_WINDOW (dsppreset_editor), _("DSP Preset Editor")); gtk_window_set_modal (GTK_WINDOW (dsppreset_editor), TRUE); gtk_window_set_type_hint (GTK_WINDOW (dsppreset_editor), GDK_WINDOW_TYPE_HINT_DIALOG); @@ -3869,14 +3872,16 @@ create_dsppreset_editor (void) gtk_widget_show (hbox81); gtk_box_pack_start (GTK_BOX (vbox30), hbox81, FALSE, TRUE, 0); - label111 = gtk_label_new (_("Preset Title")); + label111 = gtk_label_new (_("Title")); gtk_widget_show (label111); gtk_box_pack_start (GTK_BOX (hbox81), label111, FALSE, FALSE, 0); - entry1 = gtk_entry_new (); - gtk_widget_show (entry1); - gtk_box_pack_start (GTK_BOX (hbox81), entry1, TRUE, TRUE, 0); - gtk_entry_set_invisible_char (GTK_ENTRY (entry1), 9679); + title = gtk_entry_new (); + gtk_widget_show (title); + gtk_box_pack_start (GTK_BOX (hbox81), title, TRUE, TRUE, 0); + gtk_entry_set_text (GTK_ENTRY (title), _("Untitled DSP Preset")); + gtk_entry_set_invisible_char (GTK_ENTRY (title), 9679); + gtk_entry_set_activates_default (GTK_ENTRY (title), TRUE); hpaned2 = gtk_hpaned_new (); gtk_widget_show (hpaned2); @@ -3890,23 +3895,25 @@ create_dsppreset_editor (void) gtk_widget_show (hbox82); gtk_box_pack_start (GTK_BOX (vbox29), hbox82, FALSE, TRUE, 0); - button4 = gtk_button_new_with_mnemonic (_("Add")); - gtk_widget_show (button4); - gtk_box_pack_start (GTK_BOX (hbox82), button4, TRUE, TRUE, 0); + add = gtk_button_new_with_mnemonic (_("Add")); + gtk_widget_show (add); + gtk_box_pack_start (GTK_BOX (hbox82), add, TRUE, TRUE, 0); - button5 = gtk_button_new_with_mnemonic (_("Remove")); - gtk_widget_show (button5); - gtk_box_pack_start (GTK_BOX (hbox82), button5, TRUE, TRUE, 0); + remove = gtk_button_new_with_mnemonic (_("Remove")); + gtk_widget_show (remove); + gtk_box_pack_start (GTK_BOX (hbox82), remove, TRUE, TRUE, 0); scrolledwindow7 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow7); gtk_box_pack_start (GTK_BOX (vbox29), scrolledwindow7, TRUE, TRUE, 0); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow7), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow7), GTK_SHADOW_IN); - treeview1 = gtk_tree_view_new (); - gtk_widget_show (treeview1); - gtk_container_add (GTK_CONTAINER (scrolledwindow7), treeview1); - gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview1), FALSE); + plugins = gtk_tree_view_new (); + gtk_widget_show (plugins); + gtk_container_add (GTK_CONTAINER (scrolledwindow7), plugins); + gtk_widget_set_size_request (plugins, 196, -1); + gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (plugins), FALSE); vbox32 = gtk_vbox_new (FALSE, 8); gtk_widget_show (vbox32); @@ -3916,6 +3923,16 @@ create_dsppreset_editor (void) gtk_widget_show (label110); gtk_box_pack_start (GTK_BOX (vbox32), label110, FALSE, FALSE, 0); + scrolledwindow9 = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (scrolledwindow9); + gtk_box_pack_start (GTK_BOX (vbox32), scrolledwindow9, TRUE, TRUE, 0); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow9), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow9), GTK_SHADOW_IN); + + params = gtk_tree_view_new (); + gtk_widget_show (params); + gtk_container_add (GTK_CONTAINER (scrolledwindow9), params); + dialog_action_area8 = GTK_DIALOG (dsppreset_editor)->action_area; gtk_widget_show (dialog_action_area8); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area8), GTK_BUTTONBOX_END); @@ -3930,22 +3947,31 @@ create_dsppreset_editor (void) gtk_dialog_add_action_widget (GTK_DIALOG (dsppreset_editor), okbutton6, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (okbutton6, GTK_CAN_DEFAULT); + g_signal_connect ((gpointer) add, "clicked", + G_CALLBACK (on_dsp_preset_add_plugin_clicked), + NULL); + g_signal_connect ((gpointer) remove, "clicked", + G_CALLBACK (on_dsp_preset_remove_plugin_clicked), + NULL); + /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (dsppreset_editor, dsppreset_editor, "dsppreset_editor"); GLADE_HOOKUP_OBJECT_NO_REF (dsppreset_editor, dialog_vbox9, "dialog_vbox9"); GLADE_HOOKUP_OBJECT (dsppreset_editor, vbox30, "vbox30"); GLADE_HOOKUP_OBJECT (dsppreset_editor, hbox81, "hbox81"); GLADE_HOOKUP_OBJECT (dsppreset_editor, label111, "label111"); - GLADE_HOOKUP_OBJECT (dsppreset_editor, entry1, "entry1"); + GLADE_HOOKUP_OBJECT (dsppreset_editor, title, "title"); GLADE_HOOKUP_OBJECT (dsppreset_editor, hpaned2, "hpaned2"); GLADE_HOOKUP_OBJECT (dsppreset_editor, vbox29, "vbox29"); GLADE_HOOKUP_OBJECT (dsppreset_editor, hbox82, "hbox82"); - GLADE_HOOKUP_OBJECT (dsppreset_editor, button4, "button4"); - GLADE_HOOKUP_OBJECT (dsppreset_editor, button5, "button5"); + GLADE_HOOKUP_OBJECT (dsppreset_editor, add, "add"); + GLADE_HOOKUP_OBJECT (dsppreset_editor, remove, "remove"); GLADE_HOOKUP_OBJECT (dsppreset_editor, scrolledwindow7, "scrolledwindow7"); - GLADE_HOOKUP_OBJECT (dsppreset_editor, treeview1, "treeview1"); + GLADE_HOOKUP_OBJECT (dsppreset_editor, plugins, "plugins"); GLADE_HOOKUP_OBJECT (dsppreset_editor, vbox32, "vbox32"); GLADE_HOOKUP_OBJECT (dsppreset_editor, label110, "label110"); + GLADE_HOOKUP_OBJECT (dsppreset_editor, scrolledwindow9, "scrolledwindow9"); + GLADE_HOOKUP_OBJECT (dsppreset_editor, params, "params"); GLADE_HOOKUP_OBJECT_NO_REF (dsppreset_editor, dialog_action_area8, "dialog_action_area8"); GLADE_HOOKUP_OBJECT (dsppreset_editor, cancelbutton6, "cancelbutton6"); GLADE_HOOKUP_OBJECT (dsppreset_editor, okbutton6, "okbutton6"); @@ -3998,14 +4024,16 @@ create_select_dsp_plugin (void) gtk_widget_show (hbox84); gtk_box_pack_start (GTK_BOX (vbox31), hbox84, FALSE, FALSE, 0); - label112 = gtk_label_new (_("Title (leave empty for auto)")); + label112 = gtk_label_new (_("Title")); gtk_widget_show (label112); gtk_box_pack_start (GTK_BOX (hbox84), label112, FALSE, FALSE, 0); title = gtk_entry_new (); gtk_widget_show (title); gtk_box_pack_start (GTK_BOX (hbox84), title, TRUE, TRUE, 0); + gtk_entry_set_text (GTK_ENTRY (title), _("Untitled")); gtk_entry_set_invisible_char (GTK_ENTRY (title), 9679); + gtk_entry_set_activates_default (GTK_ENTRY (title), TRUE); dialog_action_area9 = GTK_DIALOG (select_dsp_plugin)->action_area; gtk_widget_show (dialog_action_area9); |