]> Pileus Git - ~andy/gtk/blob - demos/gtk-demo/button_box.c
new function, turns off decorations for a window.
[~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_with_label ("OK");
32   gtk_container_add (GTK_CONTAINER (bbox), button);
33   
34   button = gtk_button_new_with_label ("Cancel");
35   gtk_container_add (GTK_CONTAINER (bbox), button);
36   
37   button = gtk_button_new_with_label ("Help");
38   gtk_container_add (GTK_CONTAINER (bbox), button);
39
40   return frame;
41 }
42
43 GtkWidget *
44 do_button_box (void)
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_title (GTK_WINDOW (window), "Button Boxes");
57     
58     gtk_signal_connect (GTK_OBJECT (window), "destroy",
59                         GTK_SIGNAL_FUNC(gtk_widget_destroyed),
60                         &window);
61     
62     gtk_container_set_border_width (GTK_CONTAINER (window), 10);
63
64     main_vbox = gtk_vbox_new (FALSE, 0);
65     gtk_container_add (GTK_CONTAINER (window), main_vbox);
66     
67     frame_horz = gtk_frame_new ("Horizontal Button Boxes");
68     gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
69     
70     vbox = gtk_vbox_new (FALSE, 0);
71     gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
72     gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
73
74     gtk_box_pack_start (GTK_BOX (vbox), 
75            create_bbox (TRUE, "Spread", 40, GTK_BUTTONBOX_SPREAD),
76                         TRUE, TRUE, 0);
77
78     gtk_box_pack_start (GTK_BOX (vbox), 
79            create_bbox (TRUE, "Edge", 40, GTK_BUTTONBOX_EDGE),
80                         TRUE, TRUE, 5);
81
82     gtk_box_pack_start (GTK_BOX (vbox), 
83            create_bbox (TRUE, "Start", 40, GTK_BUTTONBOX_START),
84                         TRUE, TRUE, 5);
85
86     gtk_box_pack_start (GTK_BOX (vbox), 
87            create_bbox (TRUE, "End", 40, GTK_BUTTONBOX_END),
88                         TRUE, TRUE, 5);
89
90     frame_vert = gtk_frame_new ("Vertical Button Boxes");
91     gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
92     
93     hbox = gtk_hbox_new (FALSE, 0);
94     gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
95     gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
96
97     gtk_box_pack_start (GTK_BOX (hbox), 
98            create_bbox (FALSE, "Spread", 30, GTK_BUTTONBOX_SPREAD),
99                         TRUE, TRUE, 0);
100
101     gtk_box_pack_start (GTK_BOX (hbox), 
102            create_bbox (FALSE, "Edge", 30, GTK_BUTTONBOX_EDGE),
103                         TRUE, TRUE, 5);
104
105     gtk_box_pack_start (GTK_BOX (hbox), 
106            create_bbox (FALSE, "Start", 30, GTK_BUTTONBOX_START),
107                         TRUE, TRUE, 5);
108
109     gtk_box_pack_start (GTK_BOX (hbox), 
110            create_bbox (FALSE, "End", 30, GTK_BUTTONBOX_END),
111                         TRUE, TRUE, 5);
112   }
113
114   if (!GTK_WIDGET_VISIBLE (window))
115     {
116       gtk_widget_show_all (window);
117     }
118   else
119     {    
120       gtk_widget_destroy (window);
121       window = NULL;
122     }
123
124   return window;
125 }
126