[gthumb/ext] Added ability to set the rating in the metadata dialog.
- From: Paolo Bacchilega <paobac src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gthumb/ext] Added ability to set the rating in the metadata dialog.
- Date: Sat, 2 Jan 2010 21:42:10 +0000 (UTC)
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]