diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-05-11 06:08:43 +0200 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-05-11 06:08:43 +0200 |
commit | e41a22d50aaa100638177fe882589bb54434d1ad (patch) | |
tree | a140a230b4a65efca15a7e80059e1c53563eea09 /src | |
parent | d0860cb211302c0c214b3b67296f22f78ea06085 (diff) | |
download | gtk-vlc-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.ui | 61 | ||||
-rw-r--r-- | src/experiment-player.h | 7 | ||||
-rw-r--r-- | src/main.c | 57 | ||||
-rw-r--r-- | src/quickopen.c | 17 |
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); @@ -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); } |