]> Pileus Git - ~andy/gtk/blob - demos/gtk-demo/infobar.c
11a5cd04b7480d372ed26d97894e31c29bb167b2
[~andy/gtk] / demos / gtk-demo / infobar.c
1 /* Info bar
2  *
3  * Info bar widgets are used to report important messages to the user.
4  */
5
6 #include <gtk/gtk.h>
7
8 static GtkWidget *window = NULL;
9
10 static void
11 on_bar_response (GtkInfoBar *info_bar,
12                  gint        response_id,
13                  gpointer    user_data)
14 {
15   GtkWidget *dialog;
16
17   dialog = gtk_message_dialog_new (GTK_WINDOW (window),
18                                    GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
19                                    GTK_MESSAGE_INFO,
20                                    GTK_BUTTONS_OK,
21                                    "You clicked a button on an info bar");
22   gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
23                                             "Your response has id %d", response_id);
24   gtk_dialog_run (GTK_DIALOG (dialog));
25   gtk_widget_destroy (dialog);
26 }
27
28 GtkWidget *
29 do_infobar (GtkWidget *do_widget)
30 {
31   GtkWidget *frame;
32   GtkWidget *bar;
33   GtkWidget *vbox;
34   GtkWidget *vbox2;
35   GtkWidget *label;
36
37   if (!window)
38     {
39       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
40       gtk_window_set_screen (GTK_WINDOW (window),
41                              gtk_widget_get_screen (do_widget));
42       gtk_window_set_title (GTK_WINDOW (window), "Info Bars");
43
44       g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window);
45       gtk_container_set_border_width (GTK_CONTAINER (window), 8);
46
47       vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, FALSE, 0);
48       gtk_container_add (GTK_CONTAINER (window), vbox);
49
50       bar = gtk_info_bar_new ();
51       gtk_box_pack_start (GTK_BOX (vbox), bar, FALSE, FALSE, 0);
52       gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_INFO);
53       label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_INFO");
54       gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0);
55
56       bar = gtk_info_bar_new ();
57       gtk_box_pack_start (GTK_BOX (vbox), bar, FALSE, FALSE, 0);
58       gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_WARNING);
59       label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_WARNING");
60       gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0);
61
62       bar = gtk_info_bar_new_with_buttons (GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
63       g_signal_connect (bar, "response", G_CALLBACK (on_bar_response), window);
64       gtk_box_pack_start (GTK_BOX (vbox), bar, FALSE, FALSE, 0);
65       gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_QUESTION);
66       label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_QUESTION");
67       gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0);
68
69       bar = gtk_info_bar_new ();
70       gtk_box_pack_start (GTK_BOX (vbox), bar, FALSE, FALSE, 0);
71       gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_ERROR);
72       label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_ERROR");
73       gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0);
74
75       bar = gtk_info_bar_new ();
76       gtk_box_pack_start (GTK_BOX (vbox), bar, FALSE, FALSE, 0);
77       gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_OTHER);
78       label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_OTHER");
79       gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0);
80
81       frame = gtk_frame_new ("Info bars");
82       gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 8);
83
84       vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, FALSE, 8);
85       gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
86       gtk_container_add (GTK_CONTAINER (frame), vbox2);
87
88       /* Standard message dialog */
89       label = gtk_label_new ("An example of different info bars");
90       gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0);
91     }
92
93   if (!gtk_widget_get_visible (window))
94     {
95       gtk_widget_show_all (window);
96     }
97   else
98     {
99       gtk_widget_destroy (window);
100       window = NULL;
101     }
102
103   return window;
104 }