diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-06-02 14:54:18 +0200 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-06-02 14:54:18 +0200 |
commit | a4245a50902ee9b399c9aa726fb5281e2719fe57 (patch) | |
tree | e536fdeea6b8a780b2c797799d8d9ced565ff5c1 | |
parent | 54f75db1b82cc5a81c98ed722b3a60c38645919d (diff) | |
download | experiment-player-a4245a50902ee9b399c9aa726fb5281e2719fe57.tar.gz |
save transcript fonts and colors in key-file (config file)
* default widget styles are not handled properly. it must be possible to reset manually chosen fonts/colors (mapped to no key in keyfile)
* default interactive format text attributes should be saved as well
-rw-r--r-- | src/config.c | 99 | ||||
-rw-r--r-- | src/experiment-player.h | 89 | ||||
-rw-r--r-- | src/main.c | 50 |
3 files changed, 236 insertions, 2 deletions
diff --git a/src/config.c b/src/config.c index 1dedf79..eb6c8df 100644 --- a/src/config.c +++ b/src/config.c @@ -8,6 +8,8 @@ #include <glib/gprintf.h> #include <glib/gstdio.h> +#include <gdk/gdk.h> + #include "experiment-player.h" static GKeyFile *keyfile; @@ -22,6 +24,32 @@ config_init_key_file(void) config_set_quickopen_directory(DEFAULT_QUICKOPEN_DIR); config_set_formats_directory(DEFAULT_FORMATS_DIR); + if (DEFAULT_INTERACTIVE_FORMAT_FONT != NULL) + g_key_file_set_string(keyfile, "Wizard Transcript", + "Default-Format-Font", + DEFAULT_INTERACTIVE_FORMAT_FONT); + if (DEFAULT_INTERACTIVE_FORMAT_FGCOLOR != NULL) + g_key_file_set_string(keyfile, "Wizard Transcript", + "Default-Format-Text-Color", + DEFAULT_INTERACTIVE_FORMAT_FGCOLOR); + if (DEFAULT_INTERACTIVE_FORMAT_BGCOLOR != NULL) + g_key_file_set_string(keyfile, "Wizard Transcript", + "Default-Format-BG-Color", + DEFAULT_INTERACTIVE_FORMAT_BGCOLOR); + + if (DEFAULT_INTERACTIVE_FORMAT_FONT != NULL) + g_key_file_set_string(keyfile, "Proband Transcript", + "Default-Format-Font", + DEFAULT_INTERACTIVE_FORMAT_FONT); + if (DEFAULT_INTERACTIVE_FORMAT_FGCOLOR != NULL) + g_key_file_set_string(keyfile, "Proband Transcript", + "Default-Format-Text-Color", + DEFAULT_INTERACTIVE_FORMAT_FGCOLOR); + if (DEFAULT_INTERACTIVE_FORMAT_BGCOLOR != NULL) + g_key_file_set_string(keyfile, "Proband Transcript", + "Default-Format-BG-Color", + DEFAULT_INTERACTIVE_FORMAT_BGCOLOR); + /* 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); @@ -56,6 +84,77 @@ config_get_formats_directory(void) } void +config_generic_set_transcript_font(const gchar *actor, const gchar *key, + const PangoFontDescription *font) +{ + gchar group[255]; + gchar *font_name; + + g_snprintf(group, sizeof(group), "%s Transcript", actor); + + if (font == NULL) { + g_key_file_remove_key(keyfile, group, key, NULL); + } else { + font_name = pango_font_description_to_string(font); + g_key_file_set_string(keyfile, group, key, font_name); + g_free(font_name); + } +} + +PangoFontDescription * +config_generic_get_transcript_font(const gchar *actor, const gchar *key) +{ + gchar group[255]; + gchar *font_name; + PangoFontDescription *font_desc = NULL; + + g_snprintf(group, sizeof(group), "%s Transcript", actor); + font_name = g_key_file_get_string(keyfile, group, key, NULL); + if (font_name != NULL) { + font_desc = pango_font_description_from_string(font_name); + g_free(font_name); + } + + return font_desc; +} + +void +config_generic_set_transcript_color(const gchar *actor, const gchar *key, + const GdkColor *color) +{ + gchar group[255]; + gchar *color_name; + + g_snprintf(group, sizeof(group), "%s Transcript", actor); + + if (color == NULL) { + g_key_file_remove_key(keyfile, group, key, NULL); + } else { + color_name = gdk_color_to_string(color); + g_key_file_set_string(keyfile, group, key, color_name); + g_free(color_name); + } +} + +gboolean +config_generic_get_transcript_color(const gchar *actor, const gchar *key, + GdkColor *color) +{ + gchar group[255]; + gchar *color_name; + + g_snprintf(group, sizeof(group), "%s Transcript", actor); + color_name = g_key_file_get_string(keyfile, group, key, NULL); + if (color_name == NULL) + return FALSE; + + gdk_color_parse(color_name, color); + g_free(color_name); + + return TRUE; +} + +void config_save_key_file(void) { gchar *data; diff --git a/src/experiment-player.h b/src/experiment-player.h index 5750904..9d99879 100644 --- a/src/experiment-player.h +++ b/src/experiment-player.h @@ -4,6 +4,8 @@ #include <glib.h> #include <glib/gprintf.h> +#include <gdk/gdk.h> + #include <gtk/gtk.h> /* @@ -40,6 +42,93 @@ gchar *config_get_quickopen_directory(void); void config_set_formats_directory(const gchar *dir); gchar *config_get_formats_directory(void); +void config_generic_set_transcript_font(const gchar *actor, const gchar *key, + const PangoFontDescription *font); +PangoFontDescription *config_generic_get_transcript_font(const gchar *actor, + const gchar *key); + +void config_generic_set_transcript_color(const gchar *actor, const gchar *key, + const GdkColor *color); +gboolean config_generic_get_transcript_color(const gchar *actor, const gchar *key, + GdkColor *color); + +static inline void +config_set_transcript_font(const gchar *actor, const PangoFontDescription *font) +{ + config_generic_set_transcript_font(actor, "Widget-Font", font); +} +static inline PangoFontDescription * +config_get_transcript_font(const gchar *actor) +{ + return config_generic_get_transcript_font(actor, "Widget-Font"); +} + +static inline void +config_set_transcript_text_color(const gchar *actor, const GdkColor *color) +{ + config_generic_set_transcript_color(actor, "Widget-Text-Color", color); +} +static inline gboolean +config_get_transcript_text_color(const gchar *actor, GdkColor *color) +{ + return config_generic_get_transcript_color(actor, "Widget-Text-Color", + color); +} + +static inline void +config_set_transcript_bg_color(const gchar *actor, const GdkColor *color) +{ + config_generic_set_transcript_color(actor, "Widget-BG-Color", color); +} +static inline gboolean +config_get_transcript_bg_color(const gchar *actor, GdkColor *color) +{ + return config_generic_get_transcript_color(actor, "Widget-BG-Color", + color); +} + +static inline void +config_set_transcript_default_format_font(const gchar *actor, + const PangoFontDescription *font) +{ + config_generic_set_transcript_font(actor, "Default-Format-Font", font); +} +static inline PangoFontDescription * +config_get_transcript_default_format_font(const gchar *actor) +{ + return config_generic_get_transcript_font(actor, "Default-Format-Font"); +} + +static inline void +config_set_transcript_default_format_text_color(const gchar *actor, + const GdkColor *color) +{ + config_generic_set_transcript_color(actor, "Default-Format-Text-Color", + color); +} +static inline gboolean +config_get_transcript_default_format_text_color(const gchar *actor, + GdkColor *color) +{ + return config_generic_get_transcript_color(actor, "Default-Format-Text-Color", + color); +} + +static inline void +config_set_transcript_default_format_bg_color(const gchar *actor, + const GdkColor *color) +{ + config_generic_set_transcript_color(actor, "Default-Format-BG-Color", + color); +} +static inline gboolean +config_get_transcript_default_format_bg_color(const gchar *actor, + GdkColor *color) +{ + return config_generic_get_transcript_color(actor, "Default-Format-BG-Color", + color); +} + void config_save_key_file(void); /* @@ -43,6 +43,9 @@ GtkWidget *navigator_scrolledwindow, gchar *current_filename = NULL; +#define SPEAKER_WIZARD "Wizard" +#define SPEAKER_PROBAND "Proband" + /* * GtkBuilder signal callbacks * NOTE: for some strange reason the parameters are switched @@ -248,6 +251,8 @@ main(int argc, char *argv[]) { GtkBuilder *builder; GtkAdjustment *adj; + PangoFontDescription *font_desc; + GdkColor color; /* FIXME: support internationalization instead of enforcing English */ #ifdef __WIN32__ @@ -311,8 +316,34 @@ main(int argc, char *argv[]) gtk_scale_button_set_adjustment(GTK_SCALE_BUTTON(volume_button), adj); /* configure transcript widgets */ - GTK_EXPERIMENT_TRANSCRIPT(transcript_wizard_widget)->speaker = g_strdup("Wizard"); - GTK_EXPERIMENT_TRANSCRIPT(transcript_proband_widget)->speaker = g_strdup("Proband"); + GTK_EXPERIMENT_TRANSCRIPT(transcript_wizard_widget)->speaker = + g_strdup(SPEAKER_WIZARD); + font_desc = config_get_transcript_font(SPEAKER_WIZARD); + if (font_desc != NULL) { + gtk_widget_modify_font(transcript_wizard_widget, font_desc); + pango_font_description_free(font_desc); + } + if (config_get_transcript_text_color(SPEAKER_WIZARD, &color)) + gtk_widget_modify_text(transcript_wizard_widget, + GTK_STATE_NORMAL, &color); + if (config_get_transcript_bg_color(SPEAKER_WIZARD, &color)) + gtk_widget_modify_bg(transcript_wizard_widget, + GTK_STATE_NORMAL, &color); + + GTK_EXPERIMENT_TRANSCRIPT(transcript_proband_widget)->speaker = + g_strdup(SPEAKER_PROBAND); + font_desc = config_get_transcript_font(SPEAKER_PROBAND); + if (font_desc != NULL) { + gtk_widget_modify_font(transcript_proband_widget, font_desc); + pango_font_description_free(font_desc); + } + if (config_get_transcript_text_color(SPEAKER_PROBAND, &color)) + gtk_widget_modify_text(transcript_proband_widget, + GTK_STATE_NORMAL, &color); + if (config_get_transcript_bg_color(SPEAKER_PROBAND, &color)) + gtk_widget_modify_bg(transcript_proband_widget, + GTK_STATE_NORMAL, &color); + format_selection_init(); refresh_quickopen_menu(GTK_MENU(quickopen_menu)); @@ -321,6 +352,21 @@ main(int argc, char *argv[]) gtk_main(); gdk_threads_leave(); + /** @todo only modify style if it isn't the default widget style */ + config_set_transcript_font(SPEAKER_WIZARD, + transcript_wizard_widget->style->font_desc); + config_set_transcript_text_color(SPEAKER_WIZARD, + &transcript_wizard_widget->style->text[GTK_STATE_NORMAL]); + config_set_transcript_bg_color(SPEAKER_WIZARD, + &transcript_wizard_widget->style->bg[GTK_STATE_NORMAL]); + + config_set_transcript_font(SPEAKER_PROBAND, + transcript_proband_widget->style->font_desc); + config_set_transcript_text_color(SPEAKER_PROBAND, + &transcript_proband_widget->style->text[GTK_STATE_NORMAL]); + config_set_transcript_bg_color(SPEAKER_PROBAND, + &transcript_proband_widget->style->bg[GTK_STATE_NORMAL]); + config_save_key_file(); return 0; |