aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-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
3 files changed, 59 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);