#ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_X11_XLIB_H #include #endif #include #include #include "experiment-player.h" 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; gchar *current_filename = NULL; /* * GtkBuilder signal callbacks * NOTE: for some strange reason the parameters are switched */ void playpause_button_clicked_cb(GtkWidget *widget, gpointer data) { gboolean is_playing = gtk_vlc_player_toggle(GTK_VLC_PLAYER(widget)); button_image_set_from_stock(GTK_BUTTON(data), is_playing ? "gtk-media-play" : "gtk-media-pause"); } void stop_button_clicked_cb(GtkWidget *widget, gpointer data __attribute__((unused))) { gtk_vlc_player_stop(GTK_VLC_PLAYER(widget)); button_image_set_from_stock(GTK_BUTTON(playpause_button), "gtk-media-play"); } void file_menu_openmovie_item_activate_cb(GtkWidget *widget, gpointer data __attribute__((unused))) { GtkWidget *dialog; dialog = gtk_file_chooser_dialog_new("Open Movie...", 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 *uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog)); if (load_media_file(uri)) { /* TODO */ } refresh_quickopen_menu(GTK_MENU(quickopen_menu)); g_free(uri); } gtk_widget_destroy(dialog); } void file_menu_opentranscript_item_activate_cb(GtkWidget *widget, gpointer data) { /* TODO */ } void help_menu_manual_item_activate_cb(GtkWidget *widget __attribute__((unused)), gpointer data __attribute__((unused))) { gtk_show_uri(NULL, HELP_URI, GDK_CURRENT_TIME, NULL); } void generic_quit_cb(GtkWidget *widget __attribute__((unused)), gpointer data __attribute__((unused))) { gtk_main_quit(); } static inline void button_image_set_from_stock(GtkButton *widget, const gchar *name) { GtkWidget *image = gtk_bin_get_child(GTK_BIN(widget)); gtk_image_set_from_stock(GTK_IMAGE(image), name, GTK_ICON_SIZE_SMALL_TOOLBAR); } gboolean load_media_file(const gchar *uri) { if (gtk_vlc_player_load(GTK_VLC_PLAYER(player_widget), uri)) return TRUE; g_free(current_filename); current_filename = g_strdup(uri); gtk_widget_set_sensitive(controls_hbox, TRUE); return FALSE; } int main(int argc, char *argv[]) { GtkBuilder *builder; GtkAdjustment *adj; /* init threads */ #ifdef HAVE_X11_XLIB_H XInitThreads(); /* FIXME: really required??? */ #endif g_thread_init(NULL); gdk_threads_init(); gtk_init(&argc, &argv); builder = gtk_builder_new(); 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); BUILDER_INIT(builder, playpause_button); BUILDER_INIT(builder, volume_button); BUILDER_INIT(builder, quickopen_menu); BUILDER_INIT(builder, quickopen_menu_empty_item); g_object_unref(G_OBJECT(builder)); /* connect timeline and volume button with player widget */ adj = gtk_vlc_player_get_time_adjustment(GTK_VLC_PLAYER(player_widget)); gtk_range_set_adjustment(GTK_RANGE(scale_widget), adj); adj = gtk_vlc_player_get_volume_adjustment(GTK_VLC_PLAYER(player_widget)); gtk_scale_button_set_adjustment(GTK_SCALE_BUTTON(volume_button), adj); gtk_widget_show_all(player_window); quickopen_directory = g_strdup(DEFAULT_QUICKOPEN_DIR); refresh_quickopen_menu(GTK_MENU(quickopen_menu)); gdk_threads_enter(); gtk_main(); gdk_threads_leave(); return 0; }