[gthumb/ext] Added ability to set the rating in the metadata dialog.



commit fc4e043cbc0dd6980baf81014f8b7f7ac4e4440a
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Sat Jan 2 00:24:04 2010 +0100

    Added ability to set the rating in the metadata dialog.

 extensions/comments/gth-comment.c                  |   32 ++++++++++++++++++-
 extensions/comments/gth-comment.h                  |    3 ++
 .../comments/gth-metadata-provider-comment.c       |   26 ++++++++++++++-
 extensions/edit_metadata/gth-edit-comment-page.c   |   34 ++++++++++++++++++++
 4 files changed, 92 insertions(+), 3 deletions(-)
---
diff --git a/extensions/comments/gth-comment.c b/extensions/comments/gth-comment.c
index 10b10a7..26a5a59 100644
--- a/extensions/comments/gth-comment.c
+++ b/extensions/comments/gth-comment.c
@@ -33,7 +33,8 @@
 struct _GthCommentPrivate { /* All strings in utf8 format. */
 	char       *caption;
 	char       *note;
-	char       *place;           
+	char       *place;
+	int         rating;
 	GPtrArray  *categories;
 	GDate      *date;
 	GthTime    *time_of_day;	
@@ -96,6 +97,7 @@ gth_comment_instance_init (GthComment *self)
 	self->priv->caption = NULL;
 	self->priv->note = NULL;
 	self->priv->place = NULL;
+	self->priv->rating = 0;
 	self->priv->categories = g_ptr_array_new ();
 	self->priv->date = g_date_new ();
 	self->priv->time_of_day = gth_time_new ();
@@ -138,6 +140,12 @@ gth_comment_real_create_element (DomDomizable *base,
 	dom_element_append_child (element, dom_document_create_element_with_text (doc, self->priv->note, "note", NULL));
 	dom_element_append_child (element, dom_document_create_element_with_text (doc, self->priv->place, "place", NULL));
 	
+	if (self->priv->rating > 0) {
+		value = g_strdup_printf ("%d", self->priv->rating);
+		dom_element_append_child (element, dom_document_create_element (doc, "rating", "value", value, NULL));
+		g_free (value);
+	}
+
 	value = gth_comment_get_time_as_exif_format (self);
 	if (value != NULL) {
 		dom_element_append_child (element, dom_document_create_element (doc,  "time", "value", value, NULL));
@@ -200,6 +208,12 @@ gth_comment_real_load_from_element (DomDomizable *base,
 				gth_comment_set_place (self, dom_element_get_inner_text (node));
 			else if (g_strcmp0 (node->tag_name, "time") == 0) 
 				gth_comment_set_time_from_exif_format (self, dom_element_get_attribute (node, "value"));
+			else if (g_strcmp0 (node->tag_name, "rating") == 0) {
+				int v;
+
+				sscanf (dom_element_get_attribute (node, "value"), "%d", &v);
+				gth_comment_set_rating (self, v);
+			}
 			else if (g_strcmp0 (node->tag_name, "categories") == 0) {
 				DomElement *child;
 				
@@ -367,6 +381,7 @@ gth_comment_dup (GthComment *self)
 	gth_comment_set_caption (comment, gth_comment_get_caption (self));
 	gth_comment_set_note (comment, gth_comment_get_note (self));
 	gth_comment_set_place (comment, gth_comment_get_place (self));
+	gth_comment_set_rating (comment, gth_comment_get_rating (self));
 	time = gth_comment_get_time_as_exif_format (self);
 	gth_comment_set_time_from_exif_format (comment, time);
 	for (i = 0; i < self->priv->categories->len; i++)
@@ -424,6 +439,14 @@ gth_comment_set_place (GthComment *comment,
 
 
 void
+gth_comment_set_rating (GthComment *comment,
+		        int         value)
+{
+	comment->priv->rating = value;
+}
+
+
+void
 gth_comment_clear_categories (GthComment *self)
 {
 	g_ptr_array_foreach (self->priv->categories, (GFunc) g_free, NULL);
@@ -507,6 +530,13 @@ gth_comment_get_place (GthComment *comment)
 }
 
 
+int
+gth_comment_get_rating (GthComment *comment)
+{
+	return comment->priv->rating;
+}
+
+
 GPtrArray *
 gth_comment_get_categories (GthComment *comment)
 {
diff --git a/extensions/comments/gth-comment.h b/extensions/comments/gth-comment.h
index f73cfa6..93ef828 100644
--- a/extensions/comments/gth-comment.h
+++ b/extensions/comments/gth-comment.h
@@ -63,6 +63,8 @@ void              gth_comment_set_note                   (GthComment  *comment,
 							  const char  *value);
 void              gth_comment_set_place                  (GthComment  *comment,
 							  const char  *value);
+void              gth_comment_set_rating                 (GthComment  *comment,
+							  int          value);
 void              gth_comment_clear_categories           (GthComment  *comment);							  
 void              gth_comment_add_category               (GthComment  *comment,
 							  const char  *value);
@@ -74,6 +76,7 @@ void              gth_comment_set_time_from_time_t       (GthComment  *comment,
 const char *      gth_comment_get_caption                (GthComment  *comment);
 const char *      gth_comment_get_note                   (GthComment  *comment);
 const char *      gth_comment_get_place                  (GthComment  *comment);
+int               gth_comment_get_rating                 (GthComment  *comment);
 GPtrArray *       gth_comment_get_categories             (GthComment  *comment);
 GDate *           gth_comment_get_date                   (GthComment  *comment);
 GthTime *         gth_comment_get_time_of_day            (GthComment  *comment);
diff --git a/extensions/comments/gth-metadata-provider-comment.c b/extensions/comments/gth-metadata-provider-comment.c
index df9d8d9..8fe6893 100644
--- a/extensions/comments/gth-metadata-provider-comment.c
+++ b/extensions/comments/gth-metadata-provider-comment.c
@@ -40,7 +40,8 @@ gth_metadata_provider_comment_can_read (GthMetadataProvider  *self,
 						 "general::title,"
 						 "general::description,"
 						 "general::location,"
-						 "general::tags",
+						 "general::tags,"
+						 "general::rating",
 					         attribute_v);
 }
 
@@ -55,7 +56,8 @@ gth_metadata_provider_comment_can_write (GthMetadataProvider  *self,
 						 "general::title,"
 						 "general::description,"
 						 "general::location,"
-						 "general::tags",
+						 "general::tags,"
+						 "general::rating",
 					         attribute_v);
 }
 
@@ -114,6 +116,16 @@ gth_metadata_provider_comment_read (GthMetadataProvider *self,
 		set_attribute_from_string (file_data->info, "general::location", value, NULL);
 	}
 
+	if (gth_comment_get_rating (comment) > 0) {
+		char *v;
+
+		g_file_info_set_attribute_int32 (file_data->info, "comment::rating", gth_comment_get_rating (comment));
+		v = g_strdup_printf ("%d", gth_comment_get_rating (comment));
+		set_attribute_from_string (file_data->info, "general::rating", v, NULL);
+
+		g_free (v);
+	}
+
 	categories = gth_comment_get_categories (comment);
 	if (categories->len > 0) {
 		GObject *value;
@@ -213,6 +225,16 @@ gth_metadata_provider_comment_write (GthMetadataProvider *self,
 			gth_comment_add_category (comment, (char *) scan->data);
 	}
 
+	/* rating */
+
+	metadata = (GthMetadata *) g_file_info_get_attribute_object (file_data->info, "general::rating");
+	if (metadata != NULL) {
+		int rating;
+
+		sscanf (gth_metadata_get_raw (metadata), "%d", &rating);
+		gth_comment_set_rating (comment, rating);
+	}
+
 	data = gth_comment_to_data (comment, &length);
 	comment_file = gth_comment_get_comment_file (file_data->file);
 	comment_folder = g_file_get_parent (comment_file);
diff --git a/extensions/edit_metadata/gth-edit-comment-page.c b/extensions/edit_metadata/gth-edit-comment-page.c
index c2c5791..90a8342 100644
--- a/extensions/edit_metadata/gth-edit-comment-page.c
+++ b/extensions/edit_metadata/gth-edit-comment-page.c
@@ -117,6 +117,16 @@ gth_edit_comment_page_real_set_file (GthEditMetadataPage *base,
 	else
 		gth_tags_entry_set_text (GTH_TAGS_ENTRY (self->priv->tags_entry), "");
 
+	metadata = (GthMetadata *) g_file_info_get_attribute_object (file_data->info, "general::rating");
+	if (metadata != NULL) {
+		int v;
+
+		sscanf (gth_metadata_get_raw (metadata), "%d", &v);
+		gtk_spin_button_set_value (GTK_SPIN_BUTTON (GET_WIDGET ("rating_spinbutton")), v);
+	}
+	else
+		gtk_spin_button_set_value (GTK_SPIN_BUTTON (GET_WIDGET ("rating_spinbutton")), 0);
+
 	gtk_widget_grab_focus (GET_WIDGET ("note_text"));
 
 	no_provider = TRUE;
@@ -236,6 +246,24 @@ gth_edit_comment_page_real_update_info (GthEditMetadataPage *base,
 	string_list = gth_string_list_new (tags);
 	g_file_info_set_attribute_object (info, "general::tags", G_OBJECT (string_list));
 
+	/* rating */
+
+	if (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (GET_WIDGET ("rating_spinbutton"))) > 0) {
+		char *s;
+
+		s = g_strdup_printf ("%d", gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (GET_WIDGET ("rating_spinbutton"))));
+		metadata = g_object_new (GTH_TYPE_METADATA,
+					 "id", "general::rating",
+					 "raw", s,
+					 "formatted", s,
+					 NULL);
+		g_file_info_set_attribute_object (info, "general::rating", G_OBJECT (metadata));
+		g_object_unref (metadata);
+		g_free (s);
+	}
+	else
+		g_file_info_remove_attribute (info, "general::rating");
+
 	g_free (exif_date);
 	g_object_unref (string_list);
 	g_strfreev (tagv);
@@ -288,6 +316,7 @@ get_date_from_option (GthEditCommentPage *self,
 	switch (option) {
 	case NO_DATE:
 		return g_strdup ("");
+
 	case FOLLOWING_DATE:
 		date_time = gth_datetime_new ();
 		gth_time_selector_get_value (GTH_TIME_SELECTOR (self->priv->date_selector), date_time);
@@ -296,9 +325,11 @@ get_date_from_option (GthEditCommentPage *self,
 		g_free (exif_date);
 		gth_datetime_free (date_time);
 		break;
+
 	case CURRENT_DATE:
 		g_get_current_time (&timeval);
 		break;
+
 	case PHOTO_DATE:
 		metadata = (GthMetadata *) g_file_info_get_attribute_object (self->priv->info, "Embedded::Photo::DateTimeOriginal");
 		if (metadata != NULL)
@@ -306,14 +337,17 @@ get_date_from_option (GthEditCommentPage *self,
 		else
 			return g_strdup ("");
 		break;
+
 	case LAST_MODIFIED_DATE:
 		timeval.tv_sec = g_file_info_get_attribute_uint64 (self->priv->info, "time::modified");
 		timeval.tv_usec = g_file_info_get_attribute_uint32 (self->priv->info, "time::modified-usec");
 		break;
+
 	case CREATION_DATE:
 		timeval.tv_sec = g_file_info_get_attribute_uint64 (self->priv->info, "time::created");
 		timeval.tv_usec = g_file_info_get_attribute_uint32 (self->priv->info, "time::created-usec");
 		break;
+
 	case NO_CHANGE:
 		metadata = (GthMetadata *) g_file_info_get_attribute_object (self->priv->info, "general::datetime");
 		if (metadata != NULL)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]