Moved XML creation code to AgChart's create_save_doc()
This commit is contained in:
		| @@ -542,6 +542,102 @@ ag_chart_load_from_file(GFile *file, GError **err) | ||||
|     return chart; | ||||
| } | ||||
|  | ||||
| static xmlDocPtr | ||||
| create_save_doc(AgChart *chart) | ||||
| { | ||||
|     xmlDocPtr doc = NULL; | ||||
|     xmlNodePtr root_node = NULL, | ||||
|                data_node = NULL, | ||||
|                place_node = NULL, | ||||
|                time_node = NULL; | ||||
|     gchar *value; | ||||
|     GsweCoordinates *coordinates; | ||||
|     GsweTimestamp *timestamp; | ||||
|  | ||||
|     doc = xmlNewDoc(BAD_CAST "1.0"); | ||||
|     root_node = xmlNewNode(NULL, BAD_CAST "chartinfo"); | ||||
|     xmlDocSetRootElement(doc, root_node); | ||||
|  | ||||
|     // Begin <data> node | ||||
|     data_node = xmlNewChild(root_node, NULL, BAD_CAST "data", NULL); | ||||
|  | ||||
|     value = ag_chart_get_name(chart); | ||||
|     xmlNewChild(data_node, NULL, BAD_CAST "name", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     // Begin <place> node | ||||
|     place_node = xmlNewChild(data_node, NULL, BAD_CAST "place", NULL); | ||||
|  | ||||
|     value = ag_chart_get_country(chart); | ||||
|     xmlNewChild(place_node, NULL, BAD_CAST "country", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = ag_chart_get_city(chart); | ||||
|     xmlNewChild(place_node, NULL, BAD_CAST "city", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     coordinates = gswe_moment_get_coordinates(GSWE_MOMENT(chart)); | ||||
|  | ||||
|     value = g_malloc0(12); | ||||
|     g_ascii_dtostr(value, 12, coordinates->longitude); | ||||
|     xmlNewChild(place_node, NULL, BAD_CAST "longitude", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = g_malloc0(12); | ||||
|     g_ascii_dtostr(value, 12, coordinates->latitude); | ||||
|     xmlNewChild(place_node, NULL, BAD_CAST "latitude", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = g_malloc0(12); | ||||
|     g_ascii_dtostr(value, 12, coordinates->altitude); | ||||
|     xmlNewChild(place_node, NULL, BAD_CAST "altitude", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     g_free(coordinates); | ||||
|  | ||||
|     // Begin <time> node | ||||
|     time_node = xmlNewChild(data_node, NULL, BAD_CAST "time", NULL); | ||||
|  | ||||
|     timestamp = gswe_moment_get_timestamp(GSWE_MOMENT(chart)); | ||||
|  | ||||
|     value = g_malloc0(10); | ||||
|     g_ascii_dtostr(value, 10, gswe_timestamp_get_gregorian_year(timestamp, NULL)); | ||||
|     xmlNewChild(time_node, NULL, BAD_CAST "year", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = g_malloc0(3); | ||||
|     g_ascii_dtostr(value, 3, gswe_timestamp_get_gregorian_month(timestamp, NULL)); | ||||
|     xmlNewChild(time_node, NULL, BAD_CAST "month", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = g_malloc0(3); | ||||
|     g_ascii_dtostr(value, 3, gswe_timestamp_get_gregorian_day(timestamp, NULL)); | ||||
|     xmlNewChild(time_node, NULL, BAD_CAST "day", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = g_malloc0(3); | ||||
|     g_ascii_dtostr(value, 3, gswe_timestamp_get_gregorian_hour(timestamp, NULL)); | ||||
|     xmlNewChild(time_node, NULL, BAD_CAST "hour", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = g_malloc0(3); | ||||
|     g_ascii_dtostr(value, 3, gswe_timestamp_get_gregorian_minute(timestamp, NULL)); | ||||
|     xmlNewChild(time_node, NULL, BAD_CAST "minute", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = g_malloc0(3); | ||||
|     g_ascii_dtostr(value, 3, gswe_timestamp_get_gregorian_second(timestamp, NULL)); | ||||
|     xmlNewChild(time_node, NULL, BAD_CAST "second", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = g_malloc0(7); | ||||
|     g_ascii_dtostr(value, 7, gswe_timestamp_get_gregorian_timezone(timestamp)); | ||||
|     xmlNewChild(time_node, NULL, BAD_CAST "timezone", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     return doc; | ||||
| } | ||||
|  | ||||
| void | ||||
| ag_chart_save_to_file(AgChart *chart, GFile *file, GError **err) | ||||
| { | ||||
|   | ||||
							
								
								
									
										114
									
								
								src/ag-window.c
									
									
									
									
									
								
							
							
						
						
									
										114
									
								
								src/ag-window.c
									
									
									
									
									
								
							| @@ -67,109 +67,43 @@ close_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data) | ||||
|     gtk_widget_destroy(GTK_WIDGET(window)); | ||||
| } | ||||
|  | ||||
| static void | ||||
| ag_window_save_as(AgWindow *window, GError **err) | ||||
| { | ||||
| } | ||||
|  | ||||
| static void | ||||
| save_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data) | ||||
| { | ||||
|     xmlDocPtr doc = NULL; | ||||
|     xmlNodePtr root_node = NULL, | ||||
|                data_node = NULL, | ||||
|                place_node = NULL, | ||||
|                time_node = NULL; | ||||
|     gchar *value; | ||||
|     GsweCoordinates *coordinates; | ||||
|     GsweTimestamp *timestamp; | ||||
|     AgWindow *window = user_data; | ||||
|     AgWindow *window = AG_WINDOW(user_data); | ||||
|     GError *err = NULL; | ||||
|     gchar *uri; | ||||
|  | ||||
|     recalculate_chart(window); | ||||
|     uri = ag_window_get_uri(window); | ||||
|  | ||||
|     doc = xmlNewDoc(BAD_CAST "1.0"); | ||||
|     root_node = xmlNewNode(NULL, BAD_CAST "chartinfo"); | ||||
|     xmlDocSetRootElement(doc, root_node); | ||||
|     if (uri != NULL) { | ||||
|         GFile *file = g_file_new_for_uri(uri); | ||||
|         g_free(uri); | ||||
|  | ||||
|     // Begin <data> node | ||||
|     data_node = xmlNewChild(root_node, NULL, BAD_CAST "data", NULL); | ||||
|         ag_chart_save_to_file(window->priv->chart, file, &err); | ||||
|     } else { | ||||
|         ag_window_save_as(window, &err); | ||||
|     } | ||||
|  | ||||
|     value = ag_chart_get_name(window->priv->chart); | ||||
|     xmlNewChild(data_node, NULL, BAD_CAST "name", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     // Begin <place> node | ||||
|     place_node = xmlNewChild(data_node, NULL, BAD_CAST "place", NULL); | ||||
|  | ||||
|     value = ag_chart_get_country(window->priv->chart); | ||||
|     xmlNewChild(place_node, NULL, BAD_CAST "country", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = ag_chart_get_city(window->priv->chart); | ||||
|     xmlNewChild(place_node, NULL, BAD_CAST "city", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     coordinates = gswe_moment_get_coordinates(GSWE_MOMENT(window->priv->chart)); | ||||
|  | ||||
|     value = g_malloc0(12); | ||||
|     g_ascii_dtostr(value, 12, coordinates->longitude); | ||||
|     xmlNewChild(place_node, NULL, BAD_CAST "longitude", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = g_malloc0(12); | ||||
|     g_ascii_dtostr(value, 12, coordinates->latitude); | ||||
|     xmlNewChild(place_node, NULL, BAD_CAST "latitude", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = g_malloc0(12); | ||||
|     g_ascii_dtostr(value, 12, coordinates->altitude); | ||||
|     xmlNewChild(place_node, NULL, BAD_CAST "altitude", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     g_free(coordinates); | ||||
|  | ||||
|     // Begin <time> node | ||||
|     time_node = xmlNewChild(root_node, NULL, BAD_CAST "time", NULL); | ||||
|  | ||||
|     timestamp = gswe_moment_get_timestamp(GSWE_MOMENT(window->priv->chart)); | ||||
|  | ||||
|     value = g_malloc0(10); | ||||
|     g_ascii_dtostr(value, 10, gswe_timestamp_get_gregorian_year(timestamp, NULL)); | ||||
|     xmlNewChild(time_node, NULL, BAD_CAST "year", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = g_malloc0(3); | ||||
|     g_ascii_dtostr(value, 3, gswe_timestamp_get_gregorian_month(timestamp, NULL)); | ||||
|     xmlNewChild(time_node, NULL, BAD_CAST "month", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = g_malloc0(3); | ||||
|     g_ascii_dtostr(value, 3, gswe_timestamp_get_gregorian_day(timestamp, NULL)); | ||||
|     xmlNewChild(time_node, NULL, BAD_CAST "year", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = g_malloc0(3); | ||||
|     g_ascii_dtostr(value, 3, gswe_timestamp_get_gregorian_hour(timestamp, NULL)); | ||||
|     xmlNewChild(time_node, NULL, BAD_CAST "hour", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = g_malloc0(3); | ||||
|     g_ascii_dtostr(value, 3, gswe_timestamp_get_gregorian_minute(timestamp, NULL)); | ||||
|     xmlNewChild(time_node, NULL, BAD_CAST "minute", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = g_malloc0(3); | ||||
|     g_ascii_dtostr(value, 3, gswe_timestamp_get_gregorian_second(timestamp, NULL)); | ||||
|     xmlNewChild(time_node, NULL, BAD_CAST "year", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     value = g_malloc0(7); | ||||
|     g_ascii_dtostr(value, 7, gswe_timestamp_get_gregorian_timezone(timestamp)); | ||||
|     xmlNewChild(time_node, NULL, BAD_CAST "timezone", BAD_CAST value); | ||||
|     g_free(value); | ||||
|  | ||||
|     xmlSaveFormatFileEnc("-", doc, "UTF-8", 1); | ||||
|     xmlFreeDoc(doc); | ||||
|     // TODO: Check err! | ||||
| } | ||||
|  | ||||
| static void | ||||
| save_as_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data) | ||||
| { | ||||
|     AgWindow *window = AG_WINDOW(user_data); | ||||
|     GError *err = NULL; | ||||
|  | ||||
|     recalculate_chart(window); | ||||
|     ag_window_save_as(window, &err); | ||||
|  | ||||
|     // TODO: Check err! | ||||
| } | ||||
|  | ||||
| void | ||||
|   | ||||
		Reference in New Issue
	
	Block a user