Re: [Tracker] Tag cloud widget

2007-10-09 Thread Marko Anastasov
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


Re: [Tracker] Tag cloud widget

2007-10-09 Thread Marko Anastasov
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.
The screenshot of it can be seen at

http://marko.anastasov.name/images/Screenshot-tracker-cloud.png

Marko

___
tracker-list mailing list
tracker-list@gnome.org
http://mail.gnome.org/mailman/listinfo/tracker-list