Fix calls to deprecated APIs
[yelp.git] / tests / test-location-entry.c
blob0b4c85102dc9b69d1a0d37c6f3c9298fa86c48e3
1 #include <gtk/gtk.h>
2 #include "yelp-location-entry.h"
4 enum {
5 COL_TITLE,
6 COL_DESC,
7 COL_ICON,
8 COL_FLAGS,
9 COL_URI,
10 COL_TERMS
13 YelpLocationEntry *entry;
14 GtkListStore *event_list;
16 static gboolean
17 loading_callback (gpointer data)
19 GtkTreeRowReference *row = (GtkTreeRowReference *) data;
20 GtkTreePath *path = gtk_tree_row_reference_get_path (row);
21 GtkTreeModel *model;
22 GtkTreeIter iter;
24 model = gtk_tree_row_reference_get_model (row);
25 gtk_tree_model_get_iter (model, &iter, path);
27 gtk_list_store_set (GTK_LIST_STORE (model), &iter,
28 COL_TITLE, "Desktop Help",
29 COL_DESC, "Get help with your desktop",
30 COL_ICON, "gnome-main-menu",
31 COL_FLAGS, YELP_LOCATION_ENTRY_CAN_BOOKMARK,
32 -1);
33 gtk_tree_path_free (path);
34 gtk_tree_row_reference_free (row);
35 return FALSE;
38 static void
39 check_clicked (GtkToggleButton *button, gpointer user_data)
41 YelpLocationEntry *entry = YELP_LOCATION_ENTRY (user_data);
42 g_object_set (G_OBJECT (entry), "enable-search",
43 gtk_toggle_button_get_active (button), NULL);
46 static void
47 search_clicked (GtkToggleButton *button, gpointer user_data)
49 YelpLocationEntry *entry = YELP_LOCATION_ENTRY (user_data);
50 yelp_location_entry_start_search (entry);
53 static void
54 button_clicked (GtkButton *button, gpointer user_data)
56 GtkListStore *model = GTK_LIST_STORE (user_data);
57 const gchar *label = gtk_button_get_label (button);
58 GtkTreeIter iter;
59 gchar *uri = NULL, *icon, *title, *desc;
60 gboolean loading = FALSE;
62 if (g_str_equal (label, "Empathy"))
64 uri = "help:empathy";
65 icon = "empathy";
66 desc = "Send and receive messages";
68 else if (g_str_equal (label, "Calculator"))
70 uri = "help:gcalctool";
71 icon = "accessories-calculator";
72 desc = "Perform calculations";
74 else if (g_str_equal (label, "Terminal"))
76 uri = "help:gnome-terminal";
77 icon = "gnome-terminal";
78 desc = "Use the command line";
80 else if (g_str_equal (label, "Slow-loading document"))
82 uri = "help:gnumeric";
83 icon = NULL;
84 loading = TRUE;
85 desc = NULL;
88 if (uri)
90 gchar *iter_uri;
91 gboolean cont;
92 cont = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter);
93 while (cont)
95 gtk_tree_model_get (GTK_TREE_MODEL (model), &iter,
96 COL_URI, &iter_uri,
97 -1);
98 if (iter_uri && g_str_equal (uri, iter_uri))
100 g_free (iter_uri);
101 break;
103 else
105 g_free (iter_uri);
106 cont = gtk_tree_model_iter_next (GTK_TREE_MODEL (model), &iter);
109 if (cont)
111 GtkTreeIter first;
112 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &first);
113 gtk_list_store_move_before (model, &iter, &first);
115 else
117 gtk_list_store_prepend (model, &iter);
118 if (!loading)
120 title = g_strconcat (label, " Help", NULL);
122 else
124 GtkTreePath *path;
125 GtkTreeRowReference *row;
126 title = g_strdup ("Loading...");
127 path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &iter);
128 row = gtk_tree_row_reference_new (GTK_TREE_MODEL (model), path);
129 gtk_tree_path_free (path);
130 g_timeout_add_seconds (5, loading_callback, row);
132 gtk_list_store_set (model, &iter,
133 COL_TITLE, title,
134 COL_DESC, desc,
135 COL_ICON, icon,
136 COL_FLAGS, YELP_LOCATION_ENTRY_CAN_BOOKMARK | (loading ? YELP_LOCATION_ENTRY_IS_LOADING : 0),
137 COL_URI, uri,
138 -1);
139 g_free (title);
141 gtk_combo_box_set_active_iter (GTK_COMBO_BOX (entry), &iter);
145 static void
146 location_selected_cb (GtkEntry *entry, gpointer user_data)
148 GtkTreeModel *model;
149 GtkTreeIter iter, first;
150 gchar *title, *icon;
152 model = gtk_combo_box_get_model (GTK_COMBO_BOX (entry));
153 gtk_combo_box_get_active_iter (GTK_COMBO_BOX (entry), &iter);
154 gtk_tree_model_get_iter_first (model, &first);
156 gtk_list_store_move_before (GTK_LIST_STORE (model), &iter, &first);
158 gtk_tree_model_get (model, &iter,
159 COL_TITLE, &title,
160 COL_ICON, &icon,
161 -1);
163 gtk_list_store_prepend (event_list, &iter);
164 gtk_list_store_set (event_list, &iter,
165 0, icon,
166 1, title,
167 -1);
168 g_free (icon);
169 g_free (title);
172 static void
173 search_activated_cb (GtkEntry *entry, gchar *text, gpointer user_data)
175 GtkTreeModel *model;
176 GtkTreeIter iter;
177 gchar *curtitle = NULL;
179 model = gtk_combo_box_get_model (GTK_COMBO_BOX (entry));
181 if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter)) {
182 gchar *uri;
183 gtk_tree_model_get (model, &iter,
184 COL_URI, &uri,
185 -1);
186 if (uri) {
187 if (g_str_equal (uri, "search:"))
188 gtk_tree_model_get (model, &iter,
189 COL_DESC, &curtitle,
190 -1);
191 else
192 gtk_tree_model_get (model, &iter,
193 COL_TITLE, &curtitle,
194 -1);
195 g_free (uri);
199 if (curtitle == NULL)
200 curtitle = g_strdup ("in all documents");
202 gtk_list_store_prepend (GTK_LIST_STORE (model), &iter);
203 gtk_list_store_set (GTK_LIST_STORE (model), &iter,
204 COL_ICON, "folder-saved-search",
205 COL_TITLE, text,
206 COL_DESC, curtitle,
207 COL_FLAGS, 0,
208 COL_URI, "search:",
209 -1);
210 gtk_combo_box_set_active_iter (GTK_COMBO_BOX (entry), &iter);
211 g_free (curtitle);
215 main (int argc, char **argv)
217 GtkWidget *window, *vbox, *scroll, *list, *hbox, *button;
218 GtkTreeViewColumn *col;
219 GtkCellRenderer *cell;
220 GtkListStore *model;
221 GtkTreeIter iter;
223 gtk_init (&argc, &argv);
225 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
226 gtk_window_set_default_size (GTK_WINDOW (window), 450, 600);
227 gtk_container_set_border_width (GTK_CONTAINER (window), 6);
229 vbox = gtk_vbox_new (FALSE, 6);
230 gtk_container_add (GTK_CONTAINER (window), vbox);
232 model = gtk_list_store_new (6,
233 G_TYPE_STRING, /* title */
234 G_TYPE_STRING, /* desc */
235 G_TYPE_STRING, /* icon */
236 G_TYPE_INT, /* flags */
237 G_TYPE_STRING, /* uri */
238 G_TYPE_STRING /* search terms */
240 gtk_list_store_append (model, &iter);
241 gtk_list_store_set (model, &iter,
242 COL_FLAGS, YELP_LOCATION_ENTRY_IS_SEPARATOR,
243 -1);
244 gtk_list_store_append (model, &iter);
245 gtk_list_store_set (model, &iter,
246 COL_ICON, "system-search",
247 COL_TITLE, "Search...",
248 COL_FLAGS, YELP_LOCATION_ENTRY_IS_SEARCH,
249 -1);
251 entry = (YelpLocationEntry *) yelp_location_entry_new_with_model (GTK_TREE_MODEL (model),
252 COL_TITLE,
253 COL_DESC,
254 COL_ICON,
255 COL_FLAGS);
256 g_signal_connect (entry, "location-selected",
257 G_CALLBACK (location_selected_cb), NULL);
258 g_signal_connect (entry, "search-activated",
259 G_CALLBACK (search_activated_cb), NULL);
260 gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (entry), FALSE, FALSE, 0);
262 scroll = gtk_scrolled_window_new (NULL, NULL);
263 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
264 GTK_POLICY_AUTOMATIC,
265 GTK_POLICY_AUTOMATIC);
266 gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 0);
267 event_list = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
268 list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (event_list));
269 col = gtk_tree_view_column_new ();
270 gtk_tree_view_append_column (GTK_TREE_VIEW (list), col);
271 cell = gtk_cell_renderer_pixbuf_new ();
272 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (col), cell, FALSE);
273 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (col), cell,
274 "icon-name", 0,
275 NULL);
276 cell = gtk_cell_renderer_text_new ();
277 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (col), cell, TRUE);
278 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (col), cell,
279 "text", 1,
280 NULL);
281 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (list), FALSE);
282 gtk_container_add (GTK_CONTAINER (scroll), list);
284 hbox = gtk_hbox_new (TRUE, 6);
285 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
287 button = gtk_check_button_new_with_label ("Enable search");
288 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
289 g_signal_connect (button, "clicked",
290 G_CALLBACK (check_clicked), entry);
291 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
293 button = gtk_button_new_with_label ("Search");
294 g_signal_connect (button, "clicked",
295 G_CALLBACK (search_clicked), entry);
296 gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 0);
298 hbox = gtk_hbox_new (TRUE, 6);
299 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
301 button = gtk_button_new_with_label ("Empathy");
302 g_signal_connect (button, "clicked",
303 G_CALLBACK (button_clicked), model);
304 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
306 button = gtk_button_new_with_label ("Calculator");
307 g_signal_connect (button, "clicked",
308 G_CALLBACK (button_clicked), model);
309 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
311 button = gtk_button_new_with_label ("Terminal");
312 g_signal_connect (button, "clicked",
313 G_CALLBACK (button_clicked), model);
314 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
316 button = gtk_button_new_with_label ("Slow-loading document");
317 g_signal_connect (button, "clicked",
318 G_CALLBACK (button_clicked), model);
319 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
321 gtk_widget_show_all (GTK_WIDGET (window));
322 gtk_widget_grab_focus (list);
324 gtk_main ();