/* * Copyright (c) 2009 Tomasz Moń * * 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; under version 3 of the License. * * 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, see . */ #include #include "gdigi.h" #include "gui.h" #include "effects.h" extern VBoxes vboxes[]; extern int n_vboxes; void value_changed_option_cb(GtkSpinButton *spinbutton, SettingsWidget *setting) { g_return_if_fail(setting != NULL); int val = gtk_spin_button_get_value_as_int(spinbutton); set_option(setting->option, setting->position, val); } void toggled_cb(GtkToggleButton *button, void (*callback)(gboolean)) { gboolean val = gtk_toggle_button_get_active(button); callback(val); } GtkWidget *create_table(SettingsWidget *widgets, gint amt) { GtkWidget *table, *label, *widget; GtkObject *adj; int x; table = gtk_table_new(2, amt, FALSE); for (x = 0; xchild) == NULL) gtk_widget_destroy(group->child); g_object_unref(group->child); g_free(group); } void combo_box_changed_cb(GtkComboBox *widget, gpointer data) { GtkWidget *child; GtkWidget *vbox; EffectSettingsGroup *settings = NULL; gchar *name = NULL; gint x; g_object_get(G_OBJECT(widget), "active", &x, NULL); vbox = g_object_get_data(G_OBJECT(widget), "vbox"); if (x != -1) { name = g_strdup_printf("SettingsGroup%d", x); settings = g_object_get_data(G_OBJECT(widget), name); g_free(name); if (settings->callback != NULL) settings->callback(settings->id); child = g_object_get_data(G_OBJECT(widget), "active_child"); if (child != NULL) { gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(gtk_widget_get_parent(vbox))), child); } gtk_container_add(GTK_CONTAINER(gtk_widget_get_parent(gtk_widget_get_parent(vbox))), settings->child); gtk_widget_show_all(gtk_widget_get_parent(gtk_widget_get_parent(vbox))); g_object_set_data(G_OBJECT(widget), "active_child", settings->child); } } GtkWidget *create_widget_container(WidgetContainer *widgets, gint amt) { GtkWidget *vbox; GtkWidget *widget; GtkWidget *combo_box = NULL; EffectSettingsGroup *settings = NULL; gchar *name = NULL; gint x; gint cmbox_no = -1; vbox = gtk_vbox_new(FALSE, 0); for (x = 0; xid = widgets[x].id; settings->callback = widgets[x].callback; settings->child = widget; name = g_strdup_printf("SettingsGroup%d", cmbox_no); g_object_set_data_full(G_OBJECT(combo_box), name, settings, ((GDestroyNotify)effect_settings_group_free)); g_free(name); } else if (widgets[x].id == -1) { widget = create_table(widgets[x].widgets, widgets[x].widgets_amt); gtk_container_add(GTK_CONTAINER(vbox), widget); } } return vbox; }; GtkWidget *create_vbox(VBoxWidget *widgets, gint amt) { GtkWidget *vbox; GtkWidget *hbox; GtkWidget *widget; GtkWidget *table; int x; vbox = gtk_vbox_new(FALSE, 0); hbox = gtk_hbox_new(FALSE, 0); gtk_box_set_homogeneous(GTK_BOX(hbox), TRUE); for (x = 0; x