diff src/Output/jack/configure.c @ 0:13389e613d67 trunk

[svn] - initial import of audacious-plugins tree (lots to do)
author nenolod
date Mon, 18 Sep 2006 01:11:49 -0700
parents
children 088092a52fea
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Output/jack/configure.c	Mon Sep 18 01:11:49 2006 -0700
@@ -0,0 +1,155 @@
+/*      xmms - jack output plugin
+ *    Copyright (C) 2004      Chris Morgan
+ *
+ *
+ *  audacious port (2005) by Giacomo Lozito from develia.org
+ *
+ *  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.
+ *
+ *  Contains code Copyright (C) 1998-2000 Mikael Alm, Olle Hallnas,
+ *  Thomas Nillson, 4Front Technologies and Galex Yen
+ */
+
+#include "jack.h"
+
+#include "libaudacious/configdb.h"
+
+#include <gtk/gtk.h>
+
+extern jackconfig jack_cfg;
+
+static GtkWidget *configure_win = NULL, *vbox;
+
+static GtkWidget *GTK_isTraceEnabled;
+static GtkWidget *bbox, *ok, *cancel;
+
+static GtkWidget *option_frame;
+static GtkWidget *port_connection_mode_box;
+static GtkWidget *port_connection_mode_combo;
+
+#define GET_CHARS(edit) gtk_editable_get_chars(GTK_EDITABLE(edit), 0, -1)
+
+static void configure_win_ok_cb(GtkWidget * w, gpointer data)
+{
+	ConfigDb *cfgfile;
+
+	jack_cfg.isTraceEnabled = (gint) GTK_CHECK_BUTTON(GTK_isTraceEnabled)->toggle_button.active;
+  jack_cfg.port_connection_mode = GET_CHARS(GTK_COMBO(port_connection_mode_combo)->entry);
+
+  jack_set_port_connection_mode(); /* update the connection mode */
+
+	cfgfile = bmp_cfg_db_open();
+
+	bmp_cfg_db_set_bool(cfgfile, "jack", "isTraceEnabled", jack_cfg.isTraceEnabled);
+	bmp_cfg_db_set_string(cfgfile, "jack", "port_connection_mode", jack_cfg.port_connection_mode);
+	bmp_cfg_db_close(cfgfile);
+
+	gtk_widget_destroy(configure_win);
+}
+
+static void get_port_connection_modes(GtkCombo *combo)
+{
+    GtkWidget *item;
+    char *descr;
+
+    descr = g_strdup("Connect to all available jack ports");
+    item = gtk_list_item_new_with_label(descr);
+    gtk_widget_show(item);
+    g_free(descr);
+    gtk_combo_set_item_string(combo, GTK_ITEM(item), "CONNECT_ALL");
+    gtk_container_add(GTK_CONTAINER(combo->list), item);
+
+    descr = g_strdup("Connect only the output ports");
+    item = gtk_list_item_new_with_label(descr);
+    gtk_widget_show(item);
+    g_free(descr);
+    gtk_combo_set_item_string(combo, GTK_ITEM(item), "CONNECT_OUTPUT");
+    gtk_container_add(GTK_CONTAINER(combo->list), item);
+
+    descr = g_strdup("Connect to no ports");
+    item = gtk_list_item_new_with_label(descr);
+    gtk_widget_show(item);
+    g_free(descr);
+    gtk_combo_set_item_string(combo, GTK_ITEM(item), "CONNECT_NONE");
+    gtk_container_add(GTK_CONTAINER(combo->list), item);
+}
+
+void jack_configure(void)
+{
+	if (!configure_win)
+	{	
+		configure_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+		gtk_window_set_type_hint ( GTK_WINDOW(configure_win), GDK_WINDOW_TYPE_HINT_DIALOG);
+		gtk_signal_connect(GTK_OBJECT(configure_win), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &configure_win);
+		gtk_window_set_title(GTK_WINDOW(configure_win), ("jack Plugin configuration"));
+		gtk_window_set_policy(GTK_WINDOW(configure_win), FALSE, FALSE, FALSE);
+		gtk_window_set_position(GTK_WINDOW(configure_win), GTK_WIN_POS_MOUSE);
+		gtk_container_border_width(GTK_CONTAINER(configure_win), 10);
+
+    vbox = gtk_vbox_new(FALSE, 10);
+    gtk_container_add(GTK_CONTAINER(configure_win), vbox);
+
+    /* add a frame for other xmms-jack options */
+    option_frame = gtk_frame_new("Options:");
+    gtk_box_pack_start(GTK_BOX(vbox), option_frame, FALSE, FALSE, 0);
+
+    /* add a hbox that will contain a label for a dropdown and the dropdown itself */
+    port_connection_mode_box = gtk_hbox_new(FALSE, 5);
+    gtk_container_set_border_width(GTK_CONTAINER(port_connection_mode_box), 5);
+    gtk_container_add(GTK_CONTAINER(option_frame), port_connection_mode_box);
+
+    /* add the label */
+    gtk_box_pack_start(GTK_BOX(port_connection_mode_box), gtk_label_new("Connection mode:"),
+                       FALSE, FALSE, 0);
+
+    /* add the dropdown */
+    port_connection_mode_combo = gtk_combo_new();
+    get_port_connection_modes(GTK_COMBO(port_connection_mode_combo));
+    gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(port_connection_mode_combo)->entry),
+                       jack_cfg.port_connection_mode);
+    gtk_box_pack_start(GTK_BOX(port_connection_mode_box), port_connection_mode_combo,
+                       TRUE, TRUE, 0);
+
+    /* create a check_button for debug output */
+    GTK_isTraceEnabled = gtk_check_button_new_with_label("Enable debug printing");
+    gtk_box_pack_start(GTK_BOX(vbox), GTK_isTraceEnabled, FALSE, FALSE, 0);
+    gtk_widget_show(GTK_isTraceEnabled);
+
+    /* set the state of the check_button based upon the value of */
+    /* isTracingEnabled */
+    GTK_CHECK_BUTTON(GTK_isTraceEnabled)->toggle_button.active = jack_cfg.isTraceEnabled;
+
+    /* add the box for the ok/canceled buttons at the bottom */
+    bbox = gtk_hbox_new(FALSE, 10);
+    gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+
+		ok = gtk_button_new_with_label(("Ok"));
+		gtk_signal_connect(GTK_OBJECT(ok), "clicked", GTK_SIGNAL_FUNC(configure_win_ok_cb), NULL);
+		GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
+		gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 0);
+		gtk_widget_show(ok);
+		gtk_widget_grab_default(ok);
+
+		cancel = gtk_button_new_with_label(("Cancel"));
+		gtk_signal_connect_object(GTK_OBJECT(cancel), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(configure_win));
+		GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
+		gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0);
+		gtk_widget_show(cancel);
+
+		gtk_widget_show_all(configure_win);
+	}
+	else
+		gdk_window_raise(configure_win->window);
+}