aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-06-02 14:54:18 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-06-02 14:54:18 +0200
commita4245a50902ee9b399c9aa726fb5281e2719fe57 (patch)
treee536fdeea6b8a780b2c797799d8d9ced565ff5c1 /src
parent54f75db1b82cc5a81c98ed722b3a60c38645919d (diff)
downloadgtk-vlc-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
Diffstat (limited to 'src')
-rw-r--r--src/config.c99
-rw-r--r--src/experiment-player.h89
-rw-r--r--src/main.c50
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);
/*
diff --git a/src/main.c b/src/main.c
index 4197b53..f11334f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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;