]> Pileus Git - ~andy/gtk/blob - demos/gtk-demo/button_box.c
Deprecate widget flag: GTK_WIDGET_VISIBLE
[~andy/gtk] / demos / gtk-demo / button_box.c
1 /* Button Boxes
2  *
3  * The Button Box widgets are used to arrange buttons with padding.
4  */
5
6 #include <gtk/gtk.h>
7
8 static GtkWidget *
9 create_bbox (gint  horizontal,
10              char *title, 
11              gint  spacing,
12              gint  layout)
13 {
14   GtkWidget *frame;
15   GtkWidget *bbox;
16   GtkWidget *button;
17         
18   frame = gtk_frame_new (title);
19
20   if (horizontal)
21     bbox = gtk_hbutton_box_new ();
22   else
23     bbox = gtk_vbutton_box_new ();
24
25   gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
26   gtk_container_add (GTK_CONTAINER (frame), bbox);
27
28   gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
29   gtk_box_set_spacing (GTK_BOX (bbox), spacing);
30   
31   button = gtk_button_new_from_stock (GTK_STOCK_OK);
32   gtk_container_add (GTK_CONTAINER (bbox), button);
33   
34   button = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
35   gtk_container_add (GTK_CONTAINER (bbox), button);
36   
37   button = gtk_button_new_from_stock (GTK_STOCK_HELP);
38   gtk_container_add (GTK_CONTAINER (bbox), button);
39
40   return frame;
41 }
42
43 GtkWidget *
44 do_button_box (GtkWidget *do_widget)
45 {
46   static GtkWidget *window = NULL;
47   GtkWidget *main_vbox;
48   GtkWidget *vbox;
49   GtkWidget *hbox;
50   GtkWidget *frame_horz;
51   GtkWidget *frame_vert;
52         
53   if (!window)
54   {
55     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
56     gtk_window_set_screen (GTK_WINDOW (window),
57                            gtk_widget_get_screen (do_widget));
58     gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
59     
60     g_signal_connect (window, "destroy",
61                       G_CALLBACK (gtk_widget_destroyed),
62                       &window);
63     
64     gtk_container_set_border_width (GTK_CONTAINER (window), 10);
65
66     main_vbox = gtk_vbox_new (FALSE, 0);
67     gtk_container_add (GTK_CONTAINER (window), main_vbox);
68     
69     frame_horz = gtk_frame_new ("Horizontal Button Boxes");
70     gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
71     
72     vbox = gtk_vbox_new (FALSE, 0);
73     gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
74     gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
75
76     gtk_box_pack_start (GTK_BOX (vbox), 
77                         create_bbox (TRUE, "Spread", 40, GTK_BUTTONBOX_SPREAD),
78                         TRUE, TRUE, 0);
79
80     gtk_box_pack_start (GTK_BOX (vbox), 
81                         create_bbox (TRUE, "Edge", 40, GTK_BUTTONBOX_EDGE),
82                         TRUE, TRUE, 5);
83     
84     gtk_box_pack_start (GTK_BOX (vbox), 
85                         create_bbox (TRUE, "Start", 40, GTK_BUTTONBOX_START),
86                         TRUE, TRUE, 5);
87     
88     gtk_box_pack_start (GTK_BOX (vbox), 
89                         create_bbox (TRUE, "End", 40, GTK_BUTTONBOX_END),
90                         TRUE, TRUE, 5);
91
92     frame_vert = gtk_frame_new ("Vertical Button Boxes");
93     gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
94     
95     hbox = gtk_hbox_new (FALSE, 0);
96     gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
97     gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
98
99     gtk_box_pack_start (GTK_BOX (hbox), 
100                         create_bbox (FALSE, "Spread", 30, GTK_BUTTONBOX_SPREAD),
101                         TRUE, TRUE, 0);
102
103     gtk_box_pack_start (GTK_BOX (hbox), 
104                         create_bbox (FALSE, "Edge", 30, GTK_BUTTONBOX_EDGE),
105                         TRUE, TRUE, 5);
106
107     gtk_box_pack_start (GTK_BOX (hbox), 
108                         create_bbox (FALSE, "Start", 30, GTK_BUTTONBOX_START),
109                         TRUE, TRUE, 5);
110
111     gtk_box_pack_start (GTK_BOX (hbox), 
112                         create_bbox (FALSE, "End", 30, GTK_BUTTONBOX_END),
113                         TRUE, TRUE, 5);
114   }
115
116   if (!gtk_widget_get_visible (window))
117     {
118       gtk_widget_show_all (window);
119     }
120   else
121     {    
122       gtk_widget_destroy (window);
123       window = NULL;
124     }
125
126   return window;
127 }