Skip to content

Commit

Permalink
Save settings.
Browse files Browse the repository at this point in the history
  • Loading branch information
wojciech-graj committed Apr 6, 2023
1 parent 86dfcaf commit 100e254
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 5 deletions.
48 changes: 45 additions & 3 deletions src/ui/setting.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
#include "thread.h"
#include "version.h"

#include <stdio.h>

struct Setting {
char *id;
GtkToggleButton *button;
Expand All @@ -36,20 +38,23 @@ struct Setting settings[] = {
},
{
.id = "local_time",
.val = &gs_gmt,
.val = &gs_localtime,
},
{
.id = "invert_scroll",
.val = &gs_invert_scroll,
},
};

gboolean gs_gmt = FALSE;
gboolean gs_localtime = TRUE;
gboolean gs_clouds = TRUE;
gboolean gs_lighting = TRUE;
gboolean gs_invert_scroll = FALSE;
enum ReferenceFrame gs_reference_frame = REFERENCE_FRAME_FIXED;

static const char *SETTINGS_FILENAME = ".orbvis.conf";
static gchar *settings_filepath;

static GtkWindow *window_settings;

static void on_settings_clicked(GtkToolButton *toolbutton, gpointer user_data);
Expand All @@ -58,6 +63,9 @@ static void on_setting_toggled(GtkToggleButton *togglebutton, gpointer user_data
static void on_fetch_data_clicked(GtkButton *button, gpointer user_data);
static gboolean on_reference_frame_state_set(GtkSwitch *widget, gboolean state, gpointer user_data);

static void settings_load(void);
static void settings_save(void);

void on_settings_clicked(GtkToolButton *toolbutton, gpointer user_data)
{
(void)toolbutton;
Expand Down Expand Up @@ -105,6 +113,30 @@ gboolean on_reference_frame_state_set(GtkSwitch *widget, gboolean state, gpointe
return FALSE;
}

void settings_save(void)
{
g_autoptr(GKeyFile) settings_file = g_key_file_new();
unsigned i;
for (i = 0; i < 4; i++)
g_key_file_set_boolean(settings_file, "settings", settings[i].id, *settings[i].val);
g_key_file_save_to_file(settings_file, settings_filepath, NULL);
}

void settings_load(void)
{
settings_filepath = g_build_filename(g_get_user_config_dir(), SETTINGS_FILENAME, NULL);
g_autoptr(GKeyFile) settings_file = g_key_file_new();
if (g_key_file_load_from_file(settings_file, settings_filepath, G_KEY_FILE_NONE, NULL)) {
unsigned i;
for (i = 0; i < 4; i++) {
g_autoptr(GError) error = NULL;
gboolean val = g_key_file_get_boolean(settings_file, "settings", settings[i].id, &error);
if (!error)
*settings[i].val = val;
}
}
}

void setting_init(GtkBuilder *builder)
{
gtk_builder_add_callback_symbols(builder,
Expand All @@ -120,7 +152,17 @@ void setting_init(GtkBuilder *builder)
GtkLabel *about = GTK_LABEL(gtk_builder_get_object(builder, "about"));
gtk_label_set_text(about, ABOUT_STRING);

settings_load();

unsigned i;
for (i = 0; i < 4; i++)
for (i = 0; i < 4; i++) {
settings[i].button = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, settings[i].id));
gtk_toggle_button_set_active(settings[i].button, *settings[i].val);
}
}

void setting_deinit(void)
{
settings_save();
g_free(settings_filepath);
}
3 changes: 2 additions & 1 deletion src/ui/setting.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,13 @@ enum ReferenceFrame {
REFERENCE_FRAME_INERTIAL,
};

extern gboolean gs_gmt;
extern gboolean gs_localtime;
extern gboolean gs_clouds;
extern gboolean gs_lighting;
extern gboolean gs_invert_scroll;
extern enum ReferenceFrame gs_reference_frame;

void setting_init(GtkBuilder *builder);
void setting_deinit(void);

#endif /* __SETTING_H__ */
2 changes: 1 addition & 1 deletion src/ui/toolbar.c
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ void toolbar_init(GtkBuilder *builder)
void toolbar_tic(void)
{
if (!gtk_widget_has_focus(GTK_WIDGET(time_entry)))
gtk_entry_set_text(time_entry, epoch_to_iso8601(e_phys.epoch_ms, gs_gmt, TRUE));
gtk_entry_set_text(time_entry, epoch_to_iso8601(e_phys.epoch_ms, !gs_localtime, TRUE));
if (!gtk_widget_has_focus(GTK_WIDGET(speed_entry))) {
char buf[16];
g_snprintf(buf, 16, "%.3fx", (double)e_timescale);
Expand Down
1 change: 1 addition & 0 deletions src/ui/ui.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,5 @@ void ui_init(int argc, char ***argv)
void ui_deinit(void)
{
catalog_deinit();
setting_deinit();
}

0 comments on commit 100e254

Please sign in to comment.