aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-06-13 16:41:45 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-06-13 16:44:41 +0200
commitcbc720d17e5213cdb569c590fccb87fd7de4dd01 (patch)
tree9b52dae4dcb335cc3b27bf872afcd638022786d2
parent7f9099bf95de9c38fd6cf9d59326733e132fd761 (diff)
downloadexperiment-player-cbc720d17e5213cdb569c590fccb87fd7de4dd01.tar.gz
transcript widget reverse mode is saved in config file
* introduced widget flag attribute
-rw-r--r--lib/gtk-experiment-widgets/gtk-experiment-transcript-private.h10
-rw-r--r--lib/gtk-experiment-widgets/gtk-experiment-transcript.c55
-rw-r--r--lib/gtk-experiment-widgets/gtk-experiment-transcript.h5
-rw-r--r--src/config.c14
-rw-r--r--src/experiment-player.h3
-rw-r--r--src/main.c13
6 files changed, 89 insertions, 11 deletions
diff --git a/lib/gtk-experiment-widgets/gtk-experiment-transcript-private.h b/lib/gtk-experiment-widgets/gtk-experiment-transcript-private.h
index de03395..3632cca 100644
--- a/lib/gtk-experiment-widgets/gtk-experiment-transcript-private.h
+++ b/lib/gtk-experiment-widgets/gtk-experiment-transcript-private.h
@@ -42,12 +42,19 @@ typedef struct _GtkExperimentTranscriptFormat {
PangoAttrList *attribs;
} GtkExperimentTranscriptFormat;
+/** @private */
+typedef enum {
+ GTK_EXPERIMENT_TRANSCRIPT_REVERSE_MASK = 1 << 0
+} GtkExperimentTranscriptFlagMask;
+
/**
* @private
* Private instance attribute structure.
* You can access these attributes using \c klass->priv->attribute.
*/
struct _GtkExperimentTranscriptPrivate {
+ gint flag_mask;
+
GtkObject *time_adjustment;
gulong time_adj_on_value_changed_id;
@@ -59,7 +66,8 @@ struct _GtkExperimentTranscriptPrivate {
GtkExperimentTranscriptFormat interactive_format;
GtkWidget *menu; /**< Drop-down menu, doesn't have to be unreferenced manually */
- GSList *alignment_group; /**< GtkRadioMenuItem group (owned by GTK) */
+ GSList *alignment_group; /**< GtkRadioMenuItem group for Alignment settings (owned by GTK) */
+ GtkWidget *menu_reverse_item;
};
/** @private */
diff --git a/lib/gtk-experiment-widgets/gtk-experiment-transcript.c b/lib/gtk-experiment-widgets/gtk-experiment-transcript.c
index 2cfbf37..312722f 100644
--- a/lib/gtk-experiment-widgets/gtk-experiment-transcript.c
+++ b/lib/gtk-experiment-widgets/gtk-experiment-transcript.c
@@ -129,12 +129,13 @@ gtk_experiment_transcript_init(GtkExperimentTranscript *klass)
klass->priv = GTK_EXPERIMENT_TRANSCRIPT_GET_PRIVATE(klass);
klass->speaker = NULL;
- klass->reverse = FALSE;
klass->interactive_format.default_font = NULL;
klass->interactive_format.default_text_color = NULL;
klass->interactive_format.default_bg_color = NULL;
+ klass->priv->flag_mask = 0;
+
klass->priv->time_adjustment = gtk_adjustment_new(0., 0., 0.,
0., 0., 0.);
g_object_ref_sink(klass->priv->time_adjustment);
@@ -226,11 +227,13 @@ gtk_experiment_transcript_init(GtkExperimentTranscript *klass)
gtk_menu_shell_append(GTK_MENU_SHELL(klass->priv->menu), item);
gtk_widget_show(item);
- item = gtk_check_menu_item_new_with_mnemonic("_Reverse");
- g_signal_connect(item, "activate",
+ klass->priv->menu_reverse_item =
+ gtk_check_menu_item_new_with_mnemonic("_Reverse");
+ g_signal_connect(klass->priv->menu_reverse_item, "activate",
G_CALLBACK(reverse_activated), klass);
- gtk_menu_shell_append(GTK_MENU_SHELL(klass->priv->menu), item);
- gtk_widget_show(item);
+ gtk_menu_shell_append(GTK_MENU_SHELL(klass->priv->menu),
+ klass->priv->menu_reverse_item);
+ gtk_widget_show(klass->priv->menu_reverse_item);
}
/**
@@ -545,8 +548,9 @@ gtk_experiment_transcript_text_layer_redraw(GtkExperimentTranscript *trans)
current_time = (gint64)gtk_adjustment_get_value(GTK_ADJUSTMENT(trans->priv->time_adjustment));
current_time_px = TIME_TO_PX(current_time);
- renderer = trans->reverse ? render_contribution_topdown
- : render_contribution_bottomup;
+ renderer = gtk_experiment_transcript_get_reverse_mode(trans)
+ ? render_contribution_topdown
+ : render_contribution_bottomup;
for (GList *cur = experiment_reader_get_contribution_by_time(
trans->priv->contribs,
@@ -739,8 +743,9 @@ reverse_activated(GtkWidget *widget, gpointer data)
{
GtkExperimentTranscript *trans = GTK_EXPERIMENT_TRANSCRIPT(data);
- trans->reverse =
- gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
+ trans->priv->flag_mask &= ~GTK_EXPERIMENT_TRANSCRIPT_REVERSE_MASK;
+ if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)))
+ trans->priv->flag_mask |= GTK_EXPERIMENT_TRANSCRIPT_REVERSE_MASK;
if (gtk_widget_get_realized(GTK_WIDGET(trans)) &&
trans->priv->layer_text != NULL)
@@ -825,6 +830,38 @@ gtk_experiment_transcript_load_filename(GtkExperimentTranscript *trans,
}
/**
+ * @brief Set or unset reverse (top-down) render mode
+ *
+ * The render mode defaults to bottom-up mode for new widget instances.
+ *
+ * @param trans Widget instance
+ * @param reverse Activate reverse-mode (\c TRUE), or deactivate (\c FALSE)
+ */
+void
+gtk_experiment_transcript_set_reverse_mode(GtkExperimentTranscript *trans,
+ gboolean reverse)
+{
+ GtkCheckMenuItem *item =
+ GTK_CHECK_MENU_ITEM(trans->priv->menu_reverse_item);
+
+ gtk_check_menu_item_set_active(item, reverse);
+}
+
+/**
+ * @brief Get current reverse (top-down) render mode state
+ *
+ * @sa gtk_experiment_transcript_set_reverse_mode
+ *
+ * @param trans Widget instance
+ * @return \c TRUE if reverse-mode is active, else \c FALSE
+ */
+gboolean
+gtk_experiment_transcript_get_reverse_mode(GtkExperimentTranscript *trans)
+{
+ return trans->priv->flag_mask & GTK_EXPERIMENT_TRANSCRIPT_REVERSE_MASK;
+}
+
+/**
* @brief Set alignment (justification) of text blocks in a transcript widget
*
* The alignment defaults to \c PANGO_ALIGN_LEFT for new widget instances.
diff --git a/lib/gtk-experiment-widgets/gtk-experiment-transcript.h b/lib/gtk-experiment-widgets/gtk-experiment-transcript.h
index 1657b0a..fa36b0f 100644
--- a/lib/gtk-experiment-widgets/gtk-experiment-transcript.h
+++ b/lib/gtk-experiment-widgets/gtk-experiment-transcript.h
@@ -74,7 +74,6 @@ typedef struct _GtkExperimentTranscript {
GtkWidget parent_instance; /**< Parent instance structure */
gchar *speaker; /**< Name of speaker whose contributions are displayed (\b read-only) */
- gboolean reverse; /**< Reverse mode activated (\b read-only) */
/**
* Default formattings to apply for interactive for interactive format
@@ -113,6 +112,10 @@ gboolean gtk_experiment_transcript_load(GtkExperimentTranscript *trans,
gboolean gtk_experiment_transcript_load_filename(GtkExperimentTranscript *trans,
const gchar *filename);
+void gtk_experiment_transcript_set_reverse_mode(GtkExperimentTranscript *trans,
+ gboolean reverse);
+gboolean gtk_experiment_transcript_get_reverse_mode(GtkExperimentTranscript *trans);
+
void gtk_experiment_transcript_set_alignment(GtkExperimentTranscript *trans,
PangoAlignment alignment);
PangoAlignment gtk_experiment_transcript_get_alignment(GtkExperimentTranscript *trans);
diff --git a/src/config.c b/src/config.c
index 4d6a409..9c0927d 100644
--- a/src/config.c
+++ b/src/config.c
@@ -187,6 +187,20 @@ config_generic_get_transcript_color(const gchar *actor, const gchar *key,
}
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;
diff --git a/src/experiment-player.h b/src/experiment-player.h
index 35b815f..7c7a620 100644
--- a/src/experiment-player.h
+++ b/src/experiment-player.h
@@ -181,6 +181,9 @@ config_get_transcript_default_format_bg_color(const gchar *actor,
color);
}
+void config_set_transcript_reverse_mode(const gchar *actor, gboolean reverse);
+gboolean config_get_transcript_reverse_mode(const gchar *actor);
+
void config_set_transcript_alignment(const gchar *actor,
PangoAlignment alignment);
PangoAlignment config_get_transcript_alignment(const gchar *actor);
diff --git a/src/main.c b/src/main.c
index 1771804..ee81e44 100644
--- a/src/main.c
+++ b/src/main.c
@@ -307,6 +307,7 @@ main(int argc, char *argv[])
GtkAdjustment *adj;
PangoFontDescription *font_desc;
+ gboolean reverse;
PangoAlignment alignment;
GdkColor color;
GtkRcStyle *modified_style;
@@ -401,6 +402,9 @@ main(int argc, char *argv[])
gtk_widget_modify_bg(transcript_wizard_widget,
GTK_STATE_NORMAL, &color);
+ reverse = config_get_transcript_reverse_mode(SPEAKER_WIZARD);
+ gtk_experiment_transcript_set_reverse_mode(transcript_wizard, reverse);
+
alignment = config_get_transcript_alignment(SPEAKER_WIZARD);
gtk_experiment_transcript_set_alignment(transcript_wizard, alignment);
@@ -424,6 +428,9 @@ main(int argc, char *argv[])
gtk_widget_modify_bg(transcript_proband_widget,
GTK_STATE_NORMAL, &color);
+ reverse = config_get_transcript_reverse_mode(SPEAKER_PROBAND);
+ gtk_experiment_transcript_set_reverse_mode(transcript_proband, reverse);
+
alignment = config_get_transcript_alignment(SPEAKER_PROBAND);
gtk_experiment_transcript_set_alignment(transcript_proband, alignment);
@@ -457,6 +464,9 @@ main(int argc, char *argv[])
: NULL);
g_object_unref(modified_style);
+ reverse = gtk_experiment_transcript_get_reverse_mode(transcript_wizard);
+ config_set_transcript_reverse_mode(SPEAKER_WIZARD, reverse);
+
alignment = gtk_experiment_transcript_get_alignment(transcript_wizard);
config_set_transcript_alignment(SPEAKER_WIZARD, alignment);
@@ -479,6 +489,9 @@ main(int argc, char *argv[])
: NULL);
g_object_unref(modified_style);
+ reverse = gtk_experiment_transcript_get_reverse_mode(transcript_proband);
+ config_set_transcript_reverse_mode(SPEAKER_PROBAND, reverse);
+
alignment = gtk_experiment_transcript_get_alignment(transcript_proband);
config_set_transcript_alignment(SPEAKER_PROBAND, alignment);