On Wed, 2007-10-10 at 00:55 +0200, Marko Anastasov wrote:
> On Mon, 2007-10-08 at 22:34 +0200, Marko Anastasov wrote:
> > Hi,
> >
> > I'm sending an implementation of tag cloud
>
>
> Here's also a simple test using the API.
Sorry, I forgot to attach the file.
/* -*- 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;
}
___
tracker-list mailing list
tracker-list@gnome.org
http://mail.gnome.org/mailman/listinfo/tracker-list