summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2010-12-07 22:05:30 +0100
committerGravatar waker <wakeroid@gmail.com>2010-12-07 22:05:30 +0100
commit3e6756b0afb4ed938fa0a8d8d5d42c9d0e48e9e0 (patch)
treeb49647cbc3207bfc88aeec0c1d7efaa909f3eeba /plugins
parent247e06f034ddaffe81c1c27de96c04ca66900978 (diff)
converter DSP presets WIP
Diffstat (limited to 'plugins')
-rw-r--r--plugins/gtkui/callbacks.h8
-rw-r--r--plugins/gtkui/converter.c315
-rw-r--r--plugins/gtkui/converter.h59
-rw-r--r--plugins/gtkui/deadbeef.glade63
-rw-r--r--plugins/gtkui/interface.c80
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);