Merge pull request #96 from gergelypolonkai/refine-ui

Refine the UI
This commit is contained in:
Gergely Polonkai 2014-09-30 23:40:47 +02:00
commit bf9328c620
9 changed files with 615 additions and 490 deletions

View File

@ -18,7 +18,6 @@
<second>45</second> <second>45</second>
<timezone>1</timezone> <timezone>1</timezone>
</time> </time>
<housesystem>placidus</housesystem>
</data> </data>
<note>This is my own chart.</note> <note>This is my own chart.</note>
</chartinfo> </chartinfo>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -37,6 +37,7 @@
#include "ag-db.h" #include "ag-db.h"
#include "ag-chart.h" #include "ag-chart.h"
#include "placidus.h" #include "placidus.h"
#include "ag-settings.h"
typedef struct _AgChartPrivate { typedef struct _AgChartPrivate {
gchar *name; gchar *name;
@ -1228,9 +1229,9 @@ ag_chart_new_from_db_save(AgDbChartSave *save_data,
GError **err) GError **err)
{ {
GsweTimestamp *timestamp; GsweTimestamp *timestamp;
gchar *house_system_enum_name;
GsweHouseSystem house_system; GsweHouseSystem house_system;
AgChart *chart; AgChart *chart;
AgSettings *settings;
if (save_data == NULL) { if (save_data == NULL) {
g_set_error( g_set_error(
@ -1242,9 +1243,9 @@ ag_chart_new_from_db_save(AgDbChartSave *save_data,
return NULL; return NULL;
} }
house_system_enum_name = g_utf8_strdown(save_data->house_system, -1); settings = ag_settings_get();
house_system = ag_house_system_nick_to_id(house_system_enum_name); house_system = ag_settings_get_house_system(settings);
g_free(house_system_enum_name); g_object_unref(settings);
timestamp = gswe_timestamp_new_from_gregorian_full( timestamp = gswe_timestamp_new_from_gregorian_full(
save_data->year, save_data->month, save_data->day, save_data->year, save_data->month, save_data->day,
@ -2012,8 +2013,6 @@ ag_chart_get_db_save(AgChart *chart, gint db_id)
AgChartPrivate *priv = ag_chart_get_instance_private(chart); AgChartPrivate *priv = ag_chart_get_instance_private(chart);
AgDbChartSave *save_data = ag_db_chart_save_new(TRUE); AgDbChartSave *save_data = ag_db_chart_save_new(TRUE);
GsweTimestamp *timestamp = gswe_moment_get_timestamp(GSWE_MOMENT(chart)); GsweTimestamp *timestamp = gswe_moment_get_timestamp(GSWE_MOMENT(chart));
GEnumClass *house_system_class;
GEnumValue *house_system_enum;
save_data->db_id = db_id; save_data->db_id = db_id;
@ -2047,13 +2046,6 @@ ag_chart_get_db_save(AgChart *chart, gint db_id)
NULL NULL
); );
save_data->timezone = gswe_timestamp_get_gregorian_timezone(timestamp); save_data->timezone = gswe_timestamp_get_gregorian_timezone(timestamp);
house_system_class = g_type_class_ref(GSWE_TYPE_HOUSE_SYSTEM);
house_system_enum = g_enum_get_value(
house_system_class,
gswe_moment_get_house_system(GSWE_MOMENT(chart))
);
save_data->house_system = g_strdup(house_system_enum->value_nick);
g_type_class_unref(house_system_class);
save_data->note = g_strdup(priv->note); save_data->note = g_strdup(priv->note);
return save_data; return save_data;

View File

@ -61,7 +61,6 @@ enum {
COLUMN_CHART_MINUTE, COLUMN_CHART_MINUTE,
COLUMN_CHART_SECOND, COLUMN_CHART_SECOND,
COLUMN_CHART_TIMEZONE, COLUMN_CHART_TIMEZONE,
COLUMN_CHART_HOUSE_SYSTEM,
COLUMN_CHART_NOTE, COLUMN_CHART_NOTE,
/* Leave this as the last element */ /* Leave this as the last element */
@ -88,7 +87,6 @@ static TableColumnDef chart_table_column[] = {
{ COLUMN_CHART_MINUTE, "minute" }, { COLUMN_CHART_MINUTE, "minute" },
{ COLUMN_CHART_SECOND, "second" }, { COLUMN_CHART_SECOND, "second" },
{ COLUMN_CHART_TIMEZONE, "timezone" }, { COLUMN_CHART_TIMEZONE, "timezone" },
{ COLUMN_CHART_HOUSE_SYSTEM, "house_system" },
{ COLUMN_CHART_NOTE, "note" }, { COLUMN_CHART_NOTE, "note" },
}; };
@ -453,7 +451,6 @@ ag_db_check_chart_table(AgDb *db)
"minute UNSIGNED INTEGER NOT NULL, " \ "minute UNSIGNED INTEGER NOT NULL, " \
"second UNSIGNED INTEGER NOT NULL, " \ "second UNSIGNED INTEGER NOT NULL, " \
"timezone DOUBLE NOT NULL, " \ "timezone DOUBLE NOT NULL, " \
"house_system TEXT NOT NULL, " \
"note TEXT" \ "note TEXT" \
")" ")"
); );
@ -589,10 +586,6 @@ ag_db_chart_save_free(AgDbChartSave *save_data)
g_free(save_data->city); g_free(save_data->city);
} }
if (save_data->house_system) {
g_free(save_data->house_system);
}
if (save_data->note) { if (save_data->note) {
g_free(save_data->note); g_free(save_data->note);
} }
@ -655,7 +648,6 @@ ag_db_chart_save(AgDb *db, AgDbChartSave *save_data, GError **err)
minute = G_VALUE_INIT, minute = G_VALUE_INIT,
second = G_VALUE_INIT, second = G_VALUE_INIT,
timezone = G_VALUE_INIT, timezone = G_VALUE_INIT,
house_system = G_VALUE_INIT,
note = G_VALUE_INIT; note = G_VALUE_INIT;
AgDbPrivate *priv = ag_db_get_instance_private(db); AgDbPrivate *priv = ag_db_get_instance_private(db);
@ -706,9 +698,6 @@ ag_db_chart_save(AgDb *db, AgDbChartSave *save_data, GError **err)
g_value_init(&timezone, G_TYPE_DOUBLE); g_value_init(&timezone, G_TYPE_DOUBLE);
g_value_set_double(&timezone, save_data->timezone); g_value_set_double(&timezone, save_data->timezone);
g_value_init(&house_system, G_TYPE_STRING);
g_value_set_string(&house_system, save_data->house_system);
g_value_init(&note, G_TYPE_STRING); g_value_init(&note, G_TYPE_STRING);
g_value_set_string(&note, save_data->note); g_value_set_string(&note, save_data->note);
@ -731,7 +720,6 @@ ag_db_chart_save(AgDb *db, AgDbChartSave *save_data, GError **err)
"minute", &minute, "minute", &minute,
"second", &second, "second", &second,
"timezone", &timezone, "timezone", &timezone,
"house_system", &house_system,
"note", &note, "note", &note,
NULL NULL
)) { )) {
@ -795,7 +783,6 @@ ag_db_chart_save(AgDb *db, AgDbChartSave *save_data, GError **err)
"minute", &minute, "minute", &minute,
"second", &second, "second", &second,
"timezone", &timezone, "timezone", &timezone,
"house_system", &house_system,
"note", &note, "note", &note,
NULL NULL
)) { )) {
@ -817,7 +804,6 @@ ag_db_chart_save(AgDb *db, AgDbChartSave *save_data, GError **err)
} }
g_value_unset(&note); g_value_unset(&note);
g_value_unset(&house_system);
g_value_unset(&timezone); g_value_unset(&timezone);
g_value_unset(&second); g_value_unset(&second);
g_value_unset(&minute); g_value_unset(&minute);
@ -1067,14 +1053,6 @@ ag_db_chart_get_data_by_id(AgDb *db, guint row_id, GError **err)
); );
save_data->timezone = g_value_get_double(value); save_data->timezone = g_value_get_double(value);
value = gda_data_model_get_value_at(
result,
COLUMN_CHART_HOUSE_SYSTEM,
0,
NULL
);
save_data->house_system = g_strdup(g_value_get_string(value));
value = gda_data_model_get_value_at(result, COLUMN_CHART_NOTE, 0, NULL); value = gda_data_model_get_value_at(result, COLUMN_CHART_NOTE, 0, NULL);
if (GDA_VALUE_HOLDS_NULL(value)) { if (GDA_VALUE_HOLDS_NULL(value)) {
@ -1225,12 +1203,6 @@ ag_db_chart_save_identical(const AgDbChartSave *a,
return FALSE; return FALSE;
} }
if (string_collate(a->house_system, b->house_system) != 0) {
g_debug("identical: House systems differ");
return FALSE;
}
if (!chart_only && string_collate(a->note, b->note) != 0) { if (!chart_only && string_collate(a->note, b->note) != 0) {
g_debug("identical: Notes differ"); g_debug("identical: Notes differ");

View File

@ -64,7 +64,6 @@ typedef struct _AgDbChartSave {
guint minute; guint minute;
guint second; guint second;
gdouble timezone; gdouble timezone;
gchar *house_system;
gchar *note; gchar *note;
gint refcount; gint refcount;
} AgDbChartSave; } AgDbChartSave;

View File

@ -17,6 +17,7 @@
* <http://www.gnu.org/licenses/>. * <http://www.gnu.org/licenses/>.
*/ */
#include "ag-settings.h" #include "ag-settings.h"
#include "astrognome.h"
#define SETTINGS_SCHEMA_ID_MAIN "eu.polonkai.gergely.Astrognome" #define SETTINGS_SCHEMA_ID_MAIN "eu.polonkai.gergely.Astrognome"
#define SETTINGS_SCHEMA_ID_WINDOW "eu.polonkai.gergely.Astrognome.state.window" #define SETTINGS_SCHEMA_ID_WINDOW "eu.polonkai.gergely.Astrognome.state.window"
@ -98,3 +99,20 @@ ag_settings_peek_window_settings(AgSettings *settings)
return priv->settings_window; return priv->settings_window;
} }
GsweHouseSystem
ag_settings_get_house_system(AgSettings *settings)
{
gchar *house_system_nick;
GsweHouseSystem house_system;
AgSettingsPrivate *priv = ag_settings_get_instance_private(settings);
house_system_nick = g_settings_get_string(
priv->settings_main,
"default-house-system"
);
house_system = ag_house_system_nick_to_id(house_system_nick);
g_free(house_system_nick);
return house_system;
}

View File

@ -21,6 +21,7 @@
#include <gio/gio.h> #include <gio/gio.h>
#include <glib-object.h> #include <glib-object.h>
#include <swe-glib.h>
G_BEGIN_DECLS G_BEGIN_DECLS
@ -57,6 +58,8 @@ AgSettings *ag_settings_get(void);
GSettings *ag_settings_peek_main_settings(AgSettings *settings); GSettings *ag_settings_peek_main_settings(AgSettings *settings);
GSettings *ag_settings_peek_window_settings(AgSettings *settings); GSettings *ag_settings_peek_window_settings(AgSettings *settings);
GsweHouseSystem ag_settings_get_house_system(AgSettings *settings);
G_END_DECLS G_END_DECLS
#endif /* __AG_SETTINGS_H__ */ #endif /* __AG_SETTINGS_H__ */

View File

@ -85,6 +85,7 @@ struct _AgWindowPrivate {
GList *style_sheets; GList *style_sheets;
AgDisplayTheme *theme; AgDisplayTheme *theme;
GtkListStore *display_theme_model; GtkListStore *display_theme_model;
gulong chart_changed_handler;
}; };
struct cc_search { struct cc_search {
@ -109,10 +110,20 @@ typedef struct {
GList *items; GList *items;
} LoadIdleData; } LoadIdleData;
enum {
PROP_0,
PROP_CHART,
PROP_COUNT
};
G_DEFINE_QUARK(ag_window_error_quark, ag_window_error); G_DEFINE_QUARK(ag_window_error_quark, ag_window_error);
G_DEFINE_TYPE_WITH_PRIVATE(AgWindow, ag_window, GTK_TYPE_APPLICATION_WINDOW); G_DEFINE_TYPE_WITH_PRIVATE(AgWindow, ag_window, GTK_TYPE_APPLICATION_WINDOW);
static GParamSpec *properties[PROP_COUNT];
#define GET_PRIV(o) AgWindowPrivate *priv = ag_window_get_instance_private((o))
static void static void
ag_window_gear_menu_action(GSimpleAction *action, ag_window_gear_menu_action(GSimpleAction *action,
GVariant *parameter, GVariant *parameter,
@ -309,7 +320,7 @@ ag_window_redraw_aspect_table(AgWindow *window)
*planet2; *planet2;
guint i, guint i,
j; j;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
planet_list = ag_chart_get_planets(priv->chart); planet_list = ag_chart_get_planets(priv->chart);
@ -451,7 +462,7 @@ ag_window_set_element_point(AgWindow *window,
guint points; guint points;
GtkWidget *label; GtkWidget *label;
gchar *points_string; gchar *points_string;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
points = gswe_moment_get_element_points( points = gswe_moment_get_element_points(
GSWE_MOMENT(priv->chart), GSWE_MOMENT(priv->chart),
@ -481,7 +492,7 @@ ag_window_set_quality_point(AgWindow *window,
guint points; guint points;
GtkWidget *label; GtkWidget *label;
gchar *points_string; gchar *points_string;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
points = gswe_moment_get_quality_points( points = gswe_moment_get_quality_points(
GSWE_MOMENT(priv->chart), GSWE_MOMENT(priv->chart),
@ -526,7 +537,7 @@ ag_window_redraw_chart(AgWindow *window)
{ {
gsize length; gsize length;
GError *err = NULL; GError *err = NULL;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
gchar *svg_content = ag_chart_create_svg( gchar *svg_content = ag_chart_create_svg(
priv->chart, priv->chart,
&length, &length,
@ -561,13 +572,13 @@ ag_window_redraw_chart(AgWindow *window)
} }
static gboolean static gboolean
ag_window_set_house_system(GtkTreeModel *model, ag_window_set_model_house_system(GtkTreeModel *model,
GtkTreePath *path, GtkTreePath *path,
GtkTreeIter *iter, GtkTreeIter *iter,
AgWindow *window) AgWindow *window)
{ {
GsweHouseSystem row_house_system; GsweHouseSystem row_house_system;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
GsweHouseSystem house_system = gswe_moment_get_house_system( GsweHouseSystem house_system = gswe_moment_get_house_system(
GSWE_MOMENT(priv->chart) GSWE_MOMENT(priv->chart)
); );
@ -593,7 +604,7 @@ ag_window_update_from_chart(AgWindow *window)
{ {
const gchar *country, const gchar *country,
*city; *city;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
GsweTimestamp *timestamp = gswe_moment_get_timestamp( GsweTimestamp *timestamp = gswe_moment_get_timestamp(
GSWE_MOMENT(priv->chart) GSWE_MOMENT(priv->chart)
); );
@ -672,7 +683,7 @@ ag_window_update_from_chart(AgWindow *window)
gtk_tree_model_foreach( gtk_tree_model_foreach(
GTK_TREE_MODEL(priv->house_system_model), GTK_TREE_MODEL(priv->house_system_model),
(GtkTreeModelForeachFunc)ag_window_set_house_system, (GtkTreeModelForeachFunc)ag_window_set_model_house_system,
window window
); );
@ -700,6 +711,7 @@ ag_window_update_from_chart(AgWindow *window)
static void static void
ag_window_chart_changed(AgChart *chart, AgWindow *window) ag_window_chart_changed(AgChart *chart, AgWindow *window)
{ {
g_debug("Chart changed!");
ag_window_redraw_chart(window); ag_window_redraw_chart(window);
} }
@ -708,7 +720,7 @@ ag_window_recalculate_chart(AgWindow *window, gboolean set_everything)
{ {
AgDbChartSave *edit_data, AgDbChartSave *edit_data,
*chart_data; *chart_data;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
gboolean south, gboolean south,
west; west;
GtkTreeIter house_system_iter; GtkTreeIter house_system_iter;
@ -718,6 +730,7 @@ ag_window_recalculate_chart(AgWindow *window, gboolean set_everything)
GsweTimestamp *timestamp; GsweTimestamp *timestamp;
GtkWidget *current; GtkWidget *current;
gint db_id = (priv->saved_data) ? priv->saved_data->db_id : -1; gint db_id = (priv->saved_data) ? priv->saved_data->db_id : -1;
AgSettings *settings;
south = gtk_toggle_button_get_active( south = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(priv->south_lat) GTK_TOGGLE_BUTTON(priv->south_lat)
@ -790,15 +803,6 @@ ag_window_recalculate_chart(AgWindow *window, gboolean set_everything)
g_error("House system is not set! This is clearly a bug."); g_error("House system is not set! This is clearly a bug.");
} }
gtk_tree_model_get(
GTK_TREE_MODEL(priv->house_system_model),
&house_system_iter,
0, &house_system,
-1
);
edit_data->house_system = g_strdup(
ag_house_system_id_to_nick(house_system)
);
gtk_text_buffer_get_bounds(priv->note_buffer, &start_iter, &end_iter); gtk_text_buffer_get_bounds(priv->note_buffer, &start_iter, &end_iter);
edit_data->note = gtk_text_buffer_get_text( edit_data->note = gtk_text_buffer_get_text(
priv->note_buffer, priv->note_buffer,
@ -824,24 +828,25 @@ ag_window_recalculate_chart(AgWindow *window, gboolean set_everything)
g_debug("Recalculating chart data"); g_debug("Recalculating chart data");
settings = ag_settings_get();
house_system = ag_settings_get_house_system(settings);
g_object_unref(settings);
// TODO: Set timezone according to the city selected! // TODO: Set timezone according to the city selected!
if (priv->chart == NULL) { if (priv->chart == NULL) {
AgChart *chart;
timestamp = gswe_timestamp_new_from_gregorian_full( timestamp = gswe_timestamp_new_from_gregorian_full(
edit_data->year, edit_data->month, edit_data->day, edit_data->year, edit_data->month, edit_data->day,
edit_data->hour, edit_data->minute, edit_data->second, 0, edit_data->hour, edit_data->minute, edit_data->second, 0,
edit_data->timezone edit_data->timezone
); );
priv->chart = ag_chart_new_full( chart = ag_chart_new_full(
timestamp, timestamp,
edit_data->longitude, edit_data->latitude, edit_data->altitude, edit_data->longitude, edit_data->latitude, edit_data->altitude,
house_system house_system
); );
g_signal_connect( ag_window_set_chart(window, chart);
priv->chart,
"changed",
G_CALLBACK(ag_window_chart_changed),
window
);
ag_window_redraw_chart(window); ag_window_redraw_chart(window);
} else { } else {
gswe_moment_set_house_system(GSWE_MOMENT(priv->chart), house_system); gswe_moment_set_house_system(GSWE_MOMENT(priv->chart), house_system);
@ -872,7 +877,7 @@ ag_window_export_image(AgWindow *window, GError **err)
GtkWidget *fs; GtkWidget *fs;
gint response; gint response;
GError *local_err = NULL; GError *local_err = NULL;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
ag_window_recalculate_chart(window, TRUE); ag_window_recalculate_chart(window, TRUE);
@ -1121,7 +1126,7 @@ ag_window_export_agc(AgWindow *window, GError **err)
gchar *file_name; gchar *file_name;
GtkWidget *fs; GtkWidget *fs;
gint response; gint response;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
ag_window_recalculate_chart(window, FALSE); ag_window_recalculate_chart(window, FALSE);
@ -1207,7 +1212,7 @@ ag_window_export_agc_action(GSimpleAction *action,
gboolean gboolean
ag_window_can_close(AgWindow *window, gboolean display_dialog) ag_window_can_close(AgWindow *window, gboolean display_dialog)
{ {
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
gint db_id = (priv->saved_data) gint db_id = (priv->saved_data)
? priv->saved_data->db_id ? priv->saved_data->db_id
: -1; : -1;
@ -1284,7 +1289,7 @@ ag_window_save_action(GSimpleAction *action,
gpointer user_data) gpointer user_data)
{ {
AgWindow *window = AG_WINDOW(user_data); AgWindow *window = AG_WINDOW(user_data);
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
AgDb *db = ag_db_get(); AgDb *db = ag_db_get();
GError *err = NULL; GError *err = NULL;
gint old_id; gint old_id;
@ -1334,7 +1339,7 @@ static void
ag_window_clear_style_sheets(AgWindow *window) ag_window_clear_style_sheets(AgWindow *window)
{ {
WebKitUserContentManager *manager; WebKitUserContentManager *manager;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
g_debug("Clearing style sheets"); g_debug("Clearing style sheets");
@ -1355,7 +1360,7 @@ ag_window_add_style_sheet(AgWindow *window, const gchar *path)
{ {
gchar *css_source; gchar *css_source;
gboolean source_free = FALSE; gboolean source_free = FALSE;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
if (strncmp("gres://", path, 7) == 0) { if (strncmp("gres://", path, 7) == 0) {
gchar *res_path = g_strdup_printf( gchar *res_path = g_strdup_printf(
@ -1409,7 +1414,7 @@ ag_window_update_style_sheets(AgWindow *window)
{ {
GList *item; GList *item;
WebKitUserContentManager *manager; WebKitUserContentManager *manager;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
g_debug("Updating style sheets"); g_debug("Updating style sheets");
@ -1431,7 +1436,7 @@ ag_window_set_theme(AgWindow *window, AgDisplayTheme *theme)
{ {
gchar *css, gchar *css,
*css_final; *css_final;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
g_debug("Setting theme to %s", (theme) ? theme->name : "no theme"); g_debug("Setting theme to %s", (theme) ? theme->name : "no theme");
ag_window_clear_style_sheets(window); ag_window_clear_style_sheets(window);
@ -1462,7 +1467,7 @@ ag_window_tab_changed_cb(GtkStack *stack, GParamSpec *pspec, AgWindow *window)
{ {
GtkWidget *active_tab; GtkWidget *active_tab;
const gchar *active_tab_name = gtk_stack_get_visible_child_name(stack); const gchar *active_tab_name = gtk_stack_get_visible_child_name(stack);
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
g_debug("Active tab changed: %s", active_tab_name); g_debug("Active tab changed: %s", active_tab_name);
@ -1530,7 +1535,7 @@ ag_window_change_tab_action(GSimpleAction *action,
{ {
AgWindow *window = AG_WINDOW(user_data); AgWindow *window = AG_WINDOW(user_data);
const gchar *target_tab = g_variant_get_string(parameter, NULL); const gchar *target_tab = g_variant_get_string(parameter, NULL);
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
gtk_stack_set_visible_child_name(GTK_STACK(priv->stack), target_tab); gtk_stack_set_visible_child_name(GTK_STACK(priv->stack), target_tab);
g_action_change_state(G_ACTION(action), parameter); g_action_change_state(G_ACTION(action), parameter);
@ -1543,7 +1548,7 @@ ag_window_set_default_house_system(GtkTreeModel *model,
AgWindow *window) AgWindow *window)
{ {
GsweHouseSystem row_house_system; GsweHouseSystem row_house_system;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
AgSettings *settings = ag_settings_get(); AgSettings *settings = ag_settings_get();
GSettings *main_settings = ag_settings_peek_main_settings(settings); GSettings *main_settings = ag_settings_peek_main_settings(settings);
GsweHouseSystem house_system = g_settings_get_enum( GsweHouseSystem house_system = g_settings_get_enum(
@ -1576,7 +1581,7 @@ ag_window_set_default_display_theme(GtkTreeModel *model,
AgWindow *window) AgWindow *window)
{ {
gint row_display_theme; gint row_display_theme;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
AgSettings *settings = ag_settings_get(); AgSettings *settings = ag_settings_get();
GSettings *main_settings = ag_settings_peek_main_settings(settings); GSettings *main_settings = ag_settings_peek_main_settings(settings);
gint default_theme = g_settings_get_int( gint default_theme = g_settings_get_int(
@ -1606,7 +1611,7 @@ ag_window_new_chart_action(GSimpleAction *action,
gpointer user_data) gpointer user_data)
{ {
AgWindow *window = AG_WINDOW(user_data); AgWindow *window = AG_WINDOW(user_data);
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
/* Empty edit tab values */ /* Empty edit tab values */
gtk_entry_set_text(GTK_ENTRY(priv->name), ""); gtk_entry_set_text(GTK_ENTRY(priv->name), "");
@ -1653,7 +1658,7 @@ ag_window_back_action(GSimpleAction *action,
gpointer user_data) gpointer user_data)
{ {
AgWindow *window = AG_WINDOW(user_data); AgWindow *window = AG_WINDOW(user_data);
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
g_debug("Back button pressed"); g_debug("Back button pressed");
@ -1684,7 +1689,7 @@ static void
ag_window_set_selection_mode(AgWindow *window, gboolean state) ag_window_set_selection_mode(AgWindow *window, gboolean state)
{ {
GtkStyleContext *style; GtkStyleContext *style;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
style = gtk_widget_get_style_context(priv->header_bar); style = gtk_widget_get_style_context(priv->header_bar);
@ -1765,7 +1770,7 @@ ag_window_delete_action(GSimpleAction *action,
GList *selection, GList *selection,
*item; *item;
AgWindow *window = AG_WINDOW(user_data); AgWindow *window = AG_WINDOW(user_data);
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
AgDb *db = ag_db_get(); AgDb *db = ag_db_get();
selection = ag_icon_view_get_selected_items(AG_ICON_VIEW(priv->chart_list)); selection = ag_icon_view_get_selected_items(AG_ICON_VIEW(priv->chart_list));
@ -1818,9 +1823,7 @@ ag_window_connection_action(GSimpleAction *action,
GVariant *current_state; GVariant *current_state;
const gchar *state; const gchar *state;
gchar *js_code = NULL; gchar *js_code = NULL;
AgWindowPrivate *priv = ag_window_get_instance_private( GET_PRIV(AG_WINDOW(user_data));
AG_WINDOW(user_data)
);
static gchar *js = "aspects = document.getElementById('aspects');\n" \ static gchar *js = "aspects = document.getElementById('aspects');\n" \
"antiscia = document.getElementById('antiscia');\n" \ "antiscia = document.getElementById('antiscia');\n" \
"aspects.setAttribute('display', '%s');\n" \ "aspects.setAttribute('display', '%s');\n" \
@ -1877,7 +1880,7 @@ static GActionEntry win_entries[] = {
static void static void
ag_window_display_changed(GSettings *settings, gchar *key, AgWindow *window) ag_window_display_changed(GSettings *settings, gchar *key, AgWindow *window)
{ {
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
/* The planet symbols are redrawn only if aspect_table_populated is /* The planet symbols are redrawn only if aspect_table_populated is
* set to FALSE */ * set to FALSE */
@ -1924,7 +1927,8 @@ ag_window_list_item_activated_cb(AgIconView *icon_view,
const GtkTreePath *path, const GtkTreePath *path,
AgWindow *window) AgWindow *window)
{ {
AgWindowPrivate *priv = ag_window_get_instance_private(window); AgChart *chart;
GET_PRIV(window);
AgDb *db = ag_db_get(); AgDb *db = ag_db_get();
GError *err = NULL; GError *err = NULL;
AgDbChartSave *save_data; AgDbChartSave *save_data;
@ -1968,7 +1972,7 @@ ag_window_list_item_activated_cb(AgIconView *icon_view,
g_clear_object(&(priv->chart)); g_clear_object(&(priv->chart));
} }
if ((priv->chart = ag_chart_new_from_db_save( if ((chart = ag_chart_new_from_db_save(
priv->saved_data, priv->saved_data,
FALSE, FALSE,
&err &err
@ -1985,6 +1989,8 @@ ag_window_list_item_activated_cb(AgIconView *icon_view,
return; return;
} }
ag_window_set_chart(window, chart);
ag_window_update_from_chart(window); ag_window_update_from_chart(window);
ag_window_change_tab(window, "chart"); ag_window_change_tab(window, "chart");
@ -1995,7 +2001,7 @@ ag_window_list_selection_changed_cb(AgIconView *view, AgWindow *window)
{ {
GList *selection; GList *selection;
guint count; guint count;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
selection = ag_icon_view_get_selected_items(view); selection = ag_icon_view_get_selected_items(view);
@ -2020,7 +2026,7 @@ ag_window_city_matches(GtkEntryCompletion *city_comp,
GtkTreeIter *iter, GtkTreeIter *iter,
AgWindow *window) AgWindow *window)
{ {
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
gchar *ccode, gchar *ccode,
*name, *name,
*normalized_name, *normalized_name,
@ -2077,7 +2083,7 @@ ag_window_init(AgWindow *window)
GtkCellRenderer *house_system_renderer, GtkCellRenderer *house_system_renderer,
*display_theme_renderer; *display_theme_renderer;
WebKitUserContentManager *manager = webkit_user_content_manager_new(); WebKitUserContentManager *manager = webkit_user_content_manager_new();
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
gtk_widget_init_template(GTK_WIDGET(window)); gtk_widget_init_template(GTK_WIDGET(window));
@ -2188,7 +2194,7 @@ ag_window_init(AgWindow *window)
NULL NULL
); );
priv->chart = NULL; ag_window_set_chart(window, NULL);
g_action_map_add_action_entries( g_action_map_add_action_entries(
G_ACTION_MAP(window), G_ACTION_MAP(window),
@ -2204,7 +2210,7 @@ ag_window_init(AgWindow *window)
static void static void
ag_window_dispose(GObject *gobject) ag_window_dispose(GObject *gobject)
{ {
AgWindowPrivate *priv = ag_window_get_instance_private(AG_WINDOW(gobject)); GET_PRIV(AG_WINDOW(gobject));
g_clear_object(&priv->settings); g_clear_object(&priv->settings);
@ -2215,7 +2221,7 @@ static void
ag_window_name_changed_cb(GtkEntry *name_entry, AgWindow *window) ag_window_name_changed_cb(GtkEntry *name_entry, AgWindow *window)
{ {
const gchar *name; const gchar *name;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
name = gtk_entry_get_text(name_entry); name = gtk_entry_get_text(name_entry);
@ -2262,7 +2268,7 @@ static void
ag_window_country_changed_callback(GtkSearchEntry *country, AgWindow *window) ag_window_country_changed_callback(GtkSearchEntry *country, AgWindow *window)
{ {
struct cc_search search; struct cc_search search;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
search.target = gtk_entry_get_text(GTK_ENTRY(country)); search.target = gtk_entry_get_text(GTK_ENTRY(country));
search.ret_iter = NULL; search.ret_iter = NULL;
@ -2316,7 +2322,7 @@ static void
ag_window_city_changed_callback(GtkSearchEntry *city, AgWindow *window) ag_window_city_changed_callback(GtkSearchEntry *city, AgWindow *window)
{ {
struct cc_search search; struct cc_search search;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
search.target = gtk_entry_get_text(GTK_ENTRY(city)); search.target = gtk_entry_get_text(GTK_ENTRY(city));
search.ret_iter = NULL; search.ret_iter = NULL;
@ -2404,14 +2410,36 @@ ag_window_city_changed_callback(GtkSearchEntry *city, AgWindow *window)
} }
} }
void static void
ag_window_house_system_changed_cb(GtkComboBox *combo_box,
AgWindow *window)
{
GtkTreeIter iter;
GsweHouseSystem house_system;
GET_PRIV(window);
gtk_combo_box_get_active_iter(combo_box, &iter);
gtk_tree_model_get(
GTK_TREE_MODEL(priv->house_system_model), &iter,
0, &house_system,
-1
);
if (priv->chart) {
gswe_moment_set_house_system(GSWE_MOMENT(priv->chart), house_system);
}
g_debug("House system changed: %d", house_system);
}
static void
ag_window_display_theme_changed_cb(GtkComboBox *combo_box, ag_window_display_theme_changed_cb(GtkComboBox *combo_box,
AgWindow *window) AgWindow *window)
{ {
GtkTreeIter iter; GtkTreeIter iter;
gint theme_id; gint theme_id;
AgDisplayTheme *theme; AgDisplayTheme *theme;
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
gtk_combo_box_get_active_iter(combo_box, &iter); gtk_combo_box_get_active_iter(combo_box, &iter);
gtk_tree_model_get( gtk_tree_model_get(
@ -2427,7 +2455,7 @@ ag_window_display_theme_changed_cb(GtkComboBox *combo_box,
static void static void
ag_window_destroy(GtkWidget *widget) ag_window_destroy(GtkWidget *widget)
{ {
AgWindowPrivate *priv = ag_window_get_instance_private(AG_WINDOW(widget)); GET_PRIV(AG_WINDOW(widget));
// Destroy the signal handlers on priv->stack, as “tab” switching // Destroy the signal handlers on priv->stack, as “tab” switching
// can cause trouble during destroy. However, this function might // can cause trouble during destroy. However, this function might
@ -2446,6 +2474,48 @@ ag_window_selection_mode_cancel_cb(GtkButton *button, AgWindow *window)
ag_window_set_selection_mode(window, FALSE); ag_window_set_selection_mode(window, FALSE);
} }
static void
ag_window_set_property(GObject *gobject,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
AgWindow *window = AG_WINDOW(gobject);
switch (prop_id) {
case PROP_CHART:
ag_window_set_chart(window, (g_value_get_object(value)));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec);
break;
}
}
static void
ag_window_get_property(GObject *gobject,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
GET_PRIV(AG_WINDOW(gobject));
switch (prop_id) {
case PROP_CHART:
g_value_set_object(value, priv->chart);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec);
break;
}
}
static void static void
ag_window_class_init(AgWindowClass *klass) ag_window_class_init(AgWindowClass *klass)
{ {
@ -2454,6 +2524,25 @@ ag_window_class_init(AgWindowClass *klass)
widget_class->destroy = ag_window_destroy; widget_class->destroy = ag_window_destroy;
gobject_class->dispose = ag_window_dispose; gobject_class->dispose = ag_window_dispose;
gobject_class->set_property = ag_window_set_property;
gobject_class->get_property = ag_window_get_property;
properties[PROP_CHART] = g_param_spec_object(
"chart",
"Chart",
"The AgChart associated with this window",
AG_TYPE_CHART,
G_PARAM_STATIC_NICK
| G_PARAM_STATIC_NAME
| G_PARAM_STATIC_BLURB
| G_PARAM_READABLE
| G_PARAM_WRITABLE
);
g_object_class_install_property(
gobject_class,
PROP_CHART,
properties[PROP_CHART]
);
gtk_widget_class_set_template_from_resource( gtk_widget_class_set_template_from_resource(
widget_class, widget_class,
@ -2652,6 +2741,10 @@ ag_window_class_init(AgWindowClass *klass)
widget_class, widget_class,
ag_window_selection_mode_cancel_cb ag_window_selection_mode_cancel_cb
); );
gtk_widget_class_bind_template_callback(
widget_class,
ag_window_house_system_changed_cb
);
} }
static gboolean static gboolean
@ -2660,7 +2753,7 @@ ag_window_configure_event_cb(GtkWidget *widget,
gpointer user_data) gpointer user_data)
{ {
AgWindow *window = AG_WINDOW(widget); AgWindow *window = AG_WINDOW(widget);
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
ag_window_settings_save( ag_window_settings_save(
GTK_WINDOW(window), GTK_WINDOW(window),
@ -2673,8 +2766,8 @@ ag_window_configure_event_cb(GtkWidget *widget,
GtkWidget * GtkWidget *
ag_window_new(AgApp *app) ag_window_new(AgApp *app)
{ {
AgWindow *window = g_object_new(AG_TYPE_WINDOW, NULL); AgWindow *window = g_object_new(AG_TYPE_WINDOW, NULL);
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
// TODO: translate this error message! // TODO: translate this error message!
webkit_web_view_load_html( webkit_web_view_load_html(
@ -2712,13 +2805,12 @@ ag_window_new(AgApp *app)
void void
ag_window_set_chart(AgWindow *window, AgChart *chart) ag_window_set_chart(AgWindow *window, AgChart *chart)
{ {
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
if (priv->chart != NULL) { if (priv->chart != NULL) {
g_signal_handlers_disconnect_by_func( g_signal_handler_disconnect(
priv->chart, priv->chart,
ag_window_chart_changed, priv->chart_changed_handler
window
); );
g_clear_object(&(priv->chart)); g_clear_object(&(priv->chart));
} }
@ -2726,20 +2818,27 @@ ag_window_set_chart(AgWindow *window, AgChart *chart)
ag_db_chart_save_unref(priv->saved_data); ag_db_chart_save_unref(priv->saved_data);
priv->chart = chart; priv->chart = chart;
g_signal_connect(
priv->chart, if (chart) {
"changed", priv->chart_changed_handler = g_signal_connect(
G_CALLBACK(ag_window_chart_changed), priv->chart,
window "changed",
); G_CALLBACK(ag_window_chart_changed),
g_object_ref(chart); window
priv->saved_data = ag_chart_get_db_save(chart, -1); );
g_object_ref(chart);
priv->saved_data = ag_chart_get_db_save(chart, -1);
} else {
priv->saved_data = NULL;
}
g_object_notify_by_pspec(G_OBJECT(window), properties[PROP_CHART]);
} }
AgChart * AgChart *
ag_window_get_chart(AgWindow *window) ag_window_get_chart(AgWindow *window)
{ {
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
return priv->chart; return priv->chart;
} }
@ -2799,7 +2898,7 @@ ag_window_settings_save(GtkWindow *window, GSettings *settings)
void void
ag_window_change_tab(AgWindow *window, const gchar *tab_name) ag_window_change_tab(AgWindow *window, const gchar *tab_name)
{ {
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
gtk_stack_set_visible_child_name(GTK_STACK(priv->stack), tab_name); gtk_stack_set_visible_child_name(GTK_STACK(priv->stack), tab_name);
g_action_change_state( g_action_change_state(
@ -2868,7 +2967,7 @@ ag_window_reload_chart_list(AgWindow *window)
AgDb *db = ag_db_get(); AgDb *db = ag_db_get();
GError *err = NULL; GError *err = NULL;
GList *chart_list = ag_db_chart_get_list(db, &err); GList *chart_list = ag_db_chart_get_list(db, &err);
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
ag_icon_view_remove_all(AG_ICON_VIEW(priv->chart_list)); ag_icon_view_remove_all(AG_ICON_VIEW(priv->chart_list));
@ -2904,7 +3003,7 @@ ag_window_reload_chart_list(AgWindow *window)
gboolean gboolean
ag_window_is_usable(AgWindow *window) ag_window_is_usable(AgWindow *window)
{ {
AgWindowPrivate *priv = ag_window_get_instance_private(window); GET_PRIV(window);
return (priv->current_tab == priv->tab_list); return (priv->current_tab == priv->tab_list);
} }

View File

@ -366,7 +366,7 @@
<object class="GtkLabel" id="name_label"> <object class="GtkLabel" id="name_label">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="label" translatable="yes" context="Chart edit, Name label">Name</property> <property name="label" translatable="yes">Name</property>
</object> </object>
<packing> <packing>
<property name="left_attach">0</property> <property name="left_attach">0</property>
@ -382,385 +382,416 @@
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="top_attach">0</property> <property name="top_attach">0</property>
<property name="width">6</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="country_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="Chart edit, Country label">Country</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkSearchEntry" id="country">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="primary_icon_name">edit-find-symbolic</property>
<property name="primary_icon_activatable">False</property>
<property name="primary_icon_sensitive">False</property>
<signal name="search-changed" handler="ag_window_country_changed_callback" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
<property name="width">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="city_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="Chart edit, City label">City</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkSearchEntry" id="city">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="primary_icon_name">edit-find-symbolic</property>
<property name="primary_icon_activatable">False</property>
<property name="primary_icon_sensitive">False</property>
<signal name="search-changed" handler="ag_window_city_changed_callback" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">2</property>
<property name="width">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="latitude_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="Chart edit, Latitude label">Latitude</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
<property name="width">2</property> <property name="width">2</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkRadioButton" id="north_lat"> <object class="GtkFrame" id="location_frame">
<property name="label" translatable="yes" context="Chart edit, latitude North label">North</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">4</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="south_lat">
<property name="label" translatable="yes" context="Chart edit, latitude South">South</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">north_lat</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">4</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="latitude">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">latitude_adjust</property>
<property name="digits">6</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">5</property>
<property name="width">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="longitude_label">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="label" translatable="yes" context="Chart edit, Longitude label">Longitude</property> <property name="label_xalign">0</property>
</object> <property name="shadow_type">none</property>
<packing> <child type="label">
<property name="left_attach">2</property> <object class="GtkLabel" id="location_frame_label">
<property name="top_attach">3</property>
<property name="width">2</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="east_long">
<property name="label" translatable="yes" context="Chart edit, longitude East">East</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">4</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="west_long">
<property name="label" translatable="yes" context="Chart edit, longitude West">West</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">east_long</property>
</object>
<packing>
<property name="left_attach">3</property>
<property name="top_attach">4</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="longitude">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">longitude_adjust</property>
<property name="digits">6</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">5</property>
<property name="width">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="year_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="Chart edit, Year label">Year</property>
</object>
<packing>
<property name="left_attach">4</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="year">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">year_adjust</property>
</object>
<packing>
<property name="left_attach">4</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="month_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="Chart edit, Month label">Month</property>
</object>
<packing>
<property name="left_attach">5</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="month">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">month_adjust</property>
</object>
<packing>
<property name="left_attach">5</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="day_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="Chart edit, Day label">Day</property>
</object>
<packing>
<property name="left_attach">6</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="day">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">day_adjust</property>
</object>
<packing>
<property name="left_attach">6</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="hour_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="Chart edit, Hour label">Hour</property>
</object>
<packing>
<property name="left_attach">4</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="hour">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">hour_adjust</property>
</object>
<packing>
<property name="left_attach">4</property>
<property name="top_attach">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="minute_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="Chart edit, Minute label">Minute</property>
</object>
<packing>
<property name="left_attach">5</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="minute">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">minute_adjust</property>
</object>
<packing>
<property name="left_attach">5</property>
<property name="top_attach">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="second_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="Chart edit, Second label">Second</property>
</object>
<packing>
<property name="left_attach">6</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="second">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">second_adjust</property>
</object>
<packing>
<property name="left_attach">6</property>
<property name="top_attach">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="timezone_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="Chart edit, Timezone label">Timezone</property>
</object>
<packing>
<property name="left_attach">7</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="timezone">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">timezone_adjust</property>
<property name="digits">1</property>
</object>
<packing>
<property name="left_attach">7</property>
<property name="top_attach">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="house_system_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="Chart edit, House system label">House system</property>
</object>
<packing>
<property name="left_attach">4</property>
<property name="top_attach">5</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="house_system">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">house_system_model</property>
<property name="id_column">1</property>
</object>
<packing>
<property name="left_attach">5</property>
<property name="top_attach">5</property>
<property name="width">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="note_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes" context="Chart edit, Note label">Note</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">6</property>
<property name="width">7</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="note_scroll">
<property name="height_request">300</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTextView" id="note">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">False</property>
<property name="buffer">note_buffer</property> <property name="label" translatable="yes">Location</property>
</object>
</child>
<child>
<object class="GtkGrid" id="location_grid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="country_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Country</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">2</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkSearchEntry" id="country">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="primary_icon_name">edit-find-symbolic</property>
<property name="primary_icon_activatable">False</property>
<property name="primary_icon_sensitive">False</property>
<signal name="search-changed" handler="ag_window_country_changed_callback" swapped="no"/>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="width">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="city_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">City</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">0</property>
<property name="width">2</property>
</packing>
</child>
<child>
<object class="GtkSearchEntry" id="city">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="primary_icon_name">edit-find-symbolic</property>
<property name="primary_icon_activatable">False</property>
<property name="primary_icon_sensitive">False</property>
<signal name="search-changed" handler="ag_window_city_changed_callback" swapped="no"/>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">1</property>
<property name="width">2</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="latitude_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Latitude</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
<property name="width">2</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="north_lat">
<property name="label" translatable="yes">North</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="south_lat">
<property name="label" translatable="yes">South</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">north_lat</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="latitude">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">latitude_adjust</property>
<property name="digits">6</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">4</property>
<property name="width">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="longitude_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Longitude</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">2</property>
<property name="width">2</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="east_long">
<property name="label" translatable="yes">East</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="west_long">
<property name="label" translatable="yes">West</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">east_long</property>
</object>
<packing>
<property name="left_attach">3</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="longitude">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">longitude_adjust</property>
<property name="digits">6</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">4</property>
<property name="width">2</property>
</packing>
</child>
</object> </object>
</child> </child>
</object> </object>
<packing> <packing>
<property name="left_attach">0</property> <property name="left_attach">0</property>
<property name="top_attach">7</property> <property name="top_attach">1</property>
<property name="width">7</property> <property name="width">2</property>
</packing> </packing>
</child> </child><!-- location_frame -->
<child>
<object class="GtkFrame" id="time_frame">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child type="label">
<object class="GtkLabel" id="time_frame_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Date and time</property>
</object>
</child>
<child>
<object class="GtkGrid" id="time_grid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="row_homogeneous">True</property>
<property name="column_homogeneous">True</property>
<child>
<object class="GtkLabel" id="year_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Year</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="year">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">year_adjust</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="month_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Month</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="month">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">month_adjust</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="day_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Day</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="day">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">day_adjust</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="hour_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Hour</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="hour">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">hour_adjust</property>
</object>
<packing>
<property name="left_attach">3</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="minute_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Minute</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="minute">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">minute_adjust</property>
</object>
<packing>
<property name="left_attach">3</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="second_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Second</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="second">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">second_adjust</property>
</object>
<packing>
<property name="left_attach">3</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="timezone_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Timezone</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="timezone">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">timezone_adjust</property>
<property name="digits">1</property>
</object>
<packing>
<property name="left_attach">3</property>
<property name="top_attach">3</property>
</packing>
</child>
</object>
</child><!-- time_grid -->
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">1</property>
</packing>
</child><!-- time_frame -->
<child>
<object class="GtkFrame" id="notes_frame">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child type="label">
<object class="GtkLabel" id="notes_frame_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Notes</property>
</object>
</child>
<child>
<object class="GtkScrolledWindow" id="notes_scroll">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="shadow_type">in</property>
<property name="min_content_height">300</property>
<child>
<object class="GtkTextView" id="note">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="buffer">note_buffer</property>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
<property name="width">3</property>
</packing>
</child><!-- notes_frame -->
</object> </object>
<packing> <packing>
<property name="name">edit</property> <property name="name">edit</property>
@ -797,6 +828,18 @@
<property name="action_target">'antiscia'</property> <property name="action_target">'antiscia'</property>
</object> </object>
</child> </child>
<child>
<object class="GtkComboBox" id="house_system">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">house_system_model</property>
<property name="id_column">1</property>
<signal name="changed" handler="ag_window_house_system_changed_cb" swapped="no"/>
</object>
<packing>
<property name="pack_type">start</property>
</packing>
</child>
<child> <child>
<object class="GtkComboBox" id="display_theme"> <object class="GtkComboBox" id="display_theme">
<property name="visible">True</property> <property name="visible">True</property>