From e41a22d50aaa100638177fe882589bb54434d1ad Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Fri, 11 May 2012 06:08:43 +0200 Subject: 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!!! --- src/default.ui | 61 +++++++++++++++++++++++++++++++++++++++++++++++++ src/experiment-player.h | 7 ++++-- src/main.c | 57 ++++++++++++++++++++++++++++++++++++++++----- src/quickopen.c | 17 ++++++++++++++ 4 files changed, 134 insertions(+), 8 deletions(-) (limited to 'src') 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 @@ + True @@ -255,4 +256,64 @@ audio-volume-medium True gtk-help + + True + Experiment Data + 680 + 700 + False + + + True + True + 339 + + + True + Transcript Widget (TODO) + + + False + True + + + + + True + False + True + navigator_hadj + navigator_vadj + automatic + automatic + + + True + True + navigator_hadj + navigator_vadj + + + + + + True + True + + + + + + + 100 + 1 + 10 + 10 + + + 100 + 1 + 10 + 10 + 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 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 @@ -116,6 +139,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); } -- cgit v1.2.3