]> Pileus Git - ~andy/gtk/blob - demos/gtk-demo/pickers.c
gtk-demo: Use explicit resource:// urls in CSS
[~andy/gtk] / demos / gtk-demo / pickers.c
1 /* Pickers
2  *
3  * These widgets are mainly intended for use in preference dialogs.
4  * They allow to select colors, fonts, files, directories and applications.
5  */
6
7 #include <gtk/gtk.h>
8
9 GtkWidget *
10 do_pickers (GtkWidget *do_widget)
11 {
12   static GtkWidget *window = NULL;
13   GtkWidget *table, *label, *picker;
14
15   if (!window)
16   {
17     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
18     gtk_window_set_screen (GTK_WINDOW (window),
19                            gtk_widget_get_screen (do_widget));
20     gtk_window_set_title (GTK_WINDOW (window), "Pickers");
21
22     g_signal_connect (window, "destroy",
23                       G_CALLBACK (gtk_widget_destroyed),
24                       &window);
25
26     gtk_container_set_border_width (GTK_CONTAINER (window), 10);
27
28     table = gtk_grid_new ();
29     gtk_grid_set_row_spacing (GTK_GRID (table), 3);
30     gtk_grid_set_column_spacing (GTK_GRID (table), 10);
31     gtk_container_add (GTK_CONTAINER (window), table);
32
33     gtk_container_set_border_width (GTK_CONTAINER (table), 10);
34
35     label = gtk_label_new ("Color:");
36     gtk_widget_set_halign (label, GTK_ALIGN_START);
37     gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
38     gtk_widget_set_hexpand (label, TRUE);
39     picker = gtk_color_button_new ();
40     gtk_grid_attach (GTK_GRID (table), label, 0, 0, 1, 1);
41     gtk_grid_attach (GTK_GRID (table), picker, 1, 0, 1, 1);
42
43     label = gtk_label_new ("Font:");
44     gtk_widget_set_halign (label, GTK_ALIGN_START);
45     gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
46     gtk_widget_set_hexpand (label, TRUE);
47     picker = gtk_font_button_new ();
48     gtk_grid_attach (GTK_GRID (table), label, 0, 1, 1, 1);
49     gtk_grid_attach (GTK_GRID (table), picker, 1, 1, 1, 1);
50
51     label = gtk_label_new ("File:");
52     gtk_widget_set_halign (label, GTK_ALIGN_START);
53     gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
54     gtk_widget_set_hexpand (label, TRUE);
55     picker = gtk_file_chooser_button_new ("Pick a File",
56                                           GTK_FILE_CHOOSER_ACTION_OPEN);
57     gtk_grid_attach (GTK_GRID (table), label, 0, 2, 1, 1);
58     gtk_grid_attach (GTK_GRID (table), picker, 1, 2, 1, 1);
59
60     label = gtk_label_new ("Folder:");
61     gtk_widget_set_halign (label, GTK_ALIGN_START);
62     gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
63     picker = gtk_file_chooser_button_new ("Pick a Folder",
64                                           GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
65     gtk_grid_attach (GTK_GRID (table), label, 0, 3, 1, 1);
66     gtk_grid_attach (GTK_GRID (table), picker, 1, 3, 1, 1);
67
68     label = gtk_label_new ("Mail:");
69     gtk_widget_set_halign (label, GTK_ALIGN_START);
70     gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
71     gtk_widget_set_hexpand (label, TRUE);
72     picker = gtk_app_chooser_button_new ("x-scheme-handler/mailto");
73     gtk_app_chooser_button_set_show_dialog_item (GTK_APP_CHOOSER_BUTTON (picker), TRUE);
74     gtk_grid_attach (GTK_GRID (table), label, 0, 4, 1, 1);
75     gtk_grid_attach (GTK_GRID (table), picker, 1, 4, 1, 1);
76   }
77
78   if (!gtk_widget_get_visible (window))
79     {
80       gtk_widget_show_all (window);
81     }
82   else
83     {
84       gtk_widget_destroy (window);
85       window = NULL;
86     }
87
88   return window;
89 }