diff options
Diffstat (limited to 'plugins/converter')
-rw-r--r-- | plugins/converter/Makefile | 27 | ||||
-rw-r--r-- | plugins/converter/callbacks.c | 10 | ||||
-rw-r--r-- | plugins/converter/callbacks.h | 80 | ||||
-rw-r--r-- | plugins/converter/converter.glade | 1599 | ||||
-rw-r--r-- | plugins/converter/converter.gladep | 11 | ||||
-rw-r--r-- | plugins/converter/convgui.c | 1065 | ||||
-rw-r--r-- | plugins/converter/interface.c | 774 | ||||
-rw-r--r-- | plugins/converter/interface.h | 9 | ||||
-rw-r--r-- | plugins/converter/support.c | 144 | ||||
-rw-r--r-- | plugins/converter/support.h | 69 |
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"><b>Sample formats</b></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); + |