[gnumeric] document properties: improve handling of boolean, add more known property names



commit 947223974a33f8c7d567f2354190d87679066929
Author: Andreas J Guelzow <aguelzow pyrshep ca>
Date:   Fri Jul 1 12:21:40 2011 -0600

    document properties: improve handling of boolean, add more known property names
    
    2011-07-01  Andreas J. Guelzow <aguelzow pyrshep ca>
    
    	* dialog-doc-metadata.c (dialog_doc_metadata_get_value_type_from_name):
    	add items
    	(dialog_doc_metadata_transform_str_to_boolean): new
    	(dialog_doc_metadata_transform_boolean_to_str): new
    	(dialog_doc_metadata_init): connect above transforms
    
    2011-07-01  Andreas J. Guelzow <aguelzow pyrshep ca>
    
    	* xlsx-write-docprops.c (xlsx_map_prop_name_to_output_fun):
    	use GSF_META_NAME_MM_CLIP_COUNT
    	* xlsx-read-docprops.c: use GSF_META_NAME_MM_CLIP_COUNT

 plugins/excel/ChangeLog             |    6 ++
 plugins/excel/xlsx-read-docprops.c  |    2 +-
 plugins/excel/xlsx-write-docprops.c |    2 +-
 src/dialogs/ChangeLog               |    8 +++
 src/dialogs/dialog-doc-metadata.c   |   95 +++++++++++++++++++++++++++++++----
 5 files changed, 100 insertions(+), 13 deletions(-)
---
diff --git a/plugins/excel/ChangeLog b/plugins/excel/ChangeLog
index 31a7511..48982e2 100644
--- a/plugins/excel/ChangeLog
+++ b/plugins/excel/ChangeLog
@@ -1,3 +1,9 @@
+2011-07-01  Andreas J. Guelzow <aguelzow pyrshep ca>
+
+	* xlsx-write-docprops.c (xlsx_map_prop_name_to_output_fun): 
+	use GSF_META_NAME_MM_CLIP_COUNT
+	* xlsx-read-docprops.c: use GSF_META_NAME_MM_CLIP_COUNT
+
 2011-06-28  Andreas J. Guelzow <aguelzow pyrshep ca>
 
 	* xlsx-write-docprops.c (xlsx_read_core_keys): implement
