gnome-control-center/shell/test-notebook.c
Bastien Nocera 74aa98b7c8 shell: Add animated notebook
Powered by gtk-clutter.
2012-05-09 16:50:21 +01:00

92 lines
2.6 KiB
C

#include <stdlib.h>
#include "cc-notebook.h"
#define NUM_PAGES 5
static GHashTable *pages;
static GtkWidget *notebook;
static void
goto_page (GtkButton *button,
gpointer user_data)
{
int target = GPOINTER_TO_INT (user_data);
GtkWidget *widget;
if (target < 1)
target = NUM_PAGES;
else if (target > NUM_PAGES)
target = 1;
widget = g_hash_table_lookup (pages, GINT_TO_POINTER (target));
cc_notebook_select_page (CC_NOTEBOOK (notebook), widget);
}
static GtkWidget *
create_page_contents (int page_num)
{
GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
char *text = g_strdup_printf ("Page number %d", page_num);
GtkWidget *hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
GtkWidget *back_button = gtk_button_new_with_label ("");
gtk_widget_set_halign (back_button, GTK_ALIGN_START);
gtk_box_pack_start (GTK_BOX (hbox), back_button, FALSE, FALSE, 0);
g_signal_connect (G_OBJECT (back_button), "clicked",
G_CALLBACK (goto_page), GINT_TO_POINTER (page_num - 1));
GtkWidget *fwd_button = gtk_button_new_with_label ("");
gtk_widget_set_halign (fwd_button, GTK_ALIGN_END);
gtk_box_pack_end (GTK_BOX (hbox), fwd_button, FALSE, FALSE, 0);
g_signal_connect (G_OBJECT (fwd_button), "clicked",
G_CALLBACK (goto_page), GINT_TO_POINTER (page_num + 1));
GtkWidget *label = gtk_label_new (text);
gtk_box_pack_end (GTK_BOX (vbox), label, TRUE, TRUE, 0);
gtk_widget_show_all (vbox);
g_object_set_data_full (G_OBJECT (vbox), "display-name", text, g_free);
g_hash_table_insert (pages, GINT_TO_POINTER (page_num), vbox);
return vbox;
}
static void
on_page_change (CcNotebook *notebook)
{
g_print (G_STRLOC ": Currently selected page: %s\n",
(char *) g_object_get_data (G_OBJECT (cc_notebook_get_selected_page (notebook)), "display-name"));
}
int
main (int argc, char *argv[])
{
guint i;
if (gtk_clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
return EXIT_FAILURE;
GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show (window);
notebook = cc_notebook_new ();
gtk_container_add (GTK_CONTAINER (window), notebook);
g_signal_connect (notebook, "notify::current-page", G_CALLBACK (on_page_change), NULL);
pages = g_hash_table_new (g_direct_hash, g_direct_equal);
for (i = 1; i <= NUM_PAGES; i++) {
GtkWidget *page = create_page_contents (i);
cc_notebook_add_page ((CcNotebook *) notebook, page);
}
gtk_widget_show_all (window);
gtk_main ();
return EXIT_SUCCESS;
}