Moved XML creation code to AgChart's create_save_doc()
This commit is contained in:
parent
c767124713
commit
ec75d9b4cd
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user