* src/hildon-app-menu.h * src/hildon-app-menu.c * examples/hildon-app-menu-example...
[hildon] / examples / hildon-app-menu-example.c
1 /*
2  * This file is a part of hildon examples
3  *
4  * Copyright (C) 2008 Nokia Corporation, all rights reserved.
5  *
6  * Author: Karl Lattimer <karl.lattimer@nokia.com>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public License
10  * as published by the Free Software Foundation; version 2.1 of
11  * the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21  * 02110-1301 USA
22  *
23  */
24
25 #include                                        <gtk/gtk.h>
26 #include                                        <hildon-app-menu.h>
27
28 static void
29 menu_button_clicked                             (GtkButton *button,
30                                                  GtkLabel *label)
31 {
32     const char *buttontext = gtk_button_get_label (button);
33     char *text = g_strdup_printf("Last button clicked:\n%s", buttontext);
34     gtk_label_set_text (label, text);
35     g_free (text);
36 }
37
38 static HildonAppMenu *
39 create_menu                                     (GtkWidget *label)
40 {
41     GtkWidget *button;
42     GtkWidget *group;
43     HildonAppMenu *menu = HILDON_APP_MENU (hildon_app_menu_new ());
44
45     /* Options */
46     button = gtk_button_new_with_label ("Menu command one");
47     g_signal_connect (button, "clicked", G_CALLBACK (menu_button_clicked), label);
48     hildon_app_menu_append (menu, GTK_BUTTON (button));
49
50     button = gtk_button_new_with_label ("Menu command two");
51     g_signal_connect (button, "clicked", G_CALLBACK (menu_button_clicked), label);
52     hildon_app_menu_append (menu, GTK_BUTTON (button));
53
54     button = gtk_button_new_with_label ("Menu command three");
55     g_signal_connect (button, "clicked", G_CALLBACK (menu_button_clicked), label);
56     hildon_app_menu_append (menu, GTK_BUTTON (button));
57
58     button = gtk_button_new_with_label ("Menu command four");
59     g_signal_connect (button, "clicked", G_CALLBACK (menu_button_clicked), label);
60     hildon_app_menu_append (menu, GTK_BUTTON (button));
61
62     button = gtk_button_new_with_label ("Menu command five");
63     g_signal_connect (button, "clicked", G_CALLBACK (menu_button_clicked), label);
64     hildon_app_menu_append (menu, GTK_BUTTON (button));
65
66     /* Filters */
67     button = gtk_toggle_button_new_with_label ("filter one");
68     g_signal_connect (button, "clicked", G_CALLBACK (menu_button_clicked), label);
69     hildon_app_menu_add_filter (menu, GTK_BUTTON (button), NULL);
70
71     button = gtk_radio_button_new_with_label (NULL, "filter two");
72     g_signal_connect (button, "clicked", G_CALLBACK (menu_button_clicked), label);
73     group = hildon_app_menu_add_filter (menu, GTK_BUTTON (button), NULL);
74     gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE);
75
76     button = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (button), "filter three");
77     g_signal_connect (button, "clicked", G_CALLBACK (menu_button_clicked), label);
78     hildon_app_menu_add_filter (menu, GTK_BUTTON (button), group);
79     gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE);
80
81     gtk_container_set_border_width (GTK_CONTAINER (menu), 30);
82
83     return menu;
84 }
85
86 static void
87 button_clicked                                  (GtkButton *button,
88                                                  HildonAppMenu *menu)
89 {
90     gtk_widget_show (menu);
91 }
92
93 static void
94 close_app                                       (GtkWidget *widget,
95                                                  GdkEvent  *event,
96                                                  GtkWidget *menu)
97 {
98     gtk_widget_destroy (GTK_WIDGET (menu));
99     gtk_main_quit ();
100 }
101
102 int
103 main                                            (int argc,
104                                                  char **argv)
105 {
106     GtkWidget *win;
107     GtkWidget *button;
108     GtkWidget *label;
109     GtkWidget *label2;
110     GtkBox *vbox;
111     HildonAppMenu *menu;
112
113     gtk_init (&argc, &argv);
114
115     gtk_rc_parse_string ("style \"default\" {\n"
116                          "bg[NORMAL] = \"#505050\""
117                          "}\n"
118                          "class \"HildonAppMenu\" style \"default\"\n");
119
120     button = gtk_button_new_with_label ("Press me");
121     label = gtk_label_new ("This is an example of the\nHildonAppMenu widget");
122     label2 = gtk_label_new ("No button has been clicked");
123     vbox = GTK_BOX (gtk_vbox_new (FALSE, 10));
124     win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
125
126     menu = create_menu (label2);
127
128     gtk_box_pack_start (vbox, label, TRUE, TRUE, 0);
129     gtk_box_pack_start (vbox, button, TRUE, TRUE, 0);
130     gtk_box_pack_start (vbox, label2, TRUE, TRUE, 0);
131
132     gtk_container_set_border_width (GTK_CONTAINER (win), 20);
133     gtk_container_add (GTK_CONTAINER (win), GTK_WIDGET (vbox));
134
135     g_signal_connect (button, "clicked", G_CALLBACK(button_clicked), menu);
136     g_signal_connect (win, "delete_event", G_CALLBACK(close_app), menu);
137
138     gtk_widget_show_all (win);
139
140     gtk_main ();
141
142     return 0;
143 }