diff src/cdaudio-ng/configure.c @ 1189:af5bd4592100 trunk

Added cdaudio-ng.h; added a configure dialog
author zither@litestep.network
date Wed, 20 Jun 2007 22:27:48 +0300
parents
children 483b8d900d5e
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cdaudio-ng/configure.c	Wed Jun 20 22:27:48 2007 +0300
@@ -0,0 +1,206 @@
+
+#include <stdio.h>
+#include <string.h>
+#include <gtk/gtk.h>
+
+#include "configure.h"
+
+
+static GtkWidget		*configwindow;
+static GtkWidget		*okbutton;
+static GtkWidget		*cancelbutton;
+static GtkWidget		*maintable;
+static GtkWidget		*daeframe;
+static GtkWidget		*titleinfoframe;
+static GtkWidget		*miscframe;
+static GtkWidget		*daetable;
+static GtkWidget		*titleinfotable;
+static GtkWidget		*misctable;
+static GtkWidget		*usedaecheckbutton;
+static GtkWidget		*limitcheckbutton;
+static GtkWidget		*usecdtextcheckbutton;
+static GtkWidget		*usecddbcheckbutton;
+static GtkWidget		*usedevicecheckbutton;
+static GtkWidget		*buttonbox;
+static GtkWidget		*limitspinbutton;
+static GtkWidget		*deviceentry;
+
+static gboolean			*usedae;
+static int				*limitspeed;
+static gboolean			*usecdtext;
+static gboolean			*usecddb;
+static char				*device;
+
+static gboolean			delete_window(GtkWidget *widget, GdkEvent *event, gpointer data);
+static void				button_clicked(GtkWidget *widget, gpointer data);
+static void				checkbutton_toggled(GtkWidget *widget, gpointer data);
+static void				values_to_gui();
+static void				gui_to_values();
+
+
+void configure_set_variables(gboolean *_usedae, int *_limitspeed, gboolean *_usecdtext, gboolean *_usecddb, char *_device)
+{
+	usedae = _usedae;
+	limitspeed = _limitspeed;
+	usecdtext = _usecdtext;
+	usecddb = _usecddb;
+	device = _device;
+}
+
+void configure_create_gui()
+{
+	configwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+	gtk_window_set_title(GTK_WINDOW(configwindow), "CD Audio Plugin Configuration");
+	gtk_window_set_resizable(GTK_WINDOW(configwindow), FALSE);
+	gtk_window_set_position(GTK_WINDOW(configwindow), GTK_WIN_POS_CENTER_ALWAYS);
+	gtk_container_set_border_width(GTK_CONTAINER(configwindow), 10);
+	g_signal_connect(G_OBJECT(configwindow), "delete_event", G_CALLBACK(delete_window), NULL);
+
+	maintable = gtk_table_new(4, 2, TRUE);
+	gtk_container_add(GTK_CONTAINER(configwindow), maintable);
+
+
+	daeframe = gtk_frame_new("Digital audio extraction");
+	gtk_table_attach_defaults(GTK_TABLE(maintable), daeframe, 0, 2, 0, 1);
+	daetable = gtk_table_new(2, 2, TRUE);
+	gtk_container_add(GTK_CONTAINER(daeframe), daetable);
+
+	titleinfoframe = gtk_frame_new("Title information");
+	gtk_table_attach_defaults(GTK_TABLE(maintable), titleinfoframe, 0, 2, 1, 2);
+	titleinfotable = gtk_table_new(2, 2, TRUE);
+	gtk_container_add(GTK_CONTAINER(titleinfoframe), titleinfotable);
+
+	miscframe = gtk_frame_new("Misc");
+	gtk_table_attach_defaults(GTK_TABLE(maintable), miscframe, 0, 2, 2, 3);
+	misctable = gtk_table_new(2, 2, TRUE);
+	gtk_container_add(GTK_CONTAINER(miscframe), misctable);
+
+
+	usedaecheckbutton = gtk_check_button_new_with_label("Use digital audio extraction");
+	g_signal_connect(G_OBJECT(usedaecheckbutton), "toggled", G_CALLBACK(checkbutton_toggled), NULL);
+	gtk_table_attach_defaults(GTK_TABLE(daetable), usedaecheckbutton, 0, 2, 0, 1);
+
+	limitcheckbutton = gtk_check_button_new_with_label("Limit read speed to: ");
+	g_signal_connect(G_OBJECT(limitcheckbutton), "toggled", G_CALLBACK(checkbutton_toggled), NULL);
+	gtk_table_attach_defaults(GTK_TABLE(daetable), limitcheckbutton, 0, 1, 1, 2);
+
+	limitspinbutton = gtk_spin_button_new_with_range(1.0, 24.0, 1.0);
+	gtk_table_attach_defaults(GTK_TABLE(daetable), limitspinbutton, 1, 2, 1, 2);
+
+	usecdtextcheckbutton = gtk_check_button_new_with_label("Use cd-text if available");
+	g_signal_connect(G_OBJECT(usecdtextcheckbutton), "toggled", G_CALLBACK(checkbutton_toggled), NULL);
+	gtk_table_attach_defaults(GTK_TABLE(titleinfotable), usecdtextcheckbutton, 0, 2, 0, 1);
+
+	usecddbcheckbutton = gtk_check_button_new_with_label("Use CDDB if available");
+	g_signal_connect(G_OBJECT(usecddbcheckbutton), "toggled", G_CALLBACK(checkbutton_toggled), NULL);
+	gtk_table_attach_defaults(GTK_TABLE(titleinfotable), usecddbcheckbutton, 0, 2, 1, 2);
+
+	usedevicecheckbutton = gtk_check_button_new_with_label("Override default device: ");
+	g_signal_connect(G_OBJECT(usedevicecheckbutton), "toggled", G_CALLBACK(checkbutton_toggled), NULL);
+	gtk_table_attach_defaults(GTK_TABLE(misctable), usedevicecheckbutton, 0, 1, 0, 1);
+	
+	deviceentry = gtk_entry_new();
+	gtk_table_attach_defaults(GTK_TABLE(misctable), deviceentry, 1, 2, 0, 1);
+
+
+	buttonbox = gtk_hbutton_box_new();
+	gtk_hbutton_box_set_layout_default(GTK_BUTTONBOX_END);
+	gtk_hbutton_box_set_spacing_default(10);
+	gtk_table_attach_defaults(GTK_TABLE(maintable), buttonbox, 0, 2, 3, 4);
+
+	okbutton = gtk_button_new_with_label("Ok");
+	g_signal_connect(G_OBJECT(okbutton), "clicked", G_CALLBACK(button_clicked), NULL);
+	gtk_container_add(GTK_CONTAINER(buttonbox), okbutton);
+
+	cancelbutton = gtk_button_new_with_label("Cancel");
+	g_signal_connect(G_OBJECT(cancelbutton), "clicked", G_CALLBACK(button_clicked), NULL);
+	gtk_container_add(GTK_CONTAINER(buttonbox), cancelbutton);
+
+
+	gtk_widget_show(usedaecheckbutton);
+	gtk_widget_show(limitcheckbutton);
+	gtk_widget_show(limitspinbutton);
+	gtk_widget_show(usecdtextcheckbutton);
+	gtk_widget_show(usecddbcheckbutton);
+	gtk_widget_show(usedevicecheckbutton);
+	gtk_widget_show(deviceentry);
+
+	gtk_widget_show(daetable);
+	gtk_widget_show(daeframe);
+	gtk_widget_show(titleinfotable);
+	gtk_widget_show(titleinfoframe);
+	gtk_widget_show(misctable);
+	gtk_widget_show(miscframe);
+
+	gtk_widget_show(buttonbox);
+	gtk_widget_show(okbutton);
+	gtk_widget_show(cancelbutton);
+
+	gtk_widget_show(maintable);
+}
+
+void configure_show_gui()
+{
+	values_to_gui();
+	gtk_widget_show(configwindow);
+}
+
+gboolean delete_window(GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+	gtk_widget_hide(configwindow);
+	return TRUE;
+}
+
+void button_clicked(GtkWidget *widget, gpointer data)
+{
+	gtk_widget_hide(configwindow);
+	if (widget == okbutton)
+		gui_to_values();
+}
+
+
+void checkbutton_toggled(GtkWidget *widget, gpointer data)
+{
+	gtk_widget_set_sensitive(limitcheckbutton, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(usedaecheckbutton)));
+
+	gtk_widget_set_sensitive(
+		limitspinbutton, 
+		gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(limitcheckbutton)) && 
+		GTK_WIDGET_IS_SENSITIVE(limitcheckbutton));
+
+	gtk_widget_set_sensitive(deviceentry, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(usedevicecheckbutton)));
+}
+
+void values_to_gui()
+{
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(usedaecheckbutton), *usedae);
+
+	gtk_widget_set_sensitive(limitcheckbutton, *usedae);
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(limitcheckbutton), *limitspeed > 0);
+
+	gtk_widget_set_sensitive(limitspinbutton, *usedae && *limitspeed > 0);
+	gtk_spin_button_set_value(GTK_SPIN_BUTTON(limitspinbutton), *limitspeed);
+
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(usecdtextcheckbutton), *usecdtext);
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(usecddbcheckbutton), *usecddb);
+
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(usedevicecheckbutton), strlen(device) > 0);
+
+	gtk_widget_set_sensitive(deviceentry, strlen(device) > 0);
+	gtk_entry_set_text(GTK_ENTRY(deviceentry), device);
+}
+
+void gui_to_values()
+{
+	*usedae = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(usedaecheckbutton));
+	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(limitcheckbutton)))
+		*limitspeed = gtk_spin_button_get_value(GTK_SPIN_BUTTON(limitspinbutton));
+	else
+		*limitspeed = 0;
+	*usecdtext = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(usecdtextcheckbutton));
+	*usecddb = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(usecddbcheckbutton));
+	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(usedevicecheckbutton)))
+		strcpy(device, gtk_entry_get_text(GTK_ENTRY(deviceentry)));
+	else
+		strcpy(device, "");
+}