diff --git a/plugins/excel/xlsx-read-docprops.c b/plugins/excel/xlsx-read-docprops.c
index 03f30dc..b926484 100644
--- a/plugins/excel/xlsx-read-docprops.c
+++ b/plugins/excel/xlsx-read-docprops.c
@@ -189,7 +189,7 @@ GSF_XML_IN_NODE_FULL (X_PROPS, X_PROP_SLIDES, XL_NS_PROP, "Slides", GSF_XML_CONT
 GSF_XML_IN_NODE_FULL (X_PROPS, X_PROP_NOTES, XL_NS_PROP, "Notes", GSF_XML_CONTENT, FALSE, FALSE, NULL, &xlsx_read_prop, .v_str = GSF_META_NAME_NOTE_COUNT),
 GSF_XML_IN_NODE_FULL (X_PROPS, X_PROP_TOTAL_TIME, XL_NS_PROP, "TotalTime", GSF_XML_CONTENT, FALSE, FALSE, NULL, &xlsx_read_prop_int, .v_str = GSF_META_NAME_EDITING_DURATION),
 GSF_XML_IN_NODE_FULL (X_PROPS, X_PROP_HIDDEN_SLIDES, XL_NS_PROP, "HiddenSlides", GSF_XML_CONTENT, FALSE, FALSE, NULL, &xlsx_read_prop_int, .v_str = GSF_META_NAME_HIDDEN_SLIDE_COUNT),
-GSF_XML_IN_NODE_FULL (X_PROPS, X_PROP_MMCLIPS, XL_NS_PROP, "MMClips", GSF_XML_CONTENT, FALSE, FALSE, NULL, &xlsx_read_prop_int, .v_str = "xlsx:MMClips"),
+GSF_XML_IN_NODE_FULL (X_PROPS, X_PROP_MMCLIPS, XL_NS_PROP, "MMClips", GSF_XML_CONTENT, FALSE, FALSE, NULL, &xlsx_read_prop_int, .v_str = GSF_META_NAME_MM_CLIP_COUNT),
 GSF_XML_IN_NODE_FULL (X_PROPS, X_PROP_SCALE_CROP, XL_NS_PROP, "ScaleCrop", GSF_XML_CONTENT, FALSE, FALSE, NULL, &xlsx_read_prop_boolean, .v_str = GSF_META_NAME_SCALE),
 GSF_XML_IN_NODE_FULL (X_PROPS, X_PROP_LINKS_UP_TO_DATE, XL_NS_PROP, "LinksUpToDate", GSF_XML_CONTENT, FALSE, FALSE, NULL, &xlsx_read_prop_boolean, .v_str = GSF_META_NAME_LINKS_DIRTY),
 GSF_XML_IN_NODE_FULL (X_PROPS, X_PROP_CHARACTERS_WITH_SPACES, XL_NS_PROP, "CharactersWithSpaces", GSF_XML_CONTENT, FALSE, FALSE, NULL, &xlsx_read_prop_int, .v_str = GSF_META_NAME_BYTE_COUNT),
diff --git a/plugins/excel/xlsx-write-docprops.c b/plugins/excel/xlsx-write-docprops.c
index 5c919c7..3e219b1 100644
--- a/plugins/excel/xlsx-write-docprops.c
+++ b/plugins/excel/xlsx-write-docprops.c
@@ -160,7 +160,7 @@ xlsx_map_prop_name_to_output_fun (char const *name)
 			{ "xlsx:HyperlinksChanged",         xlsx_map_to_bool},
 			{ GSF_META_NAME_LINE_COUNT,         xlsx_map_to_int},
 			{ GSF_META_NAME_LINKS_DIRTY,        xlsx_map_to_bool},
-			{ "xlsx:MMClips",                   xlsx_map_to_int},
+			{ GSF_META_NAME_MM_CLIP_COUNT,      xlsx_map_to_int},
 			{ GSF_META_NAME_NOTE_COUNT,         xlsx_map_to_int},
 			{ GSF_META_NAME_PAGE_COUNT,         xlsx_map_to_int},
 			{ GSF_META_NAME_PARAGRAPH_COUNT,    xlsx_map_to_int},
diff --git a/src/dialogs/ChangeLog b/src/dialogs/ChangeLog
index fb1c5ae..460b47b 100644
--- a/src/dialogs/ChangeLog
+++ b/src/dialogs/ChangeLog
@@ -1,3 +1,11 @@
+2011-07-01  Andreas J. Guelzow <aguelzow pyrshep ca>
+
+	* dialog-doc-metadata.c (dialog_doc_metadata_get_value_type_from_name):
+	add items
+	(dialog_doc_metadata_transform_str_to_boolean): new
+	(dialog_doc_metadata_transform_boolean_to_str): new
+	(dialog_doc_metadata_init): connect above transforms
+
 2011-06-30  Andreas J. Guelzow <aguelzow pyrshep ca>
 
 	* dialog-doc-metadata.c (dialog_doc_metadata_get_value_type_from_name):
diff --git a/src/dialogs/dialog-doc-metadata.c b/src/dialogs/dialog-doc-metadata.c
index 0abb3ae..3df7b9e 100644
--- a/src/dialogs/dialog-doc-metadata.c
+++ b/src/dialogs/dialog-doc-metadata.c
@@ -168,23 +168,50 @@ dialog_doc_metadata_get_value_type_from_name (gchar const *name, GType def)
 			char const *name;
 			GType type;
 		} const map [] = {
-			{GSF_META_NAME_CREATOR,      G_TYPE_STRING},
-			{GSF_META_NAME_TITLE,        G_TYPE_STRING},
-			{GSF_META_NAME_SUBJECT,      G_TYPE_STRING},
-			{GSF_META_NAME_MANAGER,      G_TYPE_STRING},
-			{GSF_META_NAME_COMPANY,      G_TYPE_STRING},
-			{GSF_META_NAME_CATEGORY,     G_TYPE_STRING},
-			{GSF_META_NAME_DESCRIPTION,  G_TYPE_STRING},
-			{GSF_META_NAME_SPREADSHEET_COUNT, G_TYPE_INT},
-			{GSF_META_NAME_CELL_COUNT,   G_TYPE_INT},
-			{GSF_META_NAME_PAGE_COUNT,   G_TYPE_INT}
+			{GSF_META_NAME_GENERATOR,            G_TYPE_STRING},
+			{GSF_META_NAME_INITIAL_CREATOR,      G_TYPE_STRING},
+			{GSF_META_NAME_CREATOR,              G_TYPE_STRING},
+			{GSF_META_NAME_TITLE,                G_TYPE_STRING},
+			{GSF_META_NAME_SUBJECT,              G_TYPE_STRING},
+			{GSF_META_NAME_MANAGER,              G_TYPE_STRING},
+			{GSF_META_NAME_COMPANY,              G_TYPE_STRING},
+			{GSF_META_NAME_CATEGORY,             G_TYPE_STRING},
+			{GSF_META_NAME_DESCRIPTION,          G_TYPE_STRING},
+			{GSF_META_NAME_LAST_SAVED_BY,        G_TYPE_STRING},
+			{GSF_META_NAME_TEMPLATE,             G_TYPE_STRING},
+			{GSF_META_NAME_EDITING_DURATION,     G_TYPE_STRING}, /* special */
+			{GSF_META_NAME_SPREADSHEET_COUNT,    G_TYPE_INT},
+			{GSF_META_NAME_TABLE_COUNT,          G_TYPE_INT},
+			{GSF_META_NAME_CELL_COUNT,           G_TYPE_INT},
+			{GSF_META_NAME_CHARACTER_COUNT,      G_TYPE_INT},
+			{GSF_META_NAME_BYTE_COUNT,           G_TYPE_INT},
+			{GSF_META_NAME_SECURITY,             G_TYPE_INT},
+			{GSF_META_NAME_HIDDEN_SLIDE_COUNT,   G_TYPE_INT},
+			{GSF_META_NAME_LINE_COUNT,           G_TYPE_INT},
+			{GSF_META_NAME_SLIDE_COUNT,          G_TYPE_INT},
+			{GSF_META_NAME_WORD_COUNT,           G_TYPE_INT},
+			{GSF_META_NAME_MM_CLIP_COUNT,        G_TYPE_INT},
+			{GSF_META_NAME_NOTE_COUNT,           G_TYPE_INT},
+			{GSF_META_NAME_PARAGRAPH_COUNT,      G_TYPE_INT},
+			{GSF_META_NAME_PAGE_COUNT,           G_TYPE_INT},
+			{GSF_META_NAME_CODEPAGE,             G_TYPE_INT},
+			{GSF_META_NAME_LOCALE_SYSTEM_DEFAULT,G_TYPE_INT},
+			{GSF_META_NAME_OBJECT_COUNT,         G_TYPE_INT},
+			{"xlsx:HyperlinksChanged",           G_TYPE_BOOLEAN},
+			{GSF_META_NAME_LINKS_DIRTY,          G_TYPE_BOOLEAN},
+			{"xlsx:SharedDoc",                   G_TYPE_BOOLEAN},
+			{GSF_META_NAME_SCALE,                G_TYPE_BOOLEAN}
 		};
 		static char const *map_vector[] =
-			{GSF_META_NAME_KEYWORDS};
+			{GSF_META_NAME_KEYWORDS,
+			 GSF_META_NAME_DOCUMENT_PARTS,
+			 GSF_META_NAME_HEADING_PAIRS};
 		static char const *map_timestamps[] =
 			{GSF_META_NAME_DATE_CREATED,
 			 GSF_META_NAME_DATE_MODIFIED};
 
+		/*Missing:GSF_META_NAME_THUMBNAIL */
+
 		int i = G_N_ELEMENTS (map);
 		dialog_doc_metadata_name_to_type = g_hash_table_new (g_str_hash, g_str_equal);
 		while (i-- > 0)
@@ -315,6 +342,30 @@ dialog_doc_metadata_transform_str_to_float (const GValue *string_value,
 }
 
 static void
+dialog_doc_metadata_transform_str_to_boolean (const GValue *string_value,
+					      GValue       *b_value)
+{
+	gboolean x, err;
+	gchar const *str;
+	GnmValue *conversion;
+
+	g_return_if_fail (G_VALUE_HOLDS_STRING (string_value));
+	g_return_if_fail (G_VALUE_HOLDS_BOOLEAN (b_value));
+	
+	str = g_value_get_string (string_value);
+	conversion = format_match_number (str, NULL, NULL);
+	if (conversion) {
+		x = value_get_as_bool (conversion, &err);
+		value_release (conversion);
+		if (err)
+			x = FALSE;
+	} else
+		x = FALSE;
+
+	g_value_set_boolean (b_value, x);
+}
+
+static void
 dialog_doc_metadata_transform_str_to_docprop_vect (const GValue *string_value,
 						   GValue       *docprop_value)
 {
@@ -433,6 +484,20 @@ dialog_doc_metadata_transform_float_to_str (const GValue *float_value,
 	g_value_take_string (string_value, str);
 }
 
+static void
+dialog_doc_metadata_transform_boolean_to_str (const GValue *b_value,
+					      GValue       *string_value)
+{
+	gboolean x;
+
+	g_return_if_fail (G_VALUE_HOLDS_BOOLEAN (b_value));
+	g_return_if_fail (G_VALUE_HOLDS_STRING (string_value));
+
+	x = g_value_get_boolean (b_value);
+
+	g_value_set_static_string (string_value, x ? _("TRUE") : _("FALSE"));
+}
+
 static gchar*
 gnm_docprop_vector_as_string (GsfDocPropVector *vector)
 {
@@ -2247,6 +2312,10 @@ dialog_doc_metadata_init (DialogDocMetaData *state,
 					 GSF_DOCPROP_VECTOR_TYPE,
 					 dialog_doc_metadata_transform_str_to_docprop_vect);
 
+	g_value_register_transform_func (G_TYPE_STRING,
+					 G_TYPE_BOOLEAN,
+					 dialog_doc_metadata_transform_str_to_boolean);
+
 	g_value_register_transform_func (GSF_TIMESTAMP_TYPE,
 					 G_TYPE_STRING,
 					 dialog_doc_metadata_transform_timestamp_to_str);
@@ -2259,6 +2328,10 @@ dialog_doc_metadata_init (DialogDocMetaData *state,
 					 G_TYPE_STRING,
 					 dialog_doc_metadata_transform_float_to_str);
 
+	g_value_register_transform_func (G_TYPE_BOOLEAN,
+					 G_TYPE_STRING,
+					 dialog_doc_metadata_transform_boolean_to_str);
+
 	for (i = 0; page_info[i].page > -1; i++) {
 		const page_info_t *this_page =  &page_info[i];
 		this_page->page_initializer (state);



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