From 46cb2b24a5dd3f52e179cbf7020705a35b7fd78c Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Fri, 18 Jul 2014 21:06:50 +0200 Subject: [PATCH] Add default house system to preferences dialog --- src/ag-preferences.c | 64 ++++++++++++++++++++++++++++-- src/resources/ui/ag-preferences.ui | 34 ++++++++++++++++ 2 files changed, 95 insertions(+), 3 deletions(-) diff --git a/src/ag-preferences.c b/src/ag-preferences.c index a93c32a..aaffa8b 100644 --- a/src/ag-preferences.c +++ b/src/ag-preferences.c @@ -1,4 +1,5 @@ #include +#include #include "ag-settings.h" #include "ag-preferences.h" @@ -9,6 +10,8 @@ typedef struct _AgPreferencesPrivate { GtkCheckButton *maximized; GtkCheckButton *planet_chars; GtkCheckButton *aspect_chars; + GtkWidget *house_system; + GtkListStore *house_system_model; AgSettings *settings; } AgPreferencesPrivate; @@ -62,19 +65,67 @@ ag_preferences_class_init(AgPreferencesClass *klass) AgPreferences, aspect_chars ); + gtk_widget_class_bind_template_child_private( + widget_class, + AgPreferences, + house_system + ); + gtk_widget_class_bind_template_child_private( + widget_class, + AgPreferences, + house_system_model + ); +} + +static void +ag_preferences_add_house_system(GsweHouseSystemInfo *house_system_info, + AgPreferencesPrivate *priv) +{ + GtkTreeIter iter; + GEnumClass *house_system_type = g_type_class_ref(GSWE_TYPE_HOUSE_SYSTEM); + GEnumValue *enum_value; + + enum_value = g_enum_get_value( + house_system_type, + gswe_house_system_info_get_house_system(house_system_info) + ); + gtk_list_store_append(priv->house_system_model, &iter); + gtk_list_store_set( + priv->house_system_model, &iter, + 0, enum_value->value_nick, + 1, gswe_house_system_info_get_name(house_system_info), + -1 + ); } static void ag_preferences_init(AgPreferences *prefs) { - AgPreferencesPrivate *priv; GSettings *settings_window, *settings_main; + GList *house_system_list = gswe_all_house_systems(); + AgPreferencesPrivate *priv = ag_preferences_get_instance_private(prefs); + GtkCellRenderer *cell_renderer; - priv = ag_preferences_get_instance_private(prefs); gtk_widget_init_template(GTK_WIDGET(prefs)); - priv->settings = ag_settings_get(); + g_list_foreach( + house_system_list, + (GFunc)ag_preferences_add_house_system, + priv + ); + cell_renderer = gtk_cell_renderer_text_new(); + gtk_cell_layout_pack_start( + GTK_CELL_LAYOUT(priv->house_system), + cell_renderer, + TRUE + ); + gtk_cell_layout_set_attributes( + GTK_CELL_LAYOUT(priv->house_system), + cell_renderer, + "text", 1, + NULL + ); settings_window = ag_settings_peek_window_settings(priv->settings); g_settings_bind( @@ -100,6 +151,13 @@ ag_preferences_init(AgPreferences *prefs) "active", G_SETTINGS_BIND_DEFAULT ); + g_settings_bind( + settings_main, + "default-house-system", + priv->house_system, + "active-id", + G_SETTINGS_BIND_DEFAULT + ); } void diff --git a/src/resources/ui/ag-preferences.ui b/src/resources/ui/ag-preferences.ui index 54bc099..9b40de3 100644 --- a/src/resources/ui/ag-preferences.ui +++ b/src/resources/ui/ag-preferences.ui @@ -2,6 +2,14 @@ + + + + + + + +