/* $Id: enable_disable.c 4 2008-06-22 09:19:11Z rbock $ */ /* GtkDatabox - An extension to the gtk+ library * Copyright (C) 1998 - 2008 Dr. Roland Bock * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * 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 Lesser 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 <stdio.h> #include <gtk/gtk.h> #include <gtkdatabox.h> #include <gtkdatabox_bars.h> #include <math.h> #define POINTS 50 /*---------------------------------------------------------------- * databox show_hide *----------------------------------------------------------------*/ typedef void (*set_function) (GtkDatabox * box, gboolean enable); typedef gboolean (*get_function) (GtkDatabox * box); typedef struct { char *title; set_function set; get_function get; GtkDatabox *box; GtkEntry *entry; } EnableSet; EnableSet enableSets[] = { {"Selection Enabled", gtk_databox_set_enable_selection, gtk_databox_get_enable_selection, NULL, NULL}, {"Zoom Enabled", gtk_databox_set_enable_zoom, gtk_databox_get_enable_zoom, NULL, NULL}, }; gint noEnableSets = sizeof (enableSets) / sizeof (EnableSet); static gboolean update_enable (EnableSet * enableSet) { gboolean status = !(enableSet->get (enableSet->box)); enableSet->set (enableSet->box, status); gtk_entry_set_text (GTK_ENTRY (enableSet->entry), (status) ? "TRUE" : "FALSE"); return FALSE; } static void create_show_hide (void) { GtkWidget *window = NULL; GtkWidget *box1; GtkWidget *box2; GtkWidget *close_button; GtkWidget *enable_box; GtkWidget *box; GtkWidget *table; GtkWidget *label; GtkWidget *separator; GtkDataboxGraph *graph; gfloat *X; gfloat *Y; GdkColor color; gint i; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request (window, 600, 600); g_signal_connect (GTK_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_window_set_title (GTK_WINDOW (window), "GtkDatabox: Enable/Disable Features"); gtk_container_set_border_width (GTK_CONTAINER (window), 0); box1 = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (window), box1); label = gtk_label_new ("Click on the buttons to enable/disable features.\n\nFor basic understanding: See basics :-)\n\n"); gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0); separator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, FALSE, 0); enable_box = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (box1), enable_box, FALSE, FALSE, 0); separator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, FALSE, 0); /* Create a GtkDatabox widget along with scrollbars and rulers */ gtk_databox_create_box_with_scrollbars_and_rulers (&box, &table, TRUE, TRUE, TRUE, TRUE); gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0); X = g_new0 (gfloat, POINTS); Y = g_new0 (gfloat, POINTS); for (i = 0; i < POINTS; i++) { X[i] = i; Y[i] = 100. * sin (i * 2 * G_PI / POINTS); } color.red = 0; color.green = 0; color.blue = 65535; graph = gtk_databox_bars_new (POINTS, X, Y, &color, 1); gtk_databox_graph_add (GTK_DATABOX (box), graph); gtk_databox_auto_rescale (GTK_DATABOX (box), 0.05); separator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0); box2 = gtk_vbox_new (FALSE, 10); gtk_container_set_border_width (GTK_CONTAINER (box2), 10); gtk_box_pack_end (GTK_BOX (box1), box2, FALSE, TRUE, 0); close_button = gtk_button_new_with_label ("close"); g_signal_connect_swapped (GTK_OBJECT (close_button), "clicked", G_CALLBACK (gtk_main_quit), GTK_OBJECT (box)); gtk_box_pack_start (GTK_BOX (box2), close_button, TRUE, TRUE, 0); gtk_widget_set_can_default(close_button, TRUE); for (i = 0; i < noEnableSets; ++i) { GtkWidget *vbox = gtk_vbox_new (FALSE, 10); GtkWidget *label = gtk_label_new (enableSets[i].title); GtkWidget *entry = gtk_entry_new (); GtkWidget *button = gtk_button_new_with_label ("Change"); gtk_box_pack_start (GTK_BOX (enable_box), vbox, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0); gtk_editable_set_editable (GTK_EDITABLE (entry), FALSE); g_signal_connect_swapped (button, "clicked", G_CALLBACK (update_enable), (gpointer) & (enableSets[i])); enableSets[i].box = GTK_DATABOX (box); enableSets[i].entry = GTK_ENTRY (entry); update_enable (&enableSets[i]); update_enable (&enableSets[i]); } gtk_widget_grab_default (close_button); gtk_widget_show_all (window); } gint main (gint argc, char *argv[]) { gtk_init (&argc, &argv); create_show_hide (); gtk_main (); return 0; }