summaryrefslogtreecommitdiff
path: root/plugins/converter
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/converter')
-rw-r--r--plugins/converter/Makefile27
-rw-r--r--plugins/converter/callbacks.c10
-rw-r--r--plugins/converter/callbacks.h80
-rw-r--r--plugins/converter/converter.glade1599
-rw-r--r--plugins/converter/converter.gladep11
-rw-r--r--plugins/converter/convgui.c1065
-rw-r--r--plugins/converter/interface.c774
-rw-r--r--plugins/converter/interface.h9
-rw-r--r--plugins/converter/support.c144
-rw-r--r--plugins/converter/support.h69
10 files changed, 3779 insertions, 9 deletions
diff --git a/plugins/converter/Makefile b/plugins/converter/Makefile
index 2c58d6a3..2b062f84 100644
--- a/plugins/converter/Makefile
+++ b/plugins/converter/Makefile
@@ -1,23 +1,32 @@
-OUT=converter.so
+CONVERTER_OUT=converter.so
+GUI_OUT=converter_gtkui.so
CC=gcc
-CFLAGS+=-Wall -D_GNU_SOURCE -std=c99 -I../..
+CFLAGS+=-Wall -D_GNU_SOURCE -std=c99 -g -I../..
LDFLAGS+=-module -shared -fPIC
-SOURCES=converter.c
+CONVERTER_SOURCES=converter.c
+GUI_SOURCES=convgui.c interface.c support.c
-OBJECTS=$(SOURCES:.c=.o)
+CONVERTER_OBJECTS=$(CONVERTER_SOURCES:.c=.o)
+GUI_OBJECTS=$(GUI_SOURCES:.c=.o)
-all: $(SOURCES) $(OUT)
+all: $(CONVERTER_SOURCES) $(CONVERTER_OUT) $(GUI_SOURCES) $(GUI_OUT)
-$(OUT): $(OBJECTS)
- $(CC) $(LDFLAGS) $(OBJECTS) -o $@
+$(CONVERTER_OUT): $(CONVERTER_OBJECTS)
+ $(CC) $(LDFLAGS) $(CONVERTER_OBJECTS) -o $@
+
+GTK_CFLAGS=`pkg-config --cflags gtk+-2.0`
+GTK_LIBS=`pkg-config --libs gtk+-2.0`
+
+$(GUI_OUT): $(GUI_OBJECTS)
+ $(CC) $(LDFLAGS) $(GUI_OBJECTS) $(GTK_LIBS) -o $@
.c.o:
- $(CC) $(CFLAGS) $< -c -o $@
+ $(CC) $(CFLAGS) $(GTK_CFLAGS) $< -c -o $@
clean:
- rm $(OBJECTS) $(OUT)
+ rm $(CONVERTER_OBJECTS) $(CONVERTER_OUT) $(GUI_OBJECTS) $(GUI_OUT)
diff --git a/plugins/converter/callbacks.c b/plugins/converter/callbacks.c
new file mode 100644
index 00000000..019fde92
--- /dev/null
+++ b/plugins/converter/callbacks.c
@@ -0,0 +1,10 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+
+#include "callbacks.h"
+#include "interface.h"
+#include "support.h"
+
diff --git a/plugins/converter/callbacks.h b/plugins/converter/callbacks.h
new file mode 100644
index 00000000..b349820f
--- /dev/null
+++ b/plugins/converter/callbacks.h
@@ -0,0 +1,80 @@
+#include <gtk/gtk.h>
+
+void
+on_converter_encoder_changed (GtkComboBox *combobox,
+ gpointer user_data);
+
+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);
+
+void
+on_converter_dsp_preset_changed (GtkComboBox *combobox,
+ gpointer user_data);
+
+void
+on_dsp_preset_plugin_configure_clicked (GtkButton *button,
+ gpointer user_data);
+
+void
+on_dsp_preset_plugin_up_clicked (GtkButton *button,
+ gpointer user_data);
+
+void
+on_dsp_preset_plugin_down_clicked (GtkButton *button,
+ gpointer user_data);
+
+void
+on_converter_output_format_changed (GtkComboBox *combobox,
+ gpointer user_data);
+
+GtkWidget*
+encoder_cmdline_help_link_create (gchar *widget_name, gchar *string1, gchar *string2,
+ gint int1, gint int2);
+
+
+void
+on_edit_encoder_presets_clicked (GtkButton *button,
+ gpointer user_data);
+
+void
+on_edit_dsp_presets_clicked (GtkButton *button,
+ gpointer user_data);
+
+void
+on_converter_output_browse_clicked (GtkButton *button,
+ gpointer user_data);
+
+void
+on_converter_cancel_clicked (GtkButton *button,
+ gpointer user_data);
+
+void
+on_converter_ok_clicked (GtkButton *button,
+ gpointer user_data);
+
+void
+on_converterdlg_close (GtkDialog *dialog,
+ gpointer user_data);
+
+void
+on_converterdlg_response (GtkDialog *dialog,
+ gint response_id,
+ gpointer user_data);
+
+gboolean
+on_converterdlg_delete_event (GtkWidget *widget,
+ GdkEvent *event,
+ gpointer user_data);
+
+GtkWidget*
+title_formatting_help_link_create (gchar *widget_name, gchar *string1, gchar *string2,
+ gint int1, gint int2);
diff --git a/plugins/converter/converter.glade b/plugins/converter/converter.glade
new file mode 100644
index 00000000..30d55ca5
--- /dev/null
+++ b/plugins/converter/converter.glade
@@ -0,0 +1,1599 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkDialog" id="converterdlg">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Converter</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">True</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <property name="has_separator">False</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox6">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area5">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+ <child>
+ <widget class="GtkButton" id="converter_cancel">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="converter_ok">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-ok</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox26">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox67">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkLabel" id="label103">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Output folder</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox68">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkEntry" id="output_folder">
+ <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="has_frame">True</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="converter_output_browse">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">...</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_converter_output_browse_clicked" last_modification_time="Thu, 02 Dec 2010 19:59:50 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox69">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkLabel" id="label104">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Encoder</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox90">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkComboBox" id="encoder">
+ <property name="visible">True</property>
+ <property name="add_tearoffs">False</property>
+ <property name="focus_on_click">True</property>
+ <signal name="changed" handler="on_converter_encoder_changed" last_modification_time="Mon, 06 Dec 2010 20:55:31 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="edit_encoder_presets">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="on_edit_encoder_presets_clicked" last_modification_time="Sat, 04 Dec 2010 15:20:49 GMT"/>
+
+ <child>
+ <widget class="GtkImage" id="image469">
+ <property name="visible">True</property>
+ <property name="stock">gtk-edit</property>
+ <property name="icon_size">4</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox86">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkLabel" id="label114">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">DSP preset</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox91">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkComboBox" id="dsp_preset">
+ <property name="visible">True</property>
+ <property name="items" translatable="yes"></property>
+ <property name="add_tearoffs">False</property>
+ <property name="focus_on_click">True</property>
+ <signal name="changed" handler="on_converter_dsp_preset_changed" last_modification_time="Wed, 08 Dec 2010 21:22:19 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="edit_dsp_presets">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="on_edit_dsp_presets_clicked" last_modification_time="Sat, 04 Dec 2010 15:20:53 GMT"/>
+
+ <child>
+ <widget class="GtkImage" id="image470">
+ <property name="visible">True</property>
+ <property name="stock">gtk-edit</property>
+ <property name="icon_size">4</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox88">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkLabel" id="label116">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Number of threads</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="numthreads">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">0</property>
+ <property name="numeric">False</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">False</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">1 0 100 1 10 0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox89">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkLabel" id="label117">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Output sample format</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkComboBox" id="output_format">
+ <property name="visible">True</property>
+ <property name="items" translatable="yes">Keep original
+8 bit signed int
+16 bit signed int
+24 bit signed int
+32 bit signed int
+32 bit float</property>
+ <property name="add_tearoffs">False</property>
+ <property name="focus_on_click">True</property>
+ <signal name="changed" handler="on_converter_output_format_changed" last_modification_time="Sun, 12 Dec 2010 16:55:42 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+<widget class="GtkDialog" id="convpreset_editor">
+ <property name="visible">True</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">True</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <property name="has_separator">True</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox7">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area6">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+ <child>
+ <widget class="GtkButton" id="convpreset_cancel">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="convpreset_ok">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-ok</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox27">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox70">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkLabel" id="label105">
+ <property name="visible">True</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>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <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">Untitled Encoder</property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox96">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">9</property>
+
+ <child>
+ <widget class="GtkLabel" id="label120">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Output file name</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox97">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkEntry" id="fname">
+ <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="has_frame">True</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="Custom" id="custom5">
+ <property name="visible">True</property>
+ <property name="creation_function">title_formatting_help_link_create</property>
+ <property name="int1">0</property>
+ <property name="int2">0</property>
+ <property name="last_modification_time">Fri, 03 Dec 2010 20:39:24 GMT</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox72">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkLabel" id="label106">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Command line</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox93">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkEntry" id="encoder">
+ <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">encodername - %s</property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="Custom" id="custom4">
+ <property name="visible">True</property>
+ <property name="creation_function">encoder_cmdline_help_link_create</property>
+ <property name="int1">0</property>
+ <property name="int2">0</property>
+ <property name="last_modification_time">Sat, 04 Dec 2010 15:30:13 GMT</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox73">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkLabel" id="label107">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Method</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkComboBox" id="method">
+ <property name="visible">True</property>
+ <property name="items" translatable="yes">Pipe
+Temporary file</property>
+ <property name="add_tearoffs">False</property>
+ <property name="focus_on_click">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkFrame" id="frame8">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment20">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xscale">1</property>
+ <property name="yscale">1</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">12</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkTable" id="table1">
+ <property name="border_width">8</property>
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">8</property>
+ <property name="column_spacing">8</property>
+
+ <child>
+ <widget class="GtkCheckButton" id="8bit">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">8 bit signed int</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="16bit">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">16 bit signed int</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="24bit">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">24 bit signed int</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="32bit">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">32 bit signed int</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="32bitfloat">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">32 bit float</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label118">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Sample formats&lt;/b&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+<widget class="GtkDialog" id="dsppreset_editor">
+ <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>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">True</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <property name="has_separator">True</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox9">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area8">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+ <child>
+ <widget class="GtkButton" id="cancelbutton6">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="okbutton6">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-ok</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox30">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox81">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkLabel" id="label111">
+ <property name="visible">True</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>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <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">Untitled DSP Preset</property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox29">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox82">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <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>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <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>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="configure">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Configure</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_plugin_configure_clicked" last_modification_time="Thu, 09 Dec 2010 20:31:42 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox98">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow7">
+ <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="plugins">
+ <property name="width_request">196</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</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>
+
+ <child>
+ <widget class="GtkVBox" id="vbox34">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkButton" id="up">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-go-up</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="on_dsp_preset_plugin_up_clicked" last_modification_time="Sun, 12 Dec 2010 13:42:49 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="down">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-go-down</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="on_dsp_preset_plugin_down_clicked" last_modification_time="Sun, 12 Dec 2010 13:42:59 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+<widget class="GtkDialog" id="select_dsp_plugin">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Select DSP Plugin</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">True</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <property name="has_separator">True</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox10">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area9">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+ <child>
+ <widget class="GtkButton" id="cancelbutton7">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="okbutton7">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-ok</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox31">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox85">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkLabel" id="label113">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Plugin</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkComboBox" id="plugin">
+ <property name="visible">True</property>
+ <property name="add_tearoffs">False</property>
+ <property name="focus_on_click">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+<widget class="GtkDialog" id="preset_list">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Presets</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">True</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <property name="has_separator">True</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox11">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area10">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+ <child>
+ <widget class="GtkButton" id="okbutton8">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-7</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox33">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox94">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkButton" id="add">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-add</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="remove">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-remove</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="edit">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-edit</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow8">
+ <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="presets">
+ <property name="width_request">400</property>
+ <property name="height_request">176</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</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>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+</glade-interface>
diff --git a/plugins/converter/converter.gladep b/plugins/converter/converter.gladep
new file mode 100644
index 00000000..fc0e5ab2
--- /dev/null
+++ b/plugins/converter/converter.gladep
@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-project SYSTEM "http://glade.gnome.org/glade-project-2.0.dtd">
+
+<glade-project>
+ <name>converter</name>
+ <program_name>converter</program_name>
+ <source_directory></source_directory>
+ <gnome_support>FALSE</gnome_support>
+ <output_main_file>FALSE</output_main_file>
+ <output_build_files>FALSE</output_build_files>
+</glade-project>
diff --git a/plugins/converter/convgui.c b/plugins/converter/convgui.c
new file mode 100644
index 00000000..3d8b3a22
--- /dev/null
+++ b/plugins/converter/convgui.c
@@ -0,0 +1,1065 @@
+/*
+ DeaDBeeF - ultimate music player for GNU/Linux systems with X11
+ Copyright (C) 2009-2010 Alexey Yakovenko <waker@users.sourceforge.net>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include "converter.h"
+#include "support.h"
+#include "interface.h"
+//#include "gtkui.h"
+//#include "pluginconf.h"
+#include "../gtkui/gtkui_api.h"
+
+#pragma GCC optimize("O0")
+
+DB_functions_t *deadbeef;
+
+ddb_converter_t *converter_plugin;
+ddb_gtkui_t *gtkui_plugin;
+
+typedef struct {
+ GtkWidget *converter;
+ ddb_encoder_preset_t *current_encoder_preset;
+ ddb_dsp_preset_t *current_dsp_preset;
+
+ DB_playItem_t **convert_items;
+ int convert_items_count;
+ char *outfolder;
+ int selected_format;
+ ddb_encoder_preset_t *encoder_preset;
+ ddb_dsp_preset_t *dsp_preset;
+ GtkWidget *progress;
+ GtkWidget *progress_entry;
+ int cancelled;
+ char *progress_text;
+} converter_ctx_t;
+
+converter_ctx_t *current_ctx;
+
+void
+fill_presets (GtkListStore *mdl, ddb_preset_t *head) {
+ ddb_preset_t *p = head;
+ while (p) {
+ GtkTreeIter iter;
+ gtk_list_store_append (mdl, &iter);
+ gtk_list_store_set (mdl, &iter, 0, p->title, -1);
+ p = p->next;
+ }
+}
+
+void
+on_converter_progress_cancel (GtkDialog *dialog, gint response_id, gpointer user_data) {
+ converter_ctx_t *ctx = user_data;
+ ctx->cancelled = 1;
+}
+
+typedef struct {
+ GtkWidget *entry;
+ char *text;
+} update_progress_info_t;
+
+static gboolean
+update_progress_cb (gpointer ctx) {
+ update_progress_info_t *info = ctx;
+ gtk_entry_set_text (GTK_ENTRY (info->entry), info->text);
+ free (info->text);
+ g_object_unref (info->entry);
+ free (info);
+ return FALSE;
+}
+
+static gboolean
+destroy_progress_cb (gpointer ctx) {
+ gtk_widget_destroy (ctx);
+ return FALSE;
+}
+
+static void
+converter_worker (void *ctx) {
+ converter_ctx_t *conv = ctx;
+
+ for (int n = 0; n < conv->convert_items_count; n++) {
+ update_progress_info_t *info = malloc (sizeof (update_progress_info_t));
+ info->entry = conv->progress_entry;
+ g_object_ref (info->entry);
+ info->text = strdup (conv->convert_items[n]->fname);
+ 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);
+ if (conv->cancelled) {
+ for (; n < conv->convert_items_count; n++) {
+ deadbeef->pl_item_unref (conv->convert_items[n]);
+ }
+ break;
+ }
+ deadbeef->pl_item_unref (conv->convert_items[n]);
+ }
+ g_idle_add (destroy_progress_cb, conv->progress);
+ if (conv->convert_items) {
+ free (conv->convert_items);
+ }
+ free (conv->outfolder);
+ converter_plugin->encoder_preset_free (conv->encoder_preset);
+ converter_plugin->dsp_preset_free (conv->dsp_preset);
+ free (conv);
+}
+
+void
+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 ();
+
+ GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (conv->converter, "encoder"));
+ int enc_preset = gtk_combo_box_get_active (combo);
+ if (enc_preset < 0) {
+ fprintf (stderr, "Encoder preset not selected\n");
+ return;
+ }
+
+ ddb_encoder_preset_t *encoder_preset = converter_plugin->encoder_preset_get_for_idx (enc_preset);
+ if (!encoder_preset) {
+ return;
+ }
+ combo = GTK_COMBO_BOX (lookup_widget (conv->converter, "dsp_preset"));
+ int dsp_idx = gtk_combo_box_get_active (combo) - 1;
+
+ combo = GTK_COMBO_BOX (lookup_widget (conv->converter, "output_format"));
+// int selected_format = gtk_combo_box_get_active (combo);
+
+ ddb_dsp_preset_t *dsp_preset = NULL;
+ if (dsp_idx >= 0) {
+ dsp_preset = converter_plugin->dsp_preset_get_for_idx (dsp_idx);
+ }
+
+ if (encoder_preset) {
+ conv->encoder_preset = converter_plugin->encoder_preset_alloc ();
+ converter_plugin->encoder_preset_copy (conv->encoder_preset, encoder_preset);
+ }
+ if (dsp_preset) {
+ conv->dsp_preset = converter_plugin->dsp_preset_alloc ();
+ converter_plugin->dsp_preset_copy (conv->dsp_preset, dsp_preset);
+ }
+
+ GtkWidget *progress = gtk_dialog_new_with_buttons (_("Converting..."), GTK_WINDOW (gtkui_plugin->get_mainwin ()), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
+ GtkWidget *vbox = GTK_DIALOG (progress)->vbox;
+ GtkWidget *entry = gtk_entry_new ();
+ gtk_widget_set_size_request (entry, 400, -1);
+ gtk_editable_set_editable (GTK_EDITABLE (entry), FALSE);
+ gtk_widget_show (entry);
+ gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 12);
+
+ g_signal_connect ((gpointer)progress, "response", G_CALLBACK (on_converter_progress_cancel), conv);
+
+ gtk_widget_show (progress);
+
+ conv->progress = progress;
+ conv->progress_entry = entry;
+ intptr_t tid = deadbeef->thread_start (converter_worker, conv);
+ deadbeef->thread_detach (tid);
+}
+
+static int
+converter_show (DB_plugin_action_t *act, DB_playItem_t *it) {
+ if (!converter_plugin) {
+ converter_plugin = (ddb_converter_t *)deadbeef->plug_get_for_id ("converter");
+ if (!converter_plugin) {
+ return -1;
+ }
+ }
+ if (!gtkui_plugin) {
+ gtkui_plugin = (ddb_gtkui_t *)deadbeef->plug_get_for_id ("gtkui");
+ if (!gtkui_plugin) {
+ return -1;
+ }
+ }
+
+ converter_ctx_t *conv = malloc (sizeof (converter_ctx_t));
+ current_ctx = conv;
+ memset (conv, 0, sizeof (converter_ctx_t));
+
+ deadbeef->pl_lock ();
+ // copy list
+ int nsel = deadbeef->pl_getselcount ();
+ conv->convert_items_count = nsel;
+ if (0 < nsel) {
+ conv->convert_items = malloc (sizeof (DB_playItem_t *) * nsel);
+ if (conv->convert_items) {
+ int n = 0;
+ DB_playItem_t *it = deadbeef->pl_get_first (PL_MAIN);
+ while (it) {
+ if (deadbeef->pl_is_selected (it)) {
+ assert (n < nsel);
+ deadbeef->pl_item_ref (it);
+ conv->convert_items[n++] = it;
+ }
+ DB_playItem_t *next = deadbeef->pl_get_next (it, PL_MAIN);
+ deadbeef->pl_item_unref (it);
+ it = next;
+ }
+ }
+ }
+ deadbeef->pl_unlock ();
+
+ conv->converter = create_converterdlg ();
+ gtk_entry_set_text (GTK_ENTRY (lookup_widget (conv->converter, "output_folder")), deadbeef->conf_get_str ("converter.output_folder", ""));
+
+ GtkComboBox *combo;
+ // fill encoder presets
+ combo = GTK_COMBO_BOX (lookup_widget (conv->converter, "encoder"));
+ GtkListStore *mdl = GTK_LIST_STORE (gtk_combo_box_get_model (combo));
+ fill_presets (mdl, (ddb_preset_t *)converter_plugin->encoder_preset_get_list ());
+ gtk_combo_box_set_active (combo, deadbeef->conf_get_int ("converter.encoder_preset", 0));
+
+ // fill dsp presets
+ combo = GTK_COMBO_BOX (lookup_widget (conv->converter, "dsp_preset"));
+ mdl = GTK_LIST_STORE (gtk_combo_box_get_model (combo));
+ GtkTreeIter iter;
+ gtk_list_store_append (mdl, &iter);
+ gtk_list_store_set (mdl, &iter, 0, "Pass through", -1);
+ fill_presets (mdl, (ddb_preset_t *)converter_plugin->dsp_preset_get_list ());
+
+ gtk_combo_box_set_active (combo, deadbeef->conf_get_int ("converter.dsp_preset", -1) + 1);
+
+ // select output format
+ combo = GTK_COMBO_BOX (lookup_widget (conv->converter, "output_format"));
+ gtk_combo_box_set_active (combo, deadbeef->conf_get_int ("converter.output_format", 0));
+
+
+ int response = gtk_dialog_run (GTK_DIALOG (conv->converter));
+ current_ctx = NULL;
+ if (response == GTK_RESPONSE_OK) {
+ converter_process (conv);
+ gtk_widget_destroy (conv->converter);
+ }
+ else {
+ // FIXME: clean up properly
+ gtk_widget_destroy (conv->converter);
+ if (conv->convert_items) {
+ for (int n = 0; n < conv->convert_items_count; n++) {
+ deadbeef->pl_item_unref (conv->convert_items[n]);
+ }
+ free (conv->convert_items);
+ }
+ free (conv);
+ }
+ return 0;
+}
+
+void
+on_converter_encoder_changed (GtkComboBox *combobox,
+ gpointer user_data)
+{
+ GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (current_ctx->converter, "encoder"));
+ int act = gtk_combo_box_get_active (combo);
+ deadbeef->conf_set_int ("converter.encoder_preset", act);
+}
+
+void
+on_converter_dsp_preset_changed (GtkComboBox *combobox,
+ gpointer user_data)
+{
+ GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (current_ctx->converter, "dsp_preset"));
+ int act = gtk_combo_box_get_active (combo);
+ deadbeef->conf_set_int ("converter.dsp_preset", act-1);
+}
+
+void
+on_converter_output_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_CONFIGCHANGED, 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, "output_folder");
+ gtk_entry_set_text (GTK_ENTRY (entry), folder);
+ g_free (folder);
+ }
+ }
+ else {
+ gtk_widget_destroy (dlg);
+ }
+}
+
+DB_decoder_t *
+plug_get_decoder_for_id (const char *id) {
+ DB_decoder_t **plugins = deadbeef->plug_get_decoder_list ();
+ for (int c = 0; plugins[c]; c++) {
+ if (!strcmp (id, plugins[c]->plugin.id)) {
+ return plugins[c];
+ }
+ }
+ return NULL;
+}
+
+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->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) {
+ case 0:
+ p->method = DDB_ENCODER_METHOD_PIPE;
+ break;
+ case 1:
+ p->method = DDB_ENCODER_METHOD_FILE;
+ break;
+ }
+
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (lookup_widget (dlg, "_8bit")))) {
+ p->formats |= DDB_ENCODER_FMT_8BIT;
+ }
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (lookup_widget (dlg, "_16bit")))) {
+ p->formats |= DDB_ENCODER_FMT_16BIT;
+ }
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (lookup_widget (dlg, "_24bit")))) {
+ p->formats |= DDB_ENCODER_FMT_24BIT;
+ }
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (lookup_widget (dlg, "_32bit")))) {
+ p->formats |= DDB_ENCODER_FMT_32BIT;
+ }
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (lookup_widget (dlg, "_32bitfloat")))) {
+ p->formats |= DDB_ENCODER_FMT_32BITFLOAT;
+ }
+}
+
+int
+edit_encoder_preset (char *title, GtkWidget *toplevel, int overwrite) {
+ GtkWidget *dlg = create_convpreset_editor ();
+ gtk_window_set_title (GTK_WINDOW (dlg), title);
+ gtk_dialog_set_default_response (GTK_DIALOG (dlg), GTK_RESPONSE_OK);
+
+ gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (toplevel));
+
+ ddb_encoder_preset_t *p = current_ctx->current_encoder_preset;
+
+ 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->encoder) {
+ gtk_entry_set_text (GTK_ENTRY (lookup_widget (dlg, "encoder")), p->encoder);
+ }
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lookup_widget (dlg, "method")), p->method);
+ if (p->formats & DDB_ENCODER_FMT_8BIT) {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lookup_widget (dlg, "_8bit")), 1);
+ }
+ if (p->formats & DDB_ENCODER_FMT_16BIT) {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lookup_widget (dlg, "_16bit")), 1);
+ }
+ if (p->formats & DDB_ENCODER_FMT_24BIT) {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lookup_widget (dlg, "_24bit")), 1);
+ }
+ if (p->formats & DDB_ENCODER_FMT_32BIT) {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lookup_widget (dlg, "_32bit")), 1);
+ }
+ if (p->formats & DDB_ENCODER_FMT_32BITFLOAT) {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lookup_widget (dlg, "_32bitfloat")), 1);
+ }
+
+ ddb_encoder_preset_t *old = p;
+ int r = GTK_RESPONSE_CANCEL;
+ for (;;) {
+ r = gtk_dialog_run (GTK_DIALOG (dlg));
+ if (r == GTK_RESPONSE_OK) {
+ ddb_encoder_preset_t *p = converter_plugin->encoder_preset_alloc ();
+ if (p) {
+ init_encoder_preset_from_dlg (dlg, p);
+ int err = converter_plugin->encoder_preset_save (p, overwrite);
+ if (!err) {
+ if (old->title && strcmp (p->title, old->title)) {
+ char path[1024];
+ if (snprintf (path, sizeof (path), "%s/presets/encoders/%s.txt", deadbeef->get_config_dir (), old->title) > 0) {
+ unlink (path);
+ }
+ }
+ free (old->title);
+ free (old->fname);
+ free (old->encoder);
+ old->title = p->title;
+ old->fname = p->fname;
+ old->encoder = p->encoder;
+ old->method = p->method;
+ old->formats = p->formats;
+ free (p);
+ }
+ else {
+ GtkWidget *warndlg = gtk_message_dialog_new (GTK_WINDOW (gtkui_plugin->get_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"));
+
+ /*int response = */gtk_dialog_run (GTK_DIALOG (warndlg));
+ gtk_widget_destroy (warndlg);
+ continue;
+ }
+ }
+ }
+ break;
+ }
+
+ gtk_widget_destroy (dlg);
+ return r;
+}
+
+void
+refresh_encoder_lists (GtkComboBox *combo, GtkTreeView *list) {
+ // presets list view
+ GtkListStore *mdl = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (list)));
+
+ GtkTreePath *path;
+ GtkTreeViewColumn *col;
+ gtk_tree_view_get_cursor (GTK_TREE_VIEW (list), &path, &col);
+ if (path && col) {
+ int *indices = gtk_tree_path_get_indices (path);
+ int idx = *indices;
+ g_free (indices);
+
+ gtk_list_store_clear (mdl);
+ fill_presets (mdl, (ddb_preset_t *)converter_plugin->encoder_preset_get_list ());
+ path = gtk_tree_path_new_from_indices (idx, -1);
+ gtk_tree_view_set_cursor (GTK_TREE_VIEW (list), path, col, FALSE);
+ gtk_tree_path_free (path);
+ }
+
+ // presets combo box
+ int act = gtk_combo_box_get_active (combo);
+ mdl = GTK_LIST_STORE (gtk_combo_box_get_model (combo));
+ gtk_list_store_clear (mdl);
+ fill_presets (mdl, (ddb_preset_t *)converter_plugin->encoder_preset_get_list ());
+ gtk_combo_box_set_active (combo, act);
+}
+
+void
+on_encoder_preset_add (GtkButton *button,
+ gpointer user_data)
+{
+ GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button));
+
+ current_ctx->current_encoder_preset = converter_plugin->encoder_preset_alloc ();
+ if (GTK_RESPONSE_OK == edit_encoder_preset (_("Add new encoder"), toplevel, 0)) {
+ converter_plugin->encoder_preset_append (current_ctx->current_encoder_preset);
+ GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (current_ctx->converter, "encoder"));
+ GtkWidget *list = lookup_widget (toplevel, "presets");
+ refresh_encoder_lists (combo, GTK_TREE_VIEW (list));
+ }
+
+ current_ctx->current_encoder_preset = NULL;
+}
+
+void
+on_encoder_preset_edit (GtkButton *button,
+ gpointer user_data)
+{
+ GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button));
+ GtkWidget *list = lookup_widget (toplevel, "presets");
+ GtkTreePath *path;
+ GtkTreeViewColumn *col;
+ gtk_tree_view_get_cursor (GTK_TREE_VIEW (list), &path, &col);
+ if (!path || !col) {
+ // nothing selected
+ return;
+ }
+ int *indices = gtk_tree_path_get_indices (path);
+ int idx = *indices;
+ g_free (indices);
+
+ ddb_encoder_preset_t *p = converter_plugin->encoder_preset_get_for_idx (idx);
+ current_ctx->current_encoder_preset = p;
+
+ int r = edit_encoder_preset (_("Edit encoder"), toplevel, 1);
+ if (r == GTK_RESPONSE_OK) {
+ GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (current_ctx->converter, "encoder"));
+ refresh_encoder_lists (combo, GTK_TREE_VIEW (list));
+ }
+
+ current_ctx->current_encoder_preset = NULL;
+}
+
+void
+on_encoder_preset_remove (GtkButton *button,
+ gpointer user_data)
+{
+
+ GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button));
+ GtkWidget *list = lookup_widget (toplevel, "presets");
+ GtkTreePath *path;
+ GtkTreeViewColumn *col;
+ gtk_tree_view_get_cursor (GTK_TREE_VIEW (list), &path, &col);
+ if (!path || !col) {
+ // nothing selected
+ return;
+ }
+ int *indices = gtk_tree_path_get_indices (path);
+ int idx = *indices;
+ g_free (indices);
+
+ ddb_encoder_preset_t *p = converter_plugin->encoder_preset_get_for_idx (idx);
+ if (!p) {
+ return;
+ }
+
+ GtkWidget *dlg = gtk_message_dialog_new (GTK_WINDOW (gtkui_plugin->get_mainwin ()), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_YES_NO, _("Remove preset"));
+ gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (toplevel));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dlg), _("This action will delete the selected preset. Are you sure?"));
+ gtk_window_set_title (GTK_WINDOW (dlg), _("Warning"));
+
+ int response = gtk_dialog_run (GTK_DIALOG (dlg));
+ gtk_widget_destroy (dlg);
+ if (response == GTK_RESPONSE_YES) {
+ char path[1024];
+ if (snprintf (path, sizeof (path), "%s/presets/encoders/%s.txt", deadbeef->get_config_dir (), p->title) > 0) {
+ unlink (path);
+ }
+
+ converter_plugin->encoder_preset_remove (p);
+ converter_plugin->encoder_preset_free (p);
+
+ GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (current_ctx->converter, "encoder"));
+ refresh_encoder_lists (combo, GTK_TREE_VIEW (list));
+ }
+}
+
+void
+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 (current_ctx->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);
+ g_signal_connect ((gpointer)lookup_widget (dlg, "edit"), "clicked", G_CALLBACK (on_encoder_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_presets (mdl, (ddb_preset_t *)converter_plugin->encoder_preset_get_list ());
+ int curr = deadbeef->conf_get_int ("converter.encoder_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);
+}
+
+///// dsp preset gui
+
+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) {
+ ddb_dsp_context_t *dsp = current_ctx->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 = 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) {
+ // 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;
+ ddb_dsp_context_t *inst = NULL;
+ for (i = 0; dsp[i]; i++) {
+ if (i == idx) {
+ inst = dsp[i]->open ();
+ break;
+ }
+ }
+ if (inst) {
+ // append to DSP chain
+ ddb_dsp_context_t *tail = current_ctx->current_dsp_preset->chain;
+ while (tail && tail->next) {
+ tail = tail->next;
+ }
+ if (tail) {
+ tail->next = inst;
+ }
+ else {
+ current_ctx->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)
+{
+ GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button));
+ GtkWidget *list = lookup_widget (toplevel, "plugins");
+ GtkTreePath *path;
+ GtkTreeViewColumn *col;
+ gtk_tree_view_get_cursor (GTK_TREE_VIEW (list), &path, &col);
+ if (!path || !col) {
+ // nothing selected
+ return;
+ }
+ int *indices = gtk_tree_path_get_indices (path);
+ int idx = *indices;
+ g_free (indices);
+ if (idx == -1) {
+ return;
+ }
+
+ ddb_dsp_context_t *p = current_ctx->current_dsp_preset->chain;
+ ddb_dsp_context_t *prev = NULL;
+ int i = idx;
+ while (p && i--) {
+ prev = p;
+ p = p->next;
+ }
+ if (p) {
+ if (prev) {
+ prev->next = p->next;
+ }
+ else {
+ current_ctx->current_dsp_preset->chain = p->next;
+ }
+ p->plugin->close (p);
+ GtkListStore *mdl = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW(list)));
+ gtk_list_store_clear (mdl);
+ fill_dsp_preset_chain (mdl);
+ path = gtk_tree_path_new_from_indices (idx, -1);
+ gtk_tree_view_set_cursor (GTK_TREE_VIEW (list), path, col, FALSE);
+ gtk_tree_path_free (path);
+ }
+}
+
+static ddb_dsp_context_t *current_dsp_context = NULL;
+
+void
+dsp_ctx_set_param (const char *key, const char *value) {
+ current_dsp_context->plugin->set_param (current_dsp_context, atoi (key), value);
+}
+
+void
+dsp_ctx_get_param (const char *key, char *value, int len, const char *def) {
+ strncpy (value, def, len);
+ current_dsp_context->plugin->get_param (current_dsp_context, atoi (key), value, len);
+}
+
+void
+on_dsp_preset_plugin_configure_clicked (GtkButton *button,
+ gpointer user_data)
+{
+ GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button));
+ GtkWidget *list = lookup_widget (toplevel, "plugins");
+ GtkTreePath *path;
+ GtkTreeViewColumn *col;
+ gtk_tree_view_get_cursor (GTK_TREE_VIEW (list), &path, &col);
+ if (!path || !col) {
+ // nothing selected
+ return;
+ }
+ int *indices = gtk_tree_path_get_indices (path);
+ int idx = *indices;
+ g_free (indices);
+ if (idx == -1) {
+ return;
+ }
+ ddb_dsp_context_t *p = current_ctx->current_dsp_preset->chain;
+ int i = idx;
+ while (p && i--) {
+ p = p->next;
+ }
+ if (!p || !p->plugin->configdialog) {
+ return;
+ }
+ current_dsp_context = p;
+ ddb_dialog_t conf = {
+ .title = p->plugin->plugin.name,
+ .layout = p->plugin->configdialog,
+ .set_param = dsp_ctx_set_param,
+ .get_param = dsp_ctx_get_param,
+ };
+ gtkui_plugin->gui.run_dialog (&conf, 0);
+ current_dsp_context = NULL;
+}
+
+void
+on_dsp_preset_plugin_up_clicked (GtkButton *button,
+ gpointer user_data)
+{
+
+}
+
+
+void
+on_dsp_preset_plugin_down_clicked (GtkButton *button,
+ gpointer user_data)
+{
+
+}
+
+
+int
+edit_dsp_preset (const char *title, GtkWidget *toplevel, int overwrite) {
+ int r = GTK_RESPONSE_CANCEL;
+
+ GtkWidget *dlg = create_dsppreset_editor ();
+ gtk_dialog_set_default_response (GTK_DIALOG (dlg), GTK_RESPONSE_OK);
+ gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (toplevel));
+ gtk_window_set_title (GTK_WINDOW (dlg), title);
+
+
+ // title
+ if (current_ctx->current_dsp_preset->title) {
+ gtk_entry_set_text (GTK_ENTRY (lookup_widget (dlg, "title")), current_ctx->current_dsp_preset->title);
+ }
+
+ {
+ GtkWidget *list = lookup_widget (dlg, "plugins");
+ GtkCellRenderer *title_cell = gtk_cell_renderer_text_new ();
+ GtkTreeViewColumn *col = gtk_tree_view_column_new_with_attributes (_("Plugin"), 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_preset_chain (mdl);
+ }
+
+ for (;;) {
+ r = gtk_dialog_run (GTK_DIALOG (dlg));
+
+ if (r == GTK_RESPONSE_OK) {
+ if (current_ctx->current_dsp_preset->title) {
+ free (current_ctx->current_dsp_preset->title);
+ }
+ current_ctx->current_dsp_preset->title = strdup (gtk_entry_get_text (GTK_ENTRY (lookup_widget (dlg, "title"))));
+ int err = converter_plugin->dsp_preset_save (current_ctx->current_dsp_preset, overwrite);
+ if (err < 0) {
+ GtkWidget *warndlg = gtk_message_dialog_new (GTK_WINDOW (gtkui_plugin->get_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;
+ }
+
+ }
+
+ break;
+ }
+
+ gtk_widget_destroy (dlg);
+ return r;
+}
+
+void
+refresh_dsp_lists (GtkComboBox *combo, GtkTreeView *list) {
+ // presets list view
+ GtkListStore *mdl = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (list)));
+
+ GtkTreePath *path;
+ GtkTreeViewColumn *col;
+ gtk_tree_view_get_cursor (GTK_TREE_VIEW (list), &path, &col);
+ if (path && col) {
+ int *indices = gtk_tree_path_get_indices (path);
+ int idx = *indices;
+ g_free (indices);
+
+ gtk_list_store_clear (mdl);
+ fill_presets (mdl, (ddb_preset_t *)converter_plugin->dsp_preset_get_list ());
+ path = gtk_tree_path_new_from_indices (idx, -1);
+ gtk_tree_view_set_cursor (GTK_TREE_VIEW (list), path, col, FALSE);
+ gtk_tree_path_free (path);
+ }
+
+ // presets combo box
+ int act = gtk_combo_box_get_active (combo);
+ mdl = GTK_LIST_STORE (gtk_combo_box_get_model (combo));
+ gtk_list_store_clear (mdl);
+ GtkTreeIter iter;
+ gtk_list_store_append (mdl, &iter);
+ gtk_list_store_set (mdl, &iter, 0, "Pass through", -1);
+ fill_presets (mdl, (ddb_preset_t *)converter_plugin->dsp_preset_get_list ());
+ gtk_combo_box_set_active (combo, act);
+}
+
+
+void
+on_dsp_preset_add (GtkButton *button,
+ gpointer user_data)
+{
+
+ current_ctx->current_dsp_preset = converter_plugin->dsp_preset_alloc ();
+
+ GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button));
+
+ if (GTK_RESPONSE_OK == edit_dsp_preset (_("New DSP Preset"), toplevel, 0)) {
+ converter_plugin->dsp_preset_append (current_ctx->current_dsp_preset);
+ GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (current_ctx->converter, "dsp_preset"));
+ GtkWidget *list = lookup_widget (toplevel, "presets");
+ refresh_dsp_lists (combo, GTK_TREE_VIEW (list));
+ }
+ else {
+ converter_plugin->dsp_preset_free (current_ctx->current_dsp_preset);
+ }
+
+ current_ctx->current_dsp_preset = NULL;
+}
+
+void
+on_dsp_preset_remove (GtkButton *button,
+ gpointer user_data)
+{
+ GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button));
+ GtkWidget *list = lookup_widget (toplevel, "presets");
+ GtkTreePath *path;
+ GtkTreeViewColumn *col;
+ gtk_tree_view_get_cursor (GTK_TREE_VIEW (list), &path, &col);
+ if (!path || !col) {
+ // nothing selected
+ return;
+ }
+ int *indices = gtk_tree_path_get_indices (path);
+ int idx = *indices;
+ g_free (indices);
+
+ if (idx == 0) {
+ return;
+ }
+
+ ddb_dsp_preset_t *p = converter_plugin->dsp_preset_get_for_idx (idx);
+ if (!p) {
+ return;
+ }
+
+ GtkWidget *dlg = gtk_message_dialog_new (GTK_WINDOW (gtkui_plugin->get_mainwin ()), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_YES_NO, _("Remove preset"));
+ gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (toplevel));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dlg), _("This action will delete the selected preset. Are you sure?"));
+ gtk_window_set_title (GTK_WINDOW (dlg), _("Warning"));
+
+ int response = gtk_dialog_run (GTK_DIALOG (dlg));
+ gtk_widget_destroy (dlg);
+ if (response == GTK_RESPONSE_YES) {
+ char path[1024];
+ if (snprintf (path, sizeof (path), "%s/presets/dsp/%s.txt", deadbeef->get_config_dir (), p->title) > 0) {
+ unlink (path);
+ }
+
+ converter_plugin->dsp_preset_remove (p);
+ converter_plugin->dsp_preset_free (p);
+
+ GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (current_ctx->converter, "dsp_preset"));
+ refresh_dsp_lists (combo, GTK_TREE_VIEW (list));
+ }
+}
+
+void
+on_dsp_preset_edit (GtkButton *button,
+ gpointer user_data)
+{
+ GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button));
+
+ GtkWidget *list = lookup_widget (toplevel, "presets");
+ GtkTreePath *path;
+ GtkTreeViewColumn *col;
+ gtk_tree_view_get_cursor (GTK_TREE_VIEW (list), &path, &col);
+ if (!path || !col) {
+ // nothing selected
+ return;
+ }
+ int *indices = gtk_tree_path_get_indices (path);
+ int idx = *indices;
+ g_free (indices);
+ if (idx == -1) {
+ return;
+ }
+ if (idx == 0) {
+ return;
+ }
+
+ ddb_dsp_preset_t *p = converter_plugin->dsp_preset_get_for_idx (idx);
+ if (!p) {
+ return;
+ }
+
+ current_ctx->current_dsp_preset = converter_plugin->dsp_preset_alloc ();
+ converter_plugin->dsp_preset_copy (current_ctx->current_dsp_preset, p);
+
+ int r = edit_dsp_preset (_("Edit DSP Preset"), toplevel, 1);
+ if (r == GTK_RESPONSE_OK) {
+ // replace preset
+ converter_plugin->dsp_preset_replace (p, current_ctx->current_dsp_preset);
+ converter_plugin->dsp_preset_free (p);
+ GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (current_ctx->converter, "dsp_preset"));
+ refresh_dsp_lists (combo, GTK_TREE_VIEW (list));
+ }
+ else {
+ converter_plugin->dsp_preset_free (current_ctx->current_dsp_preset);
+ }
+
+ current_ctx->current_dsp_preset = NULL;
+}
+
+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 (current_ctx->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_presets (mdl, (ddb_preset_t *)converter_plugin->dsp_preset_get_list ());
+ int curr = deadbeef->conf_get_int ("converter.dsp_preset", -1);
+ if (curr >= 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);
+}
+
+
+void
+on_converter_output_format_changed (GtkComboBox *combobox,
+ gpointer user_data)
+{
+ int idx = gtk_combo_box_get_active (combobox);
+ deadbeef->conf_set_int ("converter.output_format", idx);
+}
+
+GtkWidget*
+title_formatting_help_link_create (gchar *widget_name, gchar *string1, gchar *string2,
+ gint int1, gint int2)
+{
+ GtkWidget *link = gtk_link_button_new_with_label ("http://sourceforge.net/apps/mediawiki/deadbeef/index.php?title=Title_Formatting", "Help");
+ return link;
+}
+
+GtkWidget*
+encoder_cmdline_help_link_create (gchar *widget_name, gchar *string1, gchar *string2,
+ gint int1, gint int2)
+{
+ GtkWidget *link = gtk_link_button_new_with_label ("http://sourceforge.net/apps/mediawiki/deadbeef/index.php?title=Encoder_Command_Line", "Help");
+ return link;
+}
+
+static DB_plugin_action_t convert_action = {
+ .title = "Convert...",
+ .name = "convert",
+ .flags = DB_ACTION_CAN_MULTIPLE_TRACKS | DB_ACTION_ALLOW_MULTIPLE_TRACKS | DB_ACTION_SINGLE_TRACK,
+ .callback = converter_show,
+ .next = NULL
+};
+
+static DB_plugin_action_t *
+convgui_get_actions (DB_playItem_t *it)
+{
+ return &convert_action;
+}
+
+DB_misc_t plugin = {
+ DB_PLUGIN_SET_API_VERSION
+ .plugin.version_major = 1,
+ .plugin.version_minor = 0,
+ .plugin.type = DB_PLUGIN_MISC,
+ .plugin.name = "Converter GTK UI",
+ .plugin.descr = "User interface to Converter plugin using GTK2",
+ .plugin.author = "Alexey Yakovenko",
+ .plugin.email = "waker@users.sourceforge.net",
+ .plugin.website = "http://deadbeef.sf.net",
+ .plugin.get_actions = convgui_get_actions
+};
+
+DB_plugin_t *
+converter_gtkui_load (DB_functions_t *api) {
+ deadbeef = api;
+ return DB_PLUGIN (&plugin);
+}
+
diff --git a/plugins/converter/interface.c b/plugins/converter/interface.c
new file mode 100644
index 00000000..dec1e948
--- /dev/null
+++ b/plugins/converter/interface.c
@@ -0,0 +1,774 @@
+/*
+ * DO NOT EDIT THIS FILE - it is generated by Glade.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
+
+#include "callbacks.h"
+#include "interface.h"
+#include "support.h"
+
+#define GLADE_HOOKUP_OBJECT(component,widget,name) \
+ g_object_set_data_full (G_OBJECT (component), name, \
+ gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref)
+
+#define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \
+ g_object_set_data (G_OBJECT (component), name, widget)
+
+GtkWidget*
+create_converterdlg (void)
+{
+ GtkWidget *converterdlg;
+ GtkWidget *dialog_vbox6;
+ GtkWidget *vbox26;
+ GtkWidget *hbox67;
+ GtkWidget *label103;
+ GtkWidget *hbox68;
+ GtkWidget *output_folder;
+ GtkWidget *converter_output_browse;
+ GtkWidget *hbox69;
+ GtkWidget *label104;
+ GtkWidget *hbox90;
+ GtkWidget *encoder;
+ GtkWidget *edit_encoder_presets;
+ GtkWidget *image469;
+ GtkWidget *hbox86;
+ GtkWidget *label114;
+ GtkWidget *hbox91;
+ GtkWidget *dsp_preset;
+ GtkWidget *edit_dsp_presets;
+ GtkWidget *image470;
+ GtkWidget *hbox88;
+ GtkWidget *label116;
+ GtkObject *numthreads_adj;
+ GtkWidget *numthreads;
+ GtkWidget *hbox89;
+ GtkWidget *label117;
+ GtkWidget *output_format;
+ GtkWidget *dialog_action_area5;
+ GtkWidget *converter_cancel;
+ GtkWidget *converter_ok;
+
+ converterdlg = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (converterdlg), _("Converter"));
+ gtk_window_set_modal (GTK_WINDOW (converterdlg), TRUE);
+ gtk_window_set_destroy_with_parent (GTK_WINDOW (converterdlg), TRUE);
+ gtk_window_set_type_hint (GTK_WINDOW (converterdlg), GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_dialog_set_has_separator (GTK_DIALOG (converterdlg), FALSE);
+
+ dialog_vbox6 = GTK_DIALOG (converterdlg)->vbox;
+ gtk_widget_show (dialog_vbox6);
+
+ vbox26 = gtk_vbox_new (FALSE, 8);
+ gtk_widget_show (vbox26);
+ gtk_box_pack_start (GTK_BOX (dialog_vbox6), vbox26, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox26), 12);
+
+ hbox67 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox67);
+ gtk_box_pack_start (GTK_BOX (vbox26), hbox67, FALSE, TRUE, 0);
+
+ label103 = gtk_label_new (_("Output folder"));
+ gtk_widget_show (label103);
+ gtk_box_pack_start (GTK_BOX (hbox67), label103, FALSE, FALSE, 0);
+
+ hbox68 = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox68);
+ gtk_box_pack_start (GTK_BOX (hbox67), hbox68, TRUE, TRUE, 0);
+
+ output_folder = gtk_entry_new ();
+ gtk_widget_show (output_folder);
+ gtk_box_pack_start (GTK_BOX (hbox68), output_folder, TRUE, TRUE, 0);
+ gtk_entry_set_invisible_char (GTK_ENTRY (output_folder), 9679);
+
+ converter_output_browse = gtk_button_new_with_mnemonic (_("..."));
+ gtk_widget_show (converter_output_browse);
+ gtk_box_pack_start (GTK_BOX (hbox68), converter_output_browse, FALSE, FALSE, 0);
+
+ 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"));
+ gtk_widget_show (label104);
+ gtk_box_pack_start (GTK_BOX (hbox69), label104, FALSE, FALSE, 0);
+
+ hbox90 = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox90);
+ gtk_box_pack_start (GTK_BOX (hbox69), hbox90, TRUE, TRUE, 0);
+
+ encoder = gtk_combo_box_new_text ();
+ gtk_widget_show (encoder);
+ gtk_box_pack_start (GTK_BOX (hbox90), encoder, TRUE, TRUE, 0);
+
+ edit_encoder_presets = gtk_button_new ();
+ gtk_widget_show (edit_encoder_presets);
+ gtk_box_pack_start (GTK_BOX (hbox90), edit_encoder_presets, FALSE, FALSE, 0);
+
+ image469 = gtk_image_new_from_stock ("gtk-edit", GTK_ICON_SIZE_BUTTON);
+ gtk_widget_show (image469);
+ gtk_container_add (GTK_CONTAINER (edit_encoder_presets), image469);
+
+ hbox86 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox86);
+ gtk_box_pack_start (GTK_BOX (vbox26), hbox86, FALSE, TRUE, 0);
+
+ label114 = gtk_label_new (_("DSP preset"));
+ gtk_widget_show (label114);
+ gtk_box_pack_start (GTK_BOX (hbox86), label114, FALSE, FALSE, 0);
+
+ hbox91 = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox91);
+ gtk_box_pack_start (GTK_BOX (hbox86), hbox91, TRUE, TRUE, 0);
+
+ dsp_preset = gtk_combo_box_new_text ();
+ gtk_widget_show (dsp_preset);
+ gtk_box_pack_start (GTK_BOX (hbox91), dsp_preset, TRUE, TRUE, 0);
+
+ edit_dsp_presets = gtk_button_new ();
+ gtk_widget_show (edit_dsp_presets);
+ gtk_box_pack_start (GTK_BOX (hbox91), edit_dsp_presets, FALSE, FALSE, 0);
+
+ image470 = gtk_image_new_from_stock ("gtk-edit", GTK_ICON_SIZE_BUTTON);
+ gtk_widget_show (image470);
+ gtk_container_add (GTK_CONTAINER (edit_dsp_presets), image470);
+
+ hbox88 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox88);
+ gtk_box_pack_start (GTK_BOX (vbox26), hbox88, FALSE, TRUE, 0);
+
+ label116 = gtk_label_new (_("Number of threads"));
+ gtk_widget_show (label116);
+ gtk_box_pack_start (GTK_BOX (hbox88), label116, FALSE, FALSE, 0);
+
+ numthreads_adj = gtk_adjustment_new (1, 0, 100, 1, 10, 0);
+ numthreads = gtk_spin_button_new (GTK_ADJUSTMENT (numthreads_adj), 1, 0);
+ gtk_widget_show (numthreads);
+ gtk_box_pack_start (GTK_BOX (hbox88), numthreads, TRUE, TRUE, 0);
+
+ hbox89 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox89);
+ gtk_box_pack_start (GTK_BOX (vbox26), hbox89, FALSE, TRUE, 0);
+
+ label117 = gtk_label_new (_("Output sample format"));
+ gtk_widget_show (label117);
+ gtk_box_pack_start (GTK_BOX (hbox89), label117, FALSE, FALSE, 0);
+
+ output_format = gtk_combo_box_new_text ();
+ gtk_widget_show (output_format);
+ gtk_box_pack_start (GTK_BOX (hbox89), output_format, TRUE, TRUE, 0);
+ gtk_combo_box_append_text (GTK_COMBO_BOX (output_format), _("Keep original"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (output_format), _("8 bit signed int"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (output_format), _("16 bit signed int"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (output_format), _("24 bit signed int"));
+ 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"));
+
+ 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);
+
+ converter_cancel = gtk_button_new_from_stock ("gtk-cancel");
+ gtk_widget_show (converter_cancel);
+ gtk_dialog_add_action_widget (GTK_DIALOG (converterdlg), converter_cancel, GTK_RESPONSE_CANCEL);
+ GTK_WIDGET_SET_FLAGS (converter_cancel, GTK_CAN_DEFAULT);
+
+ converter_ok = gtk_button_new_from_stock ("gtk-ok");
+ gtk_widget_show (converter_ok);
+ 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) converter_output_browse, "clicked",
+ G_CALLBACK (on_converter_output_browse_clicked),
+ NULL);
+ g_signal_connect ((gpointer) encoder, "changed",
+ G_CALLBACK (on_converter_encoder_changed),
+ NULL);
+ g_signal_connect ((gpointer) edit_encoder_presets, "clicked",
+ G_CALLBACK (on_edit_encoder_presets_clicked),
+ NULL);
+ g_signal_connect ((gpointer) dsp_preset, "changed",
+ G_CALLBACK (on_converter_dsp_preset_changed),
+ NULL);
+ g_signal_connect ((gpointer) edit_dsp_presets, "clicked",
+ G_CALLBACK (on_edit_dsp_presets_clicked),
+ NULL);
+ g_signal_connect ((gpointer) output_format, "changed",
+ G_CALLBACK (on_converter_output_format_changed),
+ NULL);
+
+ /* Store pointers to all widgets, for use by lookup_widget(). */
+ GLADE_HOOKUP_OBJECT_NO_REF (converterdlg, converterdlg, "converterdlg");
+ GLADE_HOOKUP_OBJECT_NO_REF (converterdlg, dialog_vbox6, "dialog_vbox6");
+ GLADE_HOOKUP_OBJECT (converterdlg, vbox26, "vbox26");
+ GLADE_HOOKUP_OBJECT (converterdlg, hbox67, "hbox67");
+ GLADE_HOOKUP_OBJECT (converterdlg, label103, "label103");
+ 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, hbox69, "hbox69");
+ GLADE_HOOKUP_OBJECT (converterdlg, label104, "label104");
+ GLADE_HOOKUP_OBJECT (converterdlg, hbox90, "hbox90");
+ GLADE_HOOKUP_OBJECT (converterdlg, encoder, "encoder");
+ GLADE_HOOKUP_OBJECT (converterdlg, edit_encoder_presets, "edit_encoder_presets");
+ GLADE_HOOKUP_OBJECT (converterdlg, image469, "image469");
+ GLADE_HOOKUP_OBJECT (converterdlg, hbox86, "hbox86");
+ GLADE_HOOKUP_OBJECT (converterdlg, label114, "label114");
+ GLADE_HOOKUP_OBJECT (converterdlg, hbox91, "hbox91");
+ GLADE_HOOKUP_OBJECT (converterdlg, dsp_preset, "dsp_preset");
+ GLADE_HOOKUP_OBJECT (converterdlg, edit_dsp_presets, "edit_dsp_presets");
+ GLADE_HOOKUP_OBJECT (converterdlg, image470, "image470");
+ GLADE_HOOKUP_OBJECT (converterdlg, hbox88, "hbox88");
+ GLADE_HOOKUP_OBJECT (converterdlg, label116, "label116");
+ GLADE_HOOKUP_OBJECT (converterdlg, numthreads, "numthreads");
+ GLADE_HOOKUP_OBJECT (converterdlg, hbox89, "hbox89");
+ GLADE_HOOKUP_OBJECT (converterdlg, label117, "label117");
+ GLADE_HOOKUP_OBJECT (converterdlg, output_format, "output_format");
+ 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");
+
+ return converterdlg;
+}
+
+GtkWidget*
+create_convpreset_editor (void)
+{
+ GtkWidget *convpreset_editor;
+ GtkWidget *dialog_vbox7;
+ GtkWidget *vbox27;
+ GtkWidget *hbox70;
+ GtkWidget *label105;
+ GtkWidget *title;
+ GtkWidget *hbox96;
+ GtkWidget *label120;
+ GtkWidget *hbox97;
+ GtkWidget *fname;
+ GtkWidget *custom5;
+ GtkWidget *hbox72;
+ GtkWidget *label106;
+ GtkWidget *hbox93;
+ GtkWidget *encoder;
+ GtkWidget *custom4;
+ GtkWidget *hbox73;
+ GtkWidget *label107;
+ GtkWidget *method;
+ GtkWidget *frame8;
+ GtkWidget *alignment20;
+ GtkWidget *table1;
+ GtkWidget *_8bit;
+ GtkWidget *_16bit;
+ GtkWidget *_24bit;
+ GtkWidget *_32bit;
+ GtkWidget *_32bitfloat;
+ GtkWidget *label118;
+ GtkWidget *dialog_action_area6;
+ GtkWidget *convpreset_cancel;
+ GtkWidget *convpreset_ok;
+
+ convpreset_editor = gtk_dialog_new ();
+ 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;
+ gtk_widget_show (dialog_vbox7);
+
+ vbox27 = gtk_vbox_new (FALSE, 8);
+ gtk_widget_show (vbox27);
+ gtk_box_pack_start (GTK_BOX (dialog_vbox7), vbox27, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox27), 12);
+
+ hbox70 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox70);
+ gtk_box_pack_start (GTK_BOX (vbox27), hbox70, FALSE, TRUE, 0);
+
+ label105 = gtk_label_new (_("Title"));
+ gtk_widget_show (label105);
+ gtk_box_pack_start (GTK_BOX (hbox70), label105, FALSE, FALSE, 0);
+
+ title = gtk_entry_new ();
+ gtk_widget_show (title);
+ gtk_box_pack_start (GTK_BOX (hbox70), title, TRUE, TRUE, 0);
+ gtk_entry_set_text (GTK_ENTRY (title), _("Untitled Encoder"));
+ gtk_entry_set_invisible_char (GTK_ENTRY (title), 9679);
+ gtk_entry_set_activates_default (GTK_ENTRY (title), TRUE);
+
+ hbox96 = gtk_hbox_new (FALSE, 9);
+ gtk_widget_show (hbox96);
+ gtk_box_pack_start (GTK_BOX (vbox27), hbox96, TRUE, TRUE, 0);
+
+ label120 = gtk_label_new (_("Output file name"));
+ 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);
+
+ 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"));
+ gtk_widget_show (label106);
+ gtk_box_pack_start (GTK_BOX (hbox72), label106, FALSE, FALSE, 0);
+
+ hbox93 = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox93);
+ gtk_box_pack_start (GTK_BOX (hbox72), hbox93, TRUE, TRUE, 0);
+
+ 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_entry_set_invisible_char (GTK_ENTRY (encoder), 9679);
+ gtk_entry_set_activates_default (GTK_ENTRY (encoder), TRUE);
+
+ custom4 = encoder_cmdline_help_link_create ("custom4", "", "", 0, 0);
+ gtk_widget_show (custom4);
+ gtk_box_pack_start (GTK_BOX (hbox93), custom4, TRUE, TRUE, 0);
+ GTK_WIDGET_UNSET_FLAGS (custom4, GTK_CAN_FOCUS);
+ GTK_WIDGET_UNSET_FLAGS (custom4, GTK_CAN_DEFAULT);
+
+ hbox73 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox73);
+ gtk_box_pack_start (GTK_BOX (vbox27), hbox73, FALSE, TRUE, 0);
+
+ label107 = gtk_label_new (_("Method"));
+ gtk_widget_show (label107);
+ gtk_box_pack_start (GTK_BOX (hbox73), label107, FALSE, FALSE, 0);
+
+ method = gtk_combo_box_new_text ();
+ gtk_widget_show (method);
+ gtk_box_pack_start (GTK_BOX (hbox73), method, TRUE, TRUE, 0);
+ gtk_combo_box_append_text (GTK_COMBO_BOX (method), _("Pipe"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (method), _("Temporary file"));
+
+ frame8 = gtk_frame_new (NULL);
+ gtk_widget_show (frame8);
+ gtk_box_pack_start (GTK_BOX (vbox27), frame8, TRUE, TRUE, 0);
+
+ alignment20 = gtk_alignment_new (0.5, 0.5, 1, 1);
+ gtk_widget_show (alignment20);
+ gtk_container_add (GTK_CONTAINER (frame8), alignment20);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment20), 0, 0, 12, 0);
+
+ table1 = gtk_table_new (3, 2, FALSE);
+ gtk_widget_show (table1);
+ gtk_container_add (GTK_CONTAINER (alignment20), table1);
+ gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
+ gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
+ gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
+
+ _8bit = gtk_check_button_new_with_mnemonic (_("8 bit signed int"));
+ gtk_widget_show (_8bit);
+ gtk_table_attach (GTK_TABLE (table1), _8bit, 0, 1, 0, 1,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+
+ _16bit = gtk_check_button_new_with_mnemonic (_("16 bit signed int"));
+ gtk_widget_show (_16bit);
+ gtk_table_attach (GTK_TABLE (table1), _16bit, 1, 2, 0, 1,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+
+ _24bit = gtk_check_button_new_with_mnemonic (_("24 bit signed int"));
+ gtk_widget_show (_24bit);
+ gtk_table_attach (GTK_TABLE (table1), _24bit, 0, 1, 1, 2,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+
+ _32bit = gtk_check_button_new_with_mnemonic (_("32 bit signed int"));
+ gtk_widget_show (_32bit);
+ gtk_table_attach (GTK_TABLE (table1), _32bit, 1, 2, 1, 2,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+
+ _32bitfloat = gtk_check_button_new_with_mnemonic (_("32 bit float"));
+ gtk_widget_show (_32bitfloat);
+ gtk_table_attach (GTK_TABLE (table1), _32bitfloat, 0, 1, 2, 3,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+
+ label118 = gtk_label_new (_("<b>Sample formats</b>"));
+ gtk_widget_show (label118);
+ gtk_frame_set_label_widget (GTK_FRAME (frame8), label118);
+ gtk_label_set_use_markup (GTK_LABEL (label118), TRUE);
+
+ dialog_action_area6 = GTK_DIALOG (convpreset_editor)->action_area;
+ gtk_widget_show (dialog_action_area6);
+ gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area6), GTK_BUTTONBOX_END);
+
+ convpreset_cancel = gtk_button_new_from_stock ("gtk-cancel");
+ gtk_widget_show (convpreset_cancel);
+ gtk_dialog_add_action_widget (GTK_DIALOG (convpreset_editor), convpreset_cancel, GTK_RESPONSE_CANCEL);
+ GTK_WIDGET_SET_FLAGS (convpreset_cancel, GTK_CAN_DEFAULT);
+
+ convpreset_ok = gtk_button_new_from_stock ("gtk-ok");
+ gtk_widget_show (convpreset_ok);
+ gtk_dialog_add_action_widget (GTK_DIALOG (convpreset_editor), convpreset_ok, GTK_RESPONSE_OK);
+ GTK_WIDGET_SET_FLAGS (convpreset_ok, GTK_CAN_DEFAULT);
+
+ /* 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");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, vbox27, "vbox27");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, hbox70, "hbox70");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, label105, "label105");
+ 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, hbox72, "hbox72");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, label106, "label106");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, hbox93, "hbox93");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, encoder, "encoder");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, custom4, "custom4");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, hbox73, "hbox73");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, label107, "label107");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, method, "method");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, frame8, "frame8");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, alignment20, "alignment20");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, table1, "table1");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, _8bit, "_8bit");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, _16bit, "_16bit");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, _24bit, "_24bit");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, _32bit, "_32bit");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, _32bitfloat, "_32bitfloat");
+ GLADE_HOOKUP_OBJECT (convpreset_editor, label118, "label118");
+ 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");
+
+ return convpreset_editor;
+}
+
+GtkWidget*
+create_dsppreset_editor (void)
+{
+ GtkWidget *dsppreset_editor;
+ GtkWidget *dialog_vbox9;
+ GtkWidget *vbox30;
+ GtkWidget *hbox81;
+ GtkWidget *label111;
+ GtkWidget *title;
+ GtkWidget *vbox29;
+ GtkWidget *hbox82;
+ GtkWidget *add;
+ GtkWidget *remove;
+ GtkWidget *configure;
+ GtkWidget *hbox98;
+ GtkWidget *scrolledwindow7;
+ GtkWidget *plugins;
+ GtkWidget *vbox34;
+ GtkWidget *up;
+ GtkWidget *down;
+ GtkWidget *dialog_action_area8;
+ GtkWidget *cancelbutton6;
+ GtkWidget *okbutton6;
+
+ dsppreset_editor = gtk_dialog_new ();
+ 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);
+
+ dialog_vbox9 = GTK_DIALOG (dsppreset_editor)->vbox;
+ gtk_widget_show (dialog_vbox9);
+
+ vbox30 = gtk_vbox_new (FALSE, 8);
+ gtk_widget_show (vbox30);
+ gtk_box_pack_start (GTK_BOX (dialog_vbox9), vbox30, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox30), 12);
+
+ hbox81 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox81);
+ gtk_box_pack_start (GTK_BOX (vbox30), hbox81, FALSE, TRUE, 0);
+
+ label111 = gtk_label_new (_("Title"));
+ gtk_widget_show (label111);
+ gtk_box_pack_start (GTK_BOX (hbox81), label111, FALSE, FALSE, 0);
+
+ 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);
+
+ vbox29 = gtk_vbox_new (FALSE, 8);
+ gtk_widget_show (vbox29);
+ gtk_box_pack_start (GTK_BOX (vbox30), vbox29, TRUE, TRUE, 0);
+
+ hbox82 = gtk_hbox_new (TRUE, 8);
+ gtk_widget_show (hbox82);
+ gtk_box_pack_start (GTK_BOX (vbox29), hbox82, FALSE, TRUE, 0);
+
+ add = gtk_button_new_with_mnemonic (_("Add"));
+ gtk_widget_show (add);
+ gtk_box_pack_start (GTK_BOX (hbox82), add, 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);
+
+ configure = gtk_button_new_with_mnemonic (_("Configure"));
+ gtk_widget_show (configure);
+ gtk_box_pack_start (GTK_BOX (hbox82), configure, TRUE, TRUE, 0);
+
+ hbox98 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox98);
+ gtk_box_pack_start (GTK_BOX (vbox29), hbox98, TRUE, TRUE, 0);
+
+ scrolledwindow7 = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_show (scrolledwindow7);
+ gtk_box_pack_start (GTK_BOX (hbox98), 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);
+
+ 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);
+
+ vbox34 = gtk_vbox_new (FALSE, 8);
+ gtk_widget_show (vbox34);
+ gtk_box_pack_start (GTK_BOX (hbox98), vbox34, FALSE, FALSE, 0);
+
+ up = gtk_button_new_from_stock ("gtk-go-up");
+ gtk_widget_show (up);
+ gtk_box_pack_start (GTK_BOX (vbox34), up, FALSE, FALSE, 0);
+
+ down = gtk_button_new_from_stock ("gtk-go-down");
+ gtk_widget_show (down);
+ gtk_box_pack_start (GTK_BOX (vbox34), down, FALSE, FALSE, 0);
+
+ 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);
+
+ cancelbutton6 = gtk_button_new_from_stock ("gtk-cancel");
+ gtk_widget_show (cancelbutton6);
+ gtk_dialog_add_action_widget (GTK_DIALOG (dsppreset_editor), cancelbutton6, GTK_RESPONSE_CANCEL);
+ GTK_WIDGET_SET_FLAGS (cancelbutton6, GTK_CAN_DEFAULT);
+
+ okbutton6 = gtk_button_new_from_stock ("gtk-ok");
+ gtk_widget_show (okbutton6);
+ 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);
+ g_signal_connect ((gpointer) configure, "clicked",
+ G_CALLBACK (on_dsp_preset_plugin_configure_clicked),
+ NULL);
+ g_signal_connect ((gpointer) up, "clicked",
+ G_CALLBACK (on_dsp_preset_plugin_up_clicked),
+ NULL);
+ g_signal_connect ((gpointer) down, "clicked",
+ G_CALLBACK (on_dsp_preset_plugin_down_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, title, "title");
+ GLADE_HOOKUP_OBJECT (dsppreset_editor, vbox29, "vbox29");
+ GLADE_HOOKUP_OBJECT (dsppreset_editor, hbox82, "hbox82");
+ GLADE_HOOKUP_OBJECT (dsppreset_editor, add, "add");
+ GLADE_HOOKUP_OBJECT (dsppreset_editor, remove, "remove");
+ GLADE_HOOKUP_OBJECT (dsppreset_editor, configure, "configure");
+ GLADE_HOOKUP_OBJECT (dsppreset_editor, hbox98, "hbox98");
+ GLADE_HOOKUP_OBJECT (dsppreset_editor, scrolledwindow7, "scrolledwindow7");
+ GLADE_HOOKUP_OBJECT (dsppreset_editor, plugins, "plugins");
+ GLADE_HOOKUP_OBJECT (dsppreset_editor, vbox34, "vbox34");
+ GLADE_HOOKUP_OBJECT (dsppreset_editor, up, "up");
+ GLADE_HOOKUP_OBJECT (dsppreset_editor, down, "down");
+ 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");
+
+ return dsppreset_editor;
+}
+
+GtkWidget*
+create_select_dsp_plugin (void)
+{
+ GtkWidget *select_dsp_plugin;
+ GtkWidget *dialog_vbox10;
+ GtkWidget *vbox31;
+ GtkWidget *hbox85;
+ GtkWidget *label113;
+ GtkWidget *plugin;
+ GtkWidget *dialog_action_area9;
+ GtkWidget *cancelbutton7;
+ GtkWidget *okbutton7;
+
+ select_dsp_plugin = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (select_dsp_plugin), _("Select DSP Plugin"));
+ gtk_window_set_modal (GTK_WINDOW (select_dsp_plugin), TRUE);
+ gtk_window_set_type_hint (GTK_WINDOW (select_dsp_plugin), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+ dialog_vbox10 = GTK_DIALOG (select_dsp_plugin)->vbox;
+ gtk_widget_show (dialog_vbox10);
+
+ vbox31 = gtk_vbox_new (FALSE, 8);
+ gtk_widget_show (vbox31);
+ gtk_box_pack_start (GTK_BOX (dialog_vbox10), vbox31, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox31), 12);
+
+ hbox85 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox85);
+ gtk_box_pack_start (GTK_BOX (vbox31), hbox85, FALSE, FALSE, 0);
+
+ label113 = gtk_label_new (_("Plugin"));
+ gtk_widget_show (label113);
+ gtk_box_pack_start (GTK_BOX (hbox85), label113, FALSE, FALSE, 0);
+
+ plugin = gtk_combo_box_new_text ();
+ gtk_widget_show (plugin);
+ gtk_box_pack_start (GTK_BOX (hbox85), plugin, TRUE, TRUE, 0);
+
+ dialog_action_area9 = GTK_DIALOG (select_dsp_plugin)->action_area;
+ gtk_widget_show (dialog_action_area9);
+ gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area9), GTK_BUTTONBOX_END);
+
+ cancelbutton7 = gtk_button_new_from_stock ("gtk-cancel");
+ gtk_widget_show (cancelbutton7);
+ gtk_dialog_add_action_widget (GTK_DIALOG (select_dsp_plugin), cancelbutton7, GTK_RESPONSE_CANCEL);
+ GTK_WIDGET_SET_FLAGS (cancelbutton7, GTK_CAN_DEFAULT);
+
+ okbutton7 = gtk_button_new_from_stock ("gtk-ok");
+ gtk_widget_show (okbutton7);
+ gtk_dialog_add_action_widget (GTK_DIALOG (select_dsp_plugin), okbutton7, GTK_RESPONSE_OK);
+ GTK_WIDGET_SET_FLAGS (okbutton7, GTK_CAN_DEFAULT);
+
+ /* Store pointers to all widgets, for use by lookup_widget(). */
+ GLADE_HOOKUP_OBJECT_NO_REF (select_dsp_plugin, select_dsp_plugin, "select_dsp_plugin");
+ GLADE_HOOKUP_OBJECT_NO_REF (select_dsp_plugin, dialog_vbox10, "dialog_vbox10");
+ GLADE_HOOKUP_OBJECT (select_dsp_plugin, vbox31, "vbox31");
+ GLADE_HOOKUP_OBJECT (select_dsp_plugin, hbox85, "hbox85");
+ GLADE_HOOKUP_OBJECT (select_dsp_plugin, label113, "label113");
+ GLADE_HOOKUP_OBJECT (select_dsp_plugin, plugin, "plugin");
+ GLADE_HOOKUP_OBJECT_NO_REF (select_dsp_plugin, dialog_action_area9, "dialog_action_area9");
+ GLADE_HOOKUP_OBJECT (select_dsp_plugin, cancelbutton7, "cancelbutton7");
+ GLADE_HOOKUP_OBJECT (select_dsp_plugin, okbutton7, "okbutton7");
+
+ return select_dsp_plugin;
+}
+
+GtkWidget*
+create_preset_list (void)
+{
+ GtkWidget *preset_list;
+ GtkWidget *dialog_vbox11;
+ GtkWidget *vbox33;
+ GtkWidget *hbox94;
+ GtkWidget *add;
+ GtkWidget *remove;
+ GtkWidget *edit;
+ GtkWidget *scrolledwindow8;
+ GtkWidget *presets;
+ GtkWidget *dialog_action_area10;
+ GtkWidget *okbutton8;
+
+ preset_list = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (preset_list), _("Presets"));
+ gtk_window_set_modal (GTK_WINDOW (preset_list), TRUE);
+ gtk_window_set_type_hint (GTK_WINDOW (preset_list), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+ dialog_vbox11 = GTK_DIALOG (preset_list)->vbox;
+ gtk_widget_show (dialog_vbox11);
+
+ vbox33 = gtk_vbox_new (FALSE, 8);
+ gtk_widget_show (vbox33);
+ gtk_box_pack_start (GTK_BOX (dialog_vbox11), vbox33, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox33), 12);
+
+ hbox94 = gtk_hbox_new (TRUE, 8);
+ gtk_widget_show (hbox94);
+ gtk_box_pack_start (GTK_BOX (vbox33), hbox94, FALSE, TRUE, 0);
+
+ add = gtk_button_new_from_stock ("gtk-add");
+ gtk_widget_show (add);
+ gtk_box_pack_start (GTK_BOX (hbox94), add, FALSE, TRUE, 0);
+
+ remove = gtk_button_new_from_stock ("gtk-remove");
+ gtk_widget_show (remove);
+ gtk_box_pack_start (GTK_BOX (hbox94), remove, FALSE, TRUE, 0);
+
+ edit = gtk_button_new_from_stock ("gtk-edit");
+ gtk_widget_show (edit);
+ gtk_box_pack_start (GTK_BOX (hbox94), edit, FALSE, TRUE, 0);
+
+ scrolledwindow8 = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_show (scrolledwindow8);
+ gtk_box_pack_start (GTK_BOX (vbox33), scrolledwindow8, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow8), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow8), GTK_SHADOW_IN);
+
+ presets = gtk_tree_view_new ();
+ gtk_widget_show (presets);
+ gtk_container_add (GTK_CONTAINER (scrolledwindow8), presets);
+ gtk_widget_set_size_request (presets, 400, 176);
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (presets), FALSE);
+
+ dialog_action_area10 = GTK_DIALOG (preset_list)->action_area;
+ gtk_widget_show (dialog_action_area10);
+ gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area10), GTK_BUTTONBOX_END);
+
+ okbutton8 = gtk_button_new_from_stock ("gtk-close");
+ gtk_widget_show (okbutton8);
+ gtk_dialog_add_action_widget (GTK_DIALOG (preset_list), okbutton8, GTK_RESPONSE_CLOSE);
+ GTK_WIDGET_SET_FLAGS (okbutton8, GTK_CAN_DEFAULT);
+
+ /* Store pointers to all widgets, for use by lookup_widget(). */
+ GLADE_HOOKUP_OBJECT_NO_REF (preset_list, preset_list, "preset_list");
+ GLADE_HOOKUP_OBJECT_NO_REF (preset_list, dialog_vbox11, "dialog_vbox11");
+ GLADE_HOOKUP_OBJECT (preset_list, vbox33, "vbox33");
+ GLADE_HOOKUP_OBJECT (preset_list, hbox94, "hbox94");
+ GLADE_HOOKUP_OBJECT (preset_list, add, "add");
+ GLADE_HOOKUP_OBJECT (preset_list, remove, "remove");
+ GLADE_HOOKUP_OBJECT (preset_list, edit, "edit");
+ GLADE_HOOKUP_OBJECT (preset_list, scrolledwindow8, "scrolledwindow8");
+ GLADE_HOOKUP_OBJECT (preset_list, presets, "presets");
+ GLADE_HOOKUP_OBJECT_NO_REF (preset_list, dialog_action_area10, "dialog_action_area10");
+ GLADE_HOOKUP_OBJECT (preset_list, okbutton8, "okbutton8");
+
+ return preset_list;
+}
+
diff --git a/plugins/converter/interface.h b/plugins/converter/interface.h
new file mode 100644
index 00000000..346f63af
--- /dev/null
+++ b/plugins/converter/interface.h
@@ -0,0 +1,9 @@
+/*
+ * DO NOT EDIT THIS FILE - it is generated by Glade.
+ */
+
+GtkWidget* create_converterdlg (void);
+GtkWidget* create_convpreset_editor (void);
+GtkWidget* create_dsppreset_editor (void);
+GtkWidget* create_select_dsp_plugin (void);
+GtkWidget* create_preset_list (void);
diff --git a/plugins/converter/support.c b/plugins/converter/support.c
new file mode 100644
index 00000000..00aff298
--- /dev/null
+++ b/plugins/converter/support.c
@@ -0,0 +1,144 @@
+/*
+ * DO NOT EDIT THIS FILE - it is generated by Glade.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <gtk/gtk.h>
+
+#include "support.h"
+
+GtkWidget*
+lookup_widget (GtkWidget *widget,
+ const gchar *widget_name)
+{
+ GtkWidget *parent, *found_widget;
+
+ for (;;)
+ {
+ if (GTK_IS_MENU (widget))
+ parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
+ else
+ parent = widget->parent;
+ if (!parent)
+ parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey");
+ if (parent == NULL)
+ break;
+ widget = parent;
+ }
+
+ found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget),
+ widget_name);
+ if (!found_widget)
+ g_warning ("Widget not found: %s", widget_name);
+ return found_widget;
+}
+
+static GList *pixmaps_directories = NULL;
+
+/* Use this function to set the directory containing installed pixmaps. */
+void
+add_pixmap_directory (const gchar *directory)
+{
+ pixmaps_directories = g_list_prepend (pixmaps_directories,
+ g_strdup (directory));
+}
+
+/* This is an internally used function to find pixmap files. */
+static gchar*
+find_pixmap_file (const gchar *filename)
+{
+ GList *elem;
+
+ /* We step through each of the pixmaps directory to find it. */
+ elem = pixmaps_directories;
+ while (elem)
+ {
+ gchar *pathname = g_strdup_printf ("%s%s%s", (gchar*)elem->data,
+ G_DIR_SEPARATOR_S, filename);
+ if (g_file_test (pathname, G_FILE_TEST_EXISTS))
+ return pathname;
+ g_free (pathname);
+ elem = elem->next;
+ }
+ return NULL;
+}
+
+/* This is an internally used function to create pixmaps. */
+GtkWidget*
+create_pixmap (GtkWidget *widget,
+ const gchar *filename)
+{
+ gchar *pathname = NULL;
+ GtkWidget *pixmap;
+
+ if (!filename || !filename[0])
+ return gtk_image_new ();
+
+ pathname = find_pixmap_file (filename);
+
+ if (!pathname)
+ {
+ g_warning (_("Couldn't find pixmap file: %s"), filename);
+ return gtk_image_new ();
+ }
+
+ pixmap = gtk_image_new_from_file (pathname);
+ g_free (pathname);
+ return pixmap;
+}
+
+/* This is an internally used function to create pixmaps. */
+GdkPixbuf*
+create_pixbuf (const gchar *filename)
+{
+ gchar *pathname = NULL;
+ GdkPixbuf *pixbuf;
+ GError *error = NULL;
+
+ if (!filename || !filename[0])
+ return NULL;
+
+ pathname = find_pixmap_file (filename);
+
+ if (!pathname)
+ {
+ g_warning (_("Couldn't find pixmap file: %s"), filename);
+ return NULL;
+ }
+
+ pixbuf = gdk_pixbuf_new_from_file (pathname, &error);
+ if (!pixbuf)
+ {
+ fprintf (stderr, "Failed to load pixbuf file: %s: %s\n",
+ pathname, error->message);
+ g_error_free (error);
+ }
+ g_free (pathname);
+ return pixbuf;
+}
+
+/* This is used to set ATK action descriptions. */
+void
+glade_set_atk_action_description (AtkAction *action,
+ const gchar *action_name,
+ const gchar *description)
+{
+ gint n_actions, i;
+
+ n_actions = atk_action_get_n_actions (action);
+ for (i = 0; i < n_actions; i++)
+ {
+ if (!strcmp (atk_action_get_name (action, i), action_name))
+ atk_action_set_description (action, i, description);
+ }
+}
+
diff --git a/plugins/converter/support.h b/plugins/converter/support.h
new file mode 100644
index 00000000..a32649e5
--- /dev/null
+++ b/plugins/converter/support.h
@@ -0,0 +1,69 @@
+/*
+ * DO NOT EDIT THIS FILE - it is generated by Glade.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+
+/*
+ * Standard gettext macros.
+ */
+#ifdef ENABLE_NLS
+# include <libintl.h>
+# undef _
+# define _(String) dgettext (PACKAGE, String)
+# define Q_(String) g_strip_context ((String), gettext (String))
+# ifdef gettext_noop
+# define N_(String) gettext_noop (String)
+# else
+# define N_(String) (String)
+# endif
+#else
+# define textdomain(String) (String)
+# define gettext(String) (String)
+# define dgettext(Domain,Message) (Message)
+# define dcgettext(Domain,Message,Type) (Message)
+# define bindtextdomain(Domain,Directory) (Domain)
+# define _(String) (String)
+# define Q_(String) g_strip_context ((String), (String))
+# define N_(String) (String)
+#endif
+
+
+/*
+ * Public Functions.
+ */
+
+/*
+ * This function returns a widget in a component created by Glade.
+ * Call it with the toplevel widget in the component (i.e. a window/dialog),
+ * or alternatively any widget in the component, and the name of the widget
+ * you want returned.
+ */
+GtkWidget* lookup_widget (GtkWidget *widget,
+ const gchar *widget_name);
+
+
+/* Use this function to set the directory containing installed pixmaps. */
+void add_pixmap_directory (const gchar *directory);
+
+
+/*
+ * Private Functions.
+ */
+
+/* This is used to create the pixmaps used in the interface. */
+GtkWidget* create_pixmap (GtkWidget *widget,
+ const gchar *filename);
+
+/* This is used to create the pixbufs used in the interface. */
+GdkPixbuf* create_pixbuf (const gchar *filename);
+
+/* This is used to set ATK action descriptions. */
+void glade_set_atk_action_description (AtkAction *action,
+ const gchar *action_name,
+ const gchar *description);
+