diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-06-13 16:41:45 +0200 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-06-13 16:44:41 +0200 |
commit | cbc720d17e5213cdb569c590fccb87fd7de4dd01 (patch) | |
tree | 9b52dae4dcb335cc3b27bf872afcd638022786d2 | |
parent | 7f9099bf95de9c38fd6cf9d59326733e132fd761 (diff) | |
download | experiment-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.h | 10 | ||||
-rw-r--r-- | lib/gtk-experiment-widgets/gtk-experiment-transcript.c | 55 | ||||
-rw-r--r-- | lib/gtk-experiment-widgets/gtk-experiment-transcript.h | 5 | ||||
-rw-r--r-- | src/config.c | 14 | ||||
-rw-r--r-- | src/experiment-player.h | 3 | ||||
-rw-r--r-- | src/main.c | 13 |
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); @@ -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); |