aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-05-11 06:08:43 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-05-11 06:08:43 +0200
commite41a22d50aaa100638177fe882589bb54434d1ad (patch)
treea140a230b4a65efca15a7e80059e1c53563eea09 /src
parentd0860cb211302c0c214b3b67296f22f78ea06085 (diff)
downloadexperiment-player-e41a22d50aaa100638177fe882589bb54434d1ad.tar.gz
integrated experiment navigator into UI
* transcript widget placeholder * connected time-selected signal, so when the new widget is properly implemented, everything should fall in place... * implemented "Transcript Open..." using experiment-navigator API * had to manually edit default.ui to include a property Glade-3 for Windows introduced!!!
Diffstat (limited to 'src')
-rw-r--r--src/default.ui61
-rw-r--r--src/experiment-player.h7
-rw-r--r--src/main.c57
-rw-r--r--src/quickopen.c17
4 files changed, 134 insertions, 8 deletions
diff --git a/src/default.ui b/src/default.ui
index 8efbfee..b19f8ba 100644
--- a/src/default.ui
+++ b/src/default.ui
@@ -2,6 +2,7 @@
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-requires gtk-vlc-player 0.0 -->
+ <!-- interface-requires gtk-experiment-widgets 0.0 -->
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="player_window">
<property name="visible">True</property>
@@ -255,4 +256,64 @@ audio-volume-medium</property>
<property name="visible">True</property>
<property name="stock">gtk-help</property>
</object>
+ <object class="GtkWindow" id="info_window">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Experiment Data</property>
+ <property name="default_width">680</property>
+ <property name="default_height">700</property>
+ <property name="deletable">False</property>
+ <child>
+ <object class="GtkHPaned" id="info_window_hpane">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="position">339</property>
+ <child>
+ <object class="GtkLabel" id="transcript_widget">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Transcript Widget (TODO)</property>
+ </object>
+ <packing>
+ <property name="resize">False</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="navigator_scrolledwindow">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="hadjustment">navigator_hadj</property>
+ <property name="vadjustment">navigator_vadj</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <child>
+ <object class="GtkExperimentNavigator" id="navigator_widget">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hadjustment">navigator_hadj</property>
+ <property name="vadjustment">navigator_vadj</property>
+ <signal name="time_selected" handler="navigator_widget_time_selected_cb" object="player_widget"/>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">True</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkAdjustment" id="navigator_hadj">
+ <property name="upper">100</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ <property name="page_size">10</property>
+ </object>
+ <object class="GtkAdjustment" id="navigator_vadj">
+ <property name="upper">100</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ <property name="page_size">10</property>
+ </object>
</interface>
diff --git a/src/experiment-player.h b/src/experiment-player.h
index 5797801..1d9f8a2 100644
--- a/src/experiment-player.h
+++ b/src/experiment-player.h
@@ -4,9 +4,9 @@
#include <gtk/gtk.h>
gboolean load_media_file(const gchar *file);
-void show_message_dialog_gerror(GError *err);
+gboolean load_transcript_file(const gchar *file);
-extern GtkWidget *player_window;
+void show_message_dialog_gerror(GError *err);
extern GtkWidget *player_widget,
*controls_hbox,
@@ -14,6 +14,9 @@ extern GtkWidget *player_widget,
*playpause_button,
*volume_button;
+extern GtkWidget *navigator_scrolledwindow,
+ *navigator_widget;
+
extern gchar *current_filename;
void refresh_quickopen_menu(GtkMenu *menu);
diff --git a/src/main.c b/src/main.c
index 30c8556..1b1b69a 100644
--- a/src/main.c
+++ b/src/main.c
@@ -25,14 +25,15 @@
static inline void button_image_set_from_stock(GtkButton *widget, const gchar *name);
-GtkWidget *player_window;
-
GtkWidget *player_widget,
*controls_hbox,
*scale_widget,
*playpause_button,
*volume_button;
+GtkWidget *navigator_scrolledwindow,
+ *navigator_widget;
+
gchar *current_filename = NULL;
/*
@@ -88,9 +89,31 @@ file_menu_openmovie_item_activate_cb(GtkWidget *widget,
}
void
-file_menu_opentranscript_item_activate_cb(GtkWidget *widget, gpointer data)
+file_menu_opentranscript_item_activate_cb(GtkWidget *widget,
+ gpointer data __attribute__((unused)))
{
- /* TODO */
+ GtkWidget *dialog;
+
+ dialog = gtk_file_chooser_dialog_new("Open Transcript...", GTK_WINDOW(widget),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
+ gchar *file;
+
+ file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+
+ if (load_transcript_file(file)) {
+ /* TODO */
+ }
+ refresh_quickopen_menu(GTK_MENU(quickopen_menu));
+
+ g_free(file);
+ }
+
+ gtk_widget_destroy(dialog);
}
void
@@ -117,6 +140,13 @@ help_menu_manual_item_activate_cb(GtkWidget *widget __attribute__((unused)),
}
void
+navigator_widget_time_selected_cb(GtkWidget *widget, gint64 selected_time,
+ gpointer user_data __attribute__((unused)))
+{
+ gtk_vlc_player_seek(GTK_VLC_PLAYER(widget), selected_time);
+}
+
+void
generic_quit_cb(GtkWidget *widget __attribute__((unused)),
gpointer data __attribute__((unused)))
{
@@ -142,6 +172,7 @@ load_media_file(const gchar *file)
current_filename = g_strdup(file);
gtk_widget_set_sensitive(controls_hbox, TRUE);
+ gtk_widget_set_sensitive(navigator_scrolledwindow, TRUE);
button_image_set_from_stock(GTK_BUTTON(playpause_button),
"gtk-media-play");
@@ -149,6 +180,19 @@ load_media_file(const gchar *file)
return FALSE;
}
+gboolean
+load_transcript_file(const gchar *file)
+{
+ gboolean res;
+
+ /* FIXME */
+ res = gtk_experiment_navigator_load_filename(GTK_EXPERIMENT_NAVIGATOR(navigator_widget), file);
+ if (res)
+ return TRUE;
+
+ return FALSE;
+}
+
void
show_message_dialog_gerror(GError *err)
{
@@ -195,8 +239,6 @@ main(int argc, char *argv[])
gtk_builder_add_from_file(builder, DEFAULT_UI, NULL);
gtk_builder_connect_signals(builder, NULL);
- BUILDER_INIT(builder, player_window);
-
BUILDER_INIT(builder, player_widget);
BUILDER_INIT(builder, controls_hbox);
BUILDER_INIT(builder, scale_widget);
@@ -206,6 +248,9 @@ main(int argc, char *argv[])
BUILDER_INIT(builder, quickopen_menu);
BUILDER_INIT(builder, quickopen_menu_empty_item);
+ BUILDER_INIT(builder, navigator_scrolledwindow);
+ BUILDER_INIT(builder, navigator_widget);
+
g_object_unref(G_OBJECT(builder));
/* connect timeline and volume button with player widget */
diff --git a/src/quickopen.c b/src/quickopen.c
index 1f0630d..17d992e 100644
--- a/src/quickopen.c
+++ b/src/quickopen.c
@@ -187,6 +187,7 @@ static void
quickopen_item_on_activate(GtkWidget *widget, gpointer user_data)
{
const gchar *filename = (const gchar *)user_data;
+ gchar *trans_name, *p;
gtk_container_foreach(GTK_CONTAINER(quickopen_menu),
reconfigure_all_check_menu_items_cb, widget);
@@ -194,4 +195,20 @@ quickopen_item_on_activate(GtkWidget *widget, gpointer user_data)
if (load_media_file(filename)) {
/* FIXME */
}
+
+ trans_name = g_strdup(filename);
+ trans_name = g_realloc(trans_name, strlen(trans_name) +
+ sizeof(EXPERIMENT_TRANSCRIPT_EXT));
+ if ((p = g_strrstr(trans_name, ".")) == NULL) {
+ g_free(trans_name);
+ /* FIXME */
+ return;
+ }
+ g_stpcpy(++p, EXPERIMENT_TRANSCRIPT_EXT);
+
+ if (load_transcript_file(trans_name)) {
+ /* FIXME */
+ }
+
+ g_free(trans_name);
}