#include #include #include #include #include #include #include "ag-app.h" #include "ag-window.h" #include "ag-chart.h" struct _AgWindowPrivate { GtkWidget *grid; GtkWidget *header_bar; GtkWidget *stack; GtkWidget *stack_switcher; GtkWidget *name; GtkWidget *north_lat; GtkWidget *south_lat; GtkWidget *latitude; GtkWidget *east_long; GtkWidget *west_long; GtkWidget *longitude; GtkWidget *year; GtkWidget *month; GtkWidget *day; GtkWidget *hour; GtkWidget *minute; GtkWidget *second; GtkBuilder *builder; GtkWidget *tab_chart; GtkWidget *tab_aspects; GtkWidget *tab_points; GtkWidget *tab_edit; GtkWidget *current_tab; GsweTimestamp *timestamp; AgChart *chart; gchar *uri; }; G_DEFINE_TYPE(AgWindow, ag_window, GTK_TYPE_APPLICATION_WINDOW); #define GET_PRIVATE(instance) (G_TYPE_INSTANCE_GET_PRIVATE((instance), AG_TYPE_WINDOW, AgWindowPrivate)) static void recalculate_chart(AgWindow *window); static void gear_menu_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data) { GVariant *state; state = g_action_get_state(G_ACTION(action)); g_action_change_state(G_ACTION(action), g_variant_new_boolean(!g_variant_get_boolean(state))); g_variant_unref(state); } static void close_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data) { AgWindow *window = user_data; // TODO: Save unsaved changes! gtk_widget_destroy(GTK_WIDGET(window)); } 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; recalculate_chart(window); doc = xmlNewDoc(BAD_CAST "1.0"); root_node = xmlNewNode(NULL, BAD_CAST "chartinfo"); xmlDocSetRootElement(doc, root_node); // Begin node data_node = xmlNewChild(root_node, NULL, BAD_CAST "data", NULL); value = ag_chart_get_name(window->priv->chart); xmlNewChild(data_node, NULL, BAD_CAST "name", BAD_CAST value); g_free(value); // Begin 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