#include "tabs.h" #include GtkWidget * create_vertical_tab_group( ) { GtkWidget *tab_group; tab_group = gtk_vbox_new (FALSE, 0); g_object_set_data(G_OBJECT (tab_group), "ignore_toggled_signal", FALSE); g_object_set_data(G_OBJECT (tab_group), "selected_tab", NULL); return tab_group; } GtkWidget * add_tab( gchar * name, GtkWidget *tab_group ) { GtkWidget *tab; tab = gtk_toggle_button_new_with_label (name); gtk_box_pack_start (GTK_BOX (tab_group), tab, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (tab), "clicked", G_CALLBACK (select_tab), NULL); return tab; } void select_tab( GtkWidget *tab, gpointer data ) { GtkBox *tab_group; GtkBoxChild *child; GList *tabs; tab_group = GTK_BOX (gtk_widget_get_parent(tab)); /* check if the signal should be ignored */ if ((gboolean) g_object_get_data(G_OBJECT (tab_group), "ignore_toggled_signal") == TRUE) return; /* ignore the signal until the right tab is selected and other tabs are unselected */ g_object_set_data(G_OBJECT (tab_group), "ignore_toggled_signal", (gpointer) TRUE); tabs = tab_group->children; while (tabs) { child = tabs->data; /* if this tab should be selected, select it, otherwise unselect it */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (child->widget), child->widget == tab ? TRUE : FALSE); tabs = tabs->next; } /* do not ignore the signal anymore */ g_object_set_data(G_OBJECT (tab_group), "ignore_toggled_signal", FALSE); g_object_set_data(G_OBJECT (tab_group), "selected_tab", tab); } void remove_tab( GtkWidget *tab, gpointer data ) { gtk_widget_destroy (tab); } unsigned int get_number_of_tabs( GtkWidget *tab_group ) { GList *tabs; unsigned int num = 0; tabs = (GTK_BOX (tab_group))->children; while (tabs) { tabs = tabs->next; num++; } return num; }