Mercurial > audlegacy-plugins
diff src/iris/theme.c @ 116:a578bf9b2851 trunk
[svn] - iris vis plugin port
| author | nenolod |
|---|---|
| date | Tue, 24 Oct 2006 21:25:31 -0700 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/iris/theme.c Tue Oct 24 21:25:31 2006 -0700 @@ -0,0 +1,308 @@ +/* Iris - visualization plugin for XMMS + * Copyright (C) 2000-2002 Cédric DELFOSSE (cdelfosse@free.fr) + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include <stdlib.h> +#include "iris.h" + +/* declaration of all the themes start here */ +extern iris_theme theme_original; +extern iris_theme theme_spectrum; +extern iris_theme theme_spectrotoy; +extern iris_theme theme_squarefield; +extern iris_theme theme_waves; +extern iris_theme theme_pyramid; +extern iris_theme theme_knot; +extern iris_theme theme_pinwheel; +extern iris_theme theme_pipes; +extern iris_theme theme_float; +extern iris_theme theme_fountain; +extern iris_theme theme_flash; + +/* this is the array where all the themes are */ +iris_theme theme[THEME_NUMBER]; + + +/* this initialize the theme registry */ +void +theme_register (void) +{ + theme[0] = theme_original; + theme[1] = theme_spectrum; + theme[2] = theme_spectrotoy; + theme[3] = theme_squarefield; + theme[4] = theme_waves; + theme[5] = theme_pyramid; + theme[6] = theme_knot; + theme[7] = theme_pinwheel; + theme[8] = theme_pipes; + theme[9] = theme_float; + theme[10] = theme_fountain; + theme[11] = theme_flash;} + + +/* allocate memory for the config struct of the themes */ +void +theme_config_init (void) +{ + int i; + + for (i = 0; i < THEME_NUMBER; i++) + { + theme[i].config->global = g_malloc (sizeof (config_global)); + theme[i].config_new->global = g_malloc (sizeof (config_global)); + } +} + + +/* set the default global config of a theme */ +void +theme_config_global_default (int num) +{ + theme[num].config->global->priority = 1.0; /* priority set to max */ + theme[num].config->global->transparency = -1; /* transparency random */ + theme[num].config->global->wireframe = 0; /* wireframe off */ +} + + +/* read the global config of a theme + (priority, transparency, wireframe) */ +void +theme_config_global_read (ConfigDb * db, char *section_name, int num) +{ + char *string; + + string = g_strconcat (theme[num].key, "_", "priority", NULL); + bmp_cfg_db_get_float (db, section_name, string, &theme[num].config->global->priority); + g_free (string); + + string = g_strconcat (theme[num].key, "_", "transparency", NULL); + bmp_cfg_db_get_int (db, section_name, string, &theme[num].config->global->transparency); + g_free (string); + + string = g_strconcat (theme[num].key, "_", "wireframe", NULL); + bmp_cfg_db_get_int (db, section_name, string, &theme[num].config->global->wireframe); + g_free (string); +} + + +/* write the global config of a theme */ +void +theme_config_global_write (ConfigDb * db, char *section_name, int num) +{ + char *string; + + string = g_strconcat (theme[num].key, "_", "priority", NULL); + bmp_cfg_db_set_float (db, section_name, string, theme[num].config->global->priority); + g_free (string); + + string = g_strconcat (theme[num].key, "_", "transparency", NULL); + bmp_cfg_db_set_int (db, section_name, string, theme[num].config->global->transparency); + g_free (string); + + string = g_strconcat (theme[num].key, "_", "wireframe", NULL); + bmp_cfg_db_set_int (db, section_name, string, theme[num].config->global->wireframe); + g_free (string); +} + + +/* the following 6 functions are callbacks for the theme_config_global_widgets function */ +void +on_rb_transparency_random (GtkWidget * widget, gpointer data) +{ + theme[(int) data].config_new->global->transparency = -1; +} + + +void +on_rb_transparency_on (GtkWidget * widget, gpointer data) +{ + theme[(int) data].config_new->global->transparency = 1; +} + + +void +on_rb_transparency_off (GtkWidget * widget, gpointer data) +{ + theme[(int) data].config_new->global->transparency = 0; +} + + +void +on_rb_wireframe_random (GtkWidget * widget, gpointer data) +{ + theme[(int) data].config_new->global->wireframe = -1; +} + + +void +on_rb_wireframe_on (GtkWidget * widget, gpointer data) +{ + theme[(int) data].config_new->global->wireframe = 1; +} + + +void +on_rb_wireframe_off (GtkWidget * widget, gpointer data) +{ + theme[(int) data].config_new->global->wireframe = 0; +} + + +void +theme_config_apply (int num) +{ + memcpy (theme[num].config->private, theme[num].config_new->private, + theme[num].config_private_size); +} + + +/* create the config widgets of all the themes */ +void +theme_config_global_widgets (GtkWidget * vbox, int num) +{ + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *radio_button_on1; + GtkWidget *radio_button_off1; + GtkWidget *radio_button_random1; + GSList *group; + + memcpy (theme[num].config_new->global, theme[num].config->global, + sizeof (config_global)); + + /* transparency mode */ + hbox = gtk_hbox_new (FALSE, 2); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 4); + + label = gtk_label_new ("Transparency"); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 4); + radio_button_random1 = gtk_radio_button_new_with_label (NULL, "Random"); + gtk_box_pack_start (GTK_BOX (hbox), radio_button_random1, FALSE, FALSE, 4); + + group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button_random1)); + radio_button_on1 = gtk_radio_button_new_with_label (group, "On"); + gtk_box_pack_start (GTK_BOX (hbox), radio_button_on1, FALSE, FALSE, 4); + + group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button_on1)); + radio_button_off1 = gtk_radio_button_new_with_label (group, "Off"); + gtk_box_pack_start (GTK_BOX (hbox), radio_button_off1, FALSE, FALSE, 4); + + switch (theme[num].config->global->transparency) + { + case -1: + { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON + (radio_button_random1), TRUE); + break; + } + case 0: + { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON + (radio_button_off1), TRUE); + break; + } + case 1: + { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON + (radio_button_on1), TRUE); + } + } + + gtk_signal_connect (GTK_OBJECT (radio_button_random1), "toggled", + GTK_SIGNAL_FUNC (on_rb_transparency_random), + (gpointer) num); + gtk_signal_connect (GTK_OBJECT (radio_button_off1), "toggled", + GTK_SIGNAL_FUNC (on_rb_transparency_off), + (gpointer) num); + gtk_signal_connect (GTK_OBJECT (radio_button_on1), "toggled", + GTK_SIGNAL_FUNC (on_rb_transparency_on), + (gpointer) num); + + /* wireframe mode */ + hbox = gtk_hbox_new (FALSE, 2); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 4); + + label = gtk_label_new ("Wireframe"); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 4); + radio_button_random1 = gtk_radio_button_new_with_label (NULL, "Random"); + gtk_box_pack_start (GTK_BOX (hbox), radio_button_random1, FALSE, FALSE, 4); + + group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button_random1)); + radio_button_on1 = gtk_radio_button_new_with_label (group, "On"); + gtk_box_pack_start (GTK_BOX (hbox), radio_button_on1, FALSE, FALSE, 4); + + group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button_on1)); + radio_button_off1 = gtk_radio_button_new_with_label (group, "Off"); + gtk_box_pack_start (GTK_BOX (hbox), radio_button_off1, FALSE, FALSE, 4); + + switch (theme[num].config->global->wireframe) + { + case -1: + { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON + (radio_button_random1), TRUE); + break; + } + case 0: + { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON + (radio_button_off1), TRUE); + break; + } + case 1: + { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON + (radio_button_on1), TRUE); + } + } + + gtk_signal_connect (GTK_OBJECT (radio_button_random1), "toggled", + GTK_SIGNAL_FUNC (on_rb_wireframe_random), + (gpointer) num); + gtk_signal_connect (GTK_OBJECT (radio_button_off1), "toggled", + GTK_SIGNAL_FUNC (on_rb_wireframe_off), (gpointer) num); + gtk_signal_connect (GTK_OBJECT (radio_button_on1), "toggled", + GTK_SIGNAL_FUNC (on_rb_wireframe_on), (gpointer) num); + +} + + +/* create the theme about vbox */ +void +theme_about (GtkWidget * vbox_about, int num) +{ + GtkWidget *label; + GtkWidget *vbox; + + vbox = gtk_vbox_new (FALSE, 4); + label = gtk_label_new (g_strconcat ("Theme name: ", theme[num].name, NULL)); + gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 4); + + label = + gtk_label_new (g_strconcat ("Theme author: ", theme[num].author, NULL)); + gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 4); + + label = + gtk_label_new (g_strconcat + ("Theme description: ", theme[num].description, NULL)); + gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 4); + + gtk_box_pack_start (GTK_BOX (vbox_about), vbox, FALSE, FALSE, 4); +}
