diff options
Diffstat (limited to 'src/config.c')
-rw-r--r-- | src/config.c | 319 |
1 files changed, 0 insertions, 319 deletions
diff --git a/src/config.c b/src/config.c deleted file mode 100644 index 680cbdf..0000000 --- a/src/config.c +++ /dev/null @@ -1,319 +0,0 @@ -/** - * @file - * Configuration file handling functions - */ - -/* - * Copyright (C) 2012-2013 Otto-von-Guericke-Universität Magdeburg - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <stdio.h> - -#include <glib.h> -#include <glib/gprintf.h> -#include <glib/gstdio.h> - -#include <gdk/gdk.h> - -#include "experiment-player.h" - -static inline void set_default_string(const gchar *group_name, const gchar *key, - const gchar *string); -static inline void set_default_boolean(const gchar *group_name, const gchar *key, - gboolean boolean); - -static const gchar *get_group_by_actor(const gchar *actor); -static const gchar *get_group_by_window(const gchar *window); - -static GKeyFile *keyfile; -static gchar *filename = NULL; - -void -config_init_key_file(void) -{ - keyfile = g_key_file_new(); - - /* may fail if no serialized configuration exists */ - g_key_file_load_from_data_dirs(keyfile, CONFIG_KEY_FILE, &filename, - G_KEY_FILE_KEEP_COMMENTS, NULL); - - if (filename == NULL) - filename = g_build_filename(g_get_user_data_dir(), - CONFIG_KEY_FILE, NULL); - - /* initialize defaults */ - set_default_boolean("Global", "Save-Window-Properties", TRUE); - - set_default_string("Directories", "Quick-Open", DEFAULT_QUICKOPEN_DIR); - set_default_string("Directories", "Formats", DEFAULT_FORMATS_DIR); - -#ifdef DEFAULT_INTERACTIVE_FORMAT_FONT - set_default_string("Wizard Transcript", "Default-Format-Font", - DEFAULT_INTERACTIVE_FORMAT_FONT); - set_default_string("Proband Transcript", "Default-Format-Font", - DEFAULT_INTERACTIVE_FORMAT_FONT); -#endif -#ifdef DEFAULT_INTERACTIVE_FORMAT_FGCOLOR - set_default_string("Wizard Transcript", "Default-Format-Text-Color", - DEFAULT_INTERACTIVE_FORMAT_FGCOLOR); - set_default_string("Proband Transcript", "Default-Format-Text-Color", - DEFAULT_INTERACTIVE_FORMAT_FGCOLOR); -#endif -#ifdef DEFAULT_INTERACTIVE_FORMAT_BGCOLOR - set_default_string("Wizard Transcript", "Default-Format-BG-Color", - DEFAULT_INTERACTIVE_FORMAT_BGCOLOR); - set_default_string("Proband Transcript", "Default-Format-BG-Color", - DEFAULT_INTERACTIVE_FORMAT_BGCOLOR); -#endif -} - -static inline void -set_default_string(const gchar *group_name, const gchar *key, - const gchar *string) -{ - if (!g_key_file_has_key(keyfile, group_name, key, NULL)) - g_key_file_set_string(keyfile, group_name, key, string); -} - -static inline void -set_default_boolean(const gchar *group_name, const gchar *key, - gboolean boolean) -{ - if (!g_key_file_has_key(keyfile, group_name, key, NULL)) - g_key_file_set_boolean(keyfile, group_name, key, boolean); -} - -void -config_set_save_window_properties(gboolean enabled) -{ - g_key_file_set_boolean(keyfile, "Global", - "Save-Window-Properties", enabled); -} - -gboolean -config_get_save_window_properties(void) -{ - return g_key_file_get_boolean(keyfile, "Global", - "Save-Window-Properties", NULL); -} - -static const gchar * -get_group_by_window(const gchar *window) -{ - static gchar group[255]; - - g_snprintf(group, sizeof(group), "%s Window", window); - return group; -} - -void -config_set_window_geometry(const gchar *window, const gchar *geometry) -{ - g_key_file_set_string(keyfile, get_group_by_window(window), - "Geometry", geometry); -} - -gchar * -config_get_window_geometry(const gchar *window) -{ - return g_key_file_get_string(keyfile, get_group_by_window(window), - "Geometry", NULL); -} - -void -config_set_window_state(const gchar *window, GdkWindowState state) -{ - g_key_file_set_integer(keyfile, get_group_by_window(window), - "State", state); -} - -GdkWindowState -config_get_window_state(const gchar *window) -{ - return g_key_file_get_integer(keyfile, get_group_by_window(window), - "State", NULL); -} - -void -config_set_quickopen_directory(const gchar *dir) -{ - g_key_file_set_string(keyfile, "Directories", "Quick-Open", dir); -} - -gchar * -config_get_quickopen_directory(void) -{ - return g_key_file_get_string(keyfile, "Directories", "Quick-Open", NULL); -} - -void -config_set_formats_directory(const gchar *dir) -{ - g_key_file_set_string(keyfile, "Directories", "Formats", dir); -} - -gchar * -config_get_formats_directory(void) -{ - return g_key_file_get_string(keyfile, "Directories", "Formats", NULL); -} - -static const gchar * -get_group_by_actor(const gchar *actor) -{ - static gchar group[255]; - - g_snprintf(group, sizeof(group), "%s Transcript", actor); - return group; -} - -/** @private */ -void -config_generic_set_transcript_font(const gchar *actor, const gchar *key, - const PangoFontDescription *font) -{ - const gchar *group = get_group_by_actor(actor); - - if (font == NULL) { - g_key_file_remove_key(keyfile, group, key, NULL); - } else { - gchar *font_name = pango_font_description_to_string(font); - g_key_file_set_string(keyfile, group, key, font_name); - g_free(font_name); - } -} - -/** @private */ -PangoFontDescription * -config_generic_get_transcript_font(const gchar *actor, const gchar *key) -{ - gchar *font_name; - PangoFontDescription *font_desc = NULL; - - font_name = g_key_file_get_string(keyfile, get_group_by_actor(actor), - key, NULL); - if (font_name != NULL) { - font_desc = pango_font_description_from_string(font_name); - g_free(font_name); - } - - return font_desc; -} - -/** @private */ -void -config_generic_set_transcript_color(const gchar *actor, const gchar *key, - const GdkColor *color) -{ - const gchar *group = get_group_by_actor(actor); - - if (color == NULL) { - g_key_file_remove_key(keyfile, group, key, NULL); - } else { - gchar *color_name = gdk_color_to_string(color); - g_key_file_set_string(keyfile, group, key, color_name); - g_free(color_name); - } -} - -/** @private */ -gboolean -config_generic_get_transcript_color(const gchar *actor, const gchar *key, - GdkColor *color) -{ - gchar *color_name; - - color_name = g_key_file_get_string(keyfile, get_group_by_actor(actor), - key, NULL); - if (color_name == NULL) - return FALSE; - - gdk_color_parse(color_name, color); - g_free(color_name); - - return TRUE; -} - -void -config_set_transcript_reverse_mode(const gchar *actor, gboolean reverse) -{ - g_key_file_set_boolean(keyfile, get_group_by_actor(actor), - "Widget-Reverse-Mode", reverse); -} - -gboolean -config_get_transcript_reverse_mode(const gchar *actor) -{ - return g_key_file_get_boolean(keyfile, get_group_by_actor(actor), - "Widget-Reverse-Mode", NULL); -} - -void -config_set_transcript_alignment(const gchar *actor, PangoAlignment alignment) -{ - static gchar **values = NULL; - - if (values == NULL) { - gchar *possible_values; - - pango_parse_enum(PANGO_TYPE_ALIGNMENT, "", NULL, - FALSE, &possible_values); - values = g_strsplit(possible_values, "/", 0); - g_free(possible_values); - } - - g_key_file_set_string(keyfile, get_group_by_actor(actor), - "Widget-Alignment", values[alignment]); -} - -PangoAlignment -config_get_transcript_alignment(const gchar *actor) -{ - gchar *value; - gint alignment = (gint)PANGO_ALIGN_LEFT; - - value = g_key_file_get_string(keyfile, get_group_by_actor(actor), - "Widget-Alignment", NULL); - if (value == NULL) - return PANGO_ALIGN_LEFT; - - pango_parse_enum(PANGO_TYPE_ALIGNMENT, value, &alignment, FALSE, NULL); - g_free(value); - - return (PangoAlignment)alignment; -} - -void -config_save_key_file(void) -{ - gchar *data; - gsize length; - FILE *file; - - data = g_key_file_to_data(keyfile, &length, NULL); - - file = g_fopen(filename, "w"); - if (file != NULL) { - fwrite(data, (size_t)length, 1, file); - fclose(file); - } - - g_free(data); -} |