/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ #include #include // gcc -g -Wall `pkg-config --libs --cflags libtracker-gtk` -o tracker-cloud tracker-cloud.c typedef struct { TrackerTagCloudModel *model1; TrackerTagCloudModel *model2; gint next_model; GHashTable *hash; } AppData; static void print_hash (const gchar *key, const int *count, gpointer no_data) { printf ("%s -> %d\n", key, *count); } static AppData* app_data_new () { AppData *app_data; app_data = g_new0 (AppData, 1); /* prepare model1 */ app_data->model1 = tracker_tag_cloud_model_new (10, 18); tracker_tag_cloud_model_add_tag (app_data->model1, "tracker"); tracker_tag_cloud_model_add_tag (app_data->model1, "tracker"); tracker_tag_cloud_model_add_tag (app_data->model1, "tracker"); tracker_tag_cloud_model_add_tag (app_data->model1, "tracker"); tracker_tag_cloud_model_add_tag (app_data->model1, "metadata"); tracker_tag_cloud_model_add_tag (app_data->model1, "metadata"); tracker_tag_cloud_model_add_tag (app_data->model1, "example"); /* print tags and their font sizes for fun */ app_data->hash = tracker_tag_cloud_model_get_font_sizes (app_data->model1); g_hash_table_foreach (app_data->hash, (GHFunc) print_hash, NULL); /* prepare model2 */ app_data->model2 = tracker_tag_cloud_model_new (14, 22); tracker_tag_cloud_model_add_tag (app_data->model2, "cloud"); tracker_tag_cloud_model_add_tag (app_data->model2, "cloud"); tracker_tag_cloud_model_add_tag (app_data->model2, "cloud"); tracker_tag_cloud_model_add_tag (app_data->model2, "cloud"); tracker_tag_cloud_model_add_tag (app_data->model2, "sun"); tracker_tag_cloud_model_add_tag (app_data->model2, "sun"); tracker_tag_cloud_model_add_tag (app_data->model2, "ocean"); /* start with model 1 */ app_data->next_model = 2; return app_data; } static void app_data_free (AppData *data) { g_object_unref (G_OBJECT (data->model1)); g_object_unref (G_OBJECT (data->model2)); g_hash_table_destroy (data->hash); g_free (data); } static void window_destroy_cb (GtkWidget *window, AppData *data) { app_data_free (data); gtk_main_quit (); } static void tag_clicked_cb (TrackerTagCloud *cloud, gchar *tag, AppData *data) { printf ("clicked on %s\n", tag); if (data->next_model == 1) { g_object_set (TRACKER_TAG_CLOUD (cloud), "underline_tags", FALSE, NULL); tracker_tag_cloud_set_model (cloud, data->model1); data->next_model = 2; } else { g_object_set (TRACKER_TAG_CLOUD (cloud), "underline_tags", TRUE, NULL); tracker_tag_cloud_set_model (cloud, data->model2); data->next_model = 1; } } int main (int argc, char ** argv) { GtkWidget *window, *tag_cloud; AppData *app_data = NULL; /* initialize GTK+ */ gtk_set_locale (); gtk_init (&argc, &argv); /* our application data */ app_data = app_data_new (); /* root GTK+ window */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size (GTK_WINDOW (window), 200, 150); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (window_destroy_cb), app_data); /* tag cloud*/ tag_cloud = tracker_tag_cloud_new (); tracker_tag_cloud_set_model (TRACKER_TAG_CLOUD (tag_cloud), app_data->model1); gtk_widget_show (tag_cloud); gtk_container_add (GTK_CONTAINER (window), tag_cloud); g_signal_connect (tag_cloud, "clicked", (GtkSignalFunc) tag_clicked_cb, app_data); /* show all and get in the loop */ gtk_widget_show_all (window); gtk_main (); return 0; }