2 #include "yelp-location-entry.h"
13 YelpLocationEntry
*entry
;
14 GtkListStore
*event_list
;
17 loading_callback (gpointer data
)
19 GtkTreeRowReference
*row
= (GtkTreeRowReference
*) data
;
20 GtkTreePath
*path
= gtk_tree_row_reference_get_path (row
);
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
,
33 gtk_tree_path_free (path
);
34 gtk_tree_row_reference_free (row
);
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
);
47 search_clicked (GtkToggleButton
*button
, gpointer user_data
)
49 YelpLocationEntry
*entry
= YELP_LOCATION_ENTRY (user_data
);
50 yelp_location_entry_start_search (entry
);
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
);
59 gchar
*uri
= NULL
, *icon
, *title
, *desc
;
60 gboolean loading
= FALSE
;
62 if (g_str_equal (label
, "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";
92 cont
= gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model
), &iter
);
95 gtk_tree_model_get (GTK_TREE_MODEL (model
), &iter
,
98 if (iter_uri
&& g_str_equal (uri
, iter_uri
))
106 cont
= gtk_tree_model_iter_next (GTK_TREE_MODEL (model
), &iter
);
112 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model
), &first
);
113 gtk_list_store_move_before (model
, &iter
, &first
);
117 gtk_list_store_prepend (model
, &iter
);
120 title
= g_strconcat (label
, " Help", NULL
);
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
,
136 COL_FLAGS
, YELP_LOCATION_ENTRY_CAN_BOOKMARK
| (loading
? YELP_LOCATION_ENTRY_IS_LOADING
: 0),
141 gtk_combo_box_set_active_iter (GTK_COMBO_BOX (entry
), &iter
);
146 location_selected_cb (GtkEntry
*entry
, gpointer user_data
)
149 GtkTreeIter iter
, first
;
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
,
163 gtk_list_store_prepend (event_list
, &iter
);
164 gtk_list_store_set (event_list
, &iter
,
173 search_activated_cb (GtkEntry
*entry
, gchar
*text
, gpointer user_data
)
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
)) {
183 gtk_tree_model_get (model
, &iter
,
187 if (g_str_equal (uri
, "search:"))
188 gtk_tree_model_get (model
, &iter
,
192 gtk_tree_model_get (model
, &iter
,
193 COL_TITLE
, &curtitle
,
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",
210 gtk_combo_box_set_active_iter (GTK_COMBO_BOX (entry
), &iter
);
215 main (int argc
, char **argv
)
217 GtkWidget
*window
, *vbox
, *scroll
, *list
, *hbox
, *button
;
218 GtkTreeViewColumn
*col
;
219 GtkCellRenderer
*cell
;
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
,
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
,
251 entry
= (YelpLocationEntry
*) yelp_location_entry_new_with_model (GTK_TREE_MODEL (model
),
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
,
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
,
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
);