📄 gui_main.cpp
字号:
seek_dialog = gtk_dialog_new(); gtk_signal_connect(GTK_OBJECT(seek_dialog), "destroy", GTK_SIGNAL_FUNC(on_seek_destroy), seek_dialog); gtk_window_set_title(GTK_WINDOW(seek_dialog), "Seek to"); gtk_container_border_width(GTK_CONTAINER(seek_dialog), 5); GtkWidget *vbox; vbox = gtk_vbox_new(FALSE, 1); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(seek_dialog)->action_area), vbox, TRUE, TRUE, 0); gtk_widget_show(vbox); GtkWidget *hbox; hbox = gtk_hbox_new(FALSE, 1); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); GtkWidget *seek_entry; seek_entry = gtk_entry_new(); gtk_signal_connect(GTK_OBJECT(seek_entry), "activate", GTK_SIGNAL_FUNC(on_seek_activate), seek_entry); gtk_box_pack_start(GTK_BOX(hbox), seek_entry, TRUE, TRUE, 0); gtk_widget_show(seek_entry); hbox = gtk_hbox_new(FALSE, 1); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); GtkWidget *button; button = gtk_button_new_with_label("Ok"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(on_seek_activate), seek_entry); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); gtk_widget_show(button); button = gtk_button_new_with_label("Cancel"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(on_seek_cancel), NULL); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); gtk_widget_show(button); gtk_widget_show(seek_dialog); doing_seek = 1;}static void on_main_menu_help (GtkWidget *window, gpointer data){}static void on_main_menu_about (GtkWidget *window, gpointer data){ char buffer[1024]; sprintf(buffer, "gmp4player Version %s.\n" "An open source file/streaming MPEG4 player\n" "Developed by cisco Systems using the\n" "following open source packages:\n" "\n" "SDL, SMPEG audio (MP3) from lokigames\n" "RTP from UCL\n" "ISO reference decoder for MPEG4\n" "FAAC decoder\n" "Xvid decoder\n" "Libmpeg3 file and video decoder\n" "Developed by Bill May, 10/00 to present", VERSION ); ShowMessage("About gmp4player",buffer);}/* * on_drag_data_received - copied from gtv, who copied from someone else */static void on_drag_data_received (GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint info, guint time){ gchar *temp, *string; string = (gchar *)selection_data->data; /* remove newline at end of line, and the file:// url header at the begining, copied this code from the xmms source */ temp = strchr(string, '\n'); if (temp) { if (*(temp - 1) == '\r') *(temp - 1) = '\0'; *temp = '\0'; } if (!strncasecmp(string, "file:", 5)) string = string + 5; start_session_from_name(string);}static GtkWidget *filesel;static void on_filename_selected (GtkFileSelection *selector, gpointer user_data) { const gchar *name; name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(filesel)); start_session_from_name(name);}/* * This is right out of the book... */static void on_browse_button_clicked (GtkWidget *window, gpointer data){ filesel = gtk_file_selection_new("Open Media file"); if (last_file != NULL) { gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel), last_file); } gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(filesel)); gtk_signal_connect (GTK_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), "clicked", GTK_SIGNAL_FUNC(on_filename_selected), filesel); /* Ensure that the dialog box is destroyed when the user clicks a button. */ gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(filesel)); gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(filesel)); /* Display that dialog */ gtk_widget_show (filesel); }static void on_playlist_child_selected (GtkWidget *window, gpointer data){ const gchar *entry = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo)->entry)); if (strcmp(entry, "") == 0) return; if (last_entry && strcmp(entry, last_entry) == 0) return; start_session_from_name(entry);}static void on_play_list_selected (GtkWidget *window, gpointer data){ const gchar *entry = gtk_entry_get_text(GTK_ENTRY(window)); start_session_from_name(entry);}static void on_play_clicked (GtkWidget *window, gpointer data){ int ret; char errmsg[512]; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(play_button)) == FALSE) { if (play_state == PLAYING) { toggle_button_adjust(play_button, TRUE); } return; } if (psptr == NULL) return; ret = 0; SDL_mutexP(command_mutex); switch (play_state) { case PAUSED: ret = psptr->play_all_media(FALSE, 0.0, errmsg, sizeof(errmsg)); break; case STOPPED: ret = psptr->play_all_media(TRUE, 0.0, errmsg, sizeof(errmsg)); break; default: break; } if (ret == 0) adjust_gui_for_play(); SDL_mutexV(command_mutex); if (ret != 0) { char buffer[1024]; close_session(); snprintf(buffer, sizeof(buffer), "Error re-starting session: %s", errmsg); ShowMessage("Play error", buffer); }}static void do_pause (void){ SDL_mutexP(command_mutex); if (psptr != NULL && play_state == PLAYING) { play_state = PAUSED; toggle_button_adjust(play_button, FALSE); toggle_button_adjust(pause_button, TRUE); psptr->pause_all_media(); } else { toggle_button_adjust(pause_button, play_state == PAUSED); } SDL_mutexV(command_mutex);}static void on_pause_clicked (GtkWidget *window, gpointer data){ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pause_button)) == FALSE) { if (play_state == PAUSED) { toggle_button_adjust(pause_button, TRUE); } return; } do_pause();}static void on_stop_clicked (GtkWidget *window, gpointer data){ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(stop_button)) == FALSE) { if (play_state == STOPPED) { toggle_button_adjust(stop_button, TRUE); } return; } SDL_mutexP(command_mutex); if (psptr != NULL && play_state == PLAYING) { play_state = STOPPED; toggle_button_adjust(play_button, FALSE); toggle_button_adjust(stop_button, TRUE); psptr->pause_all_media(); } else { toggle_button_adjust(stop_button, play_state == STOPPED); } SDL_mutexV(command_mutex);}/* * Set the speaker button to either mute or playing */static void set_speaker_button (gchar **xpm_data){ GtkWidget *wid; wid = CreateWidgetFromXpm(speaker_button, xpm_data); FreeChild(speaker_button); gtk_container_add(GTK_CONTAINER(speaker_button), wid);}static void on_speaker_clicked (GtkWidget *window, gpointer data){ int vol; if (master_muted == 0) { // mute the puppy set_speaker_button(xpm_speaker_muted); master_muted = 1; vol = 0; } else { set_speaker_button(xpm_speaker); master_muted = 0; vol = master_volume; } config.set_config_value(CONFIG_MUTED, master_muted); if (psptr && psptr->session_has_audio()) { psptr->set_audio_volume(vol); }}static void volume_adjusted (int volume){ GtkAdjustment *val = gtk_range_get_adjustment(GTK_RANGE(volume_slider)); gtk_adjustment_set_value(val, (gfloat)volume); master_volume = volume; config.set_config_value(CONFIG_VOLUME, master_volume); gtk_range_set_adjustment(GTK_RANGE(volume_slider), val);#ifndef HAVE_GTK_2_0 gtk_range_slider_update(GTK_RANGE(volume_slider)); gtk_range_clear_background(GTK_RANGE(volume_slider));#endif if (master_muted == 0 && psptr && psptr->session_has_audio()) { psptr->set_audio_volume(master_volume); }}static void on_volume_adjusted (GtkWidget *window, gpointer data){ GtkAdjustment *val = gtk_range_get_adjustment(GTK_RANGE(volume_slider)); volume_adjusted((int)val->value);}static void on_debug_mpeg4isoonly (GtkWidget *window, gpointer data){ GtkCheckMenuItem *checkmenu; checkmenu = GTK_CHECK_MENU_ITEM(window); config.set_config_value(CONFIG_USE_MPEG4_ISO_ONLY, checkmenu->active == FALSE ? 0 : 1);}static void on_debug_use_old_mp4_lib (GtkWidget *window, gpointer data){ GtkCheckMenuItem *checkmenu; checkmenu = GTK_CHECK_MENU_ITEM(window); config.set_config_value(CONFIG_USE_OLD_MP4_LIB, checkmenu->active == FALSE ? 0 : 1);}static void on_debug_http (GtkWidget *window, gpointer data){ int loglevel = GPOINTER_TO_INT(data); http_set_loglevel(LOG_PRI(loglevel)); config.set_config_value(CONFIG_HTTP_DEBUG, LOG_PRI(loglevel));}static void on_debug_rtsp (GtkWidget *window, gpointer data){ int loglevel = GPOINTER_TO_INT(data); rtsp_set_loglevel(LOG_PRI(loglevel)); config.set_config_value(CONFIG_RTSP_DEBUG, LOG_PRI(loglevel));} static void on_debug_rtp (GtkWidget *window, gpointer data){ int loglevel = GPOINTER_TO_INT(data); rtp_set_loglevel(LOG_PRI(loglevel)); config.set_config_value(CONFIG_RTP_DEBUG, LOG_PRI(loglevel));}static void on_debug_sdp (GtkWidget *window, gpointer data){ int loglevel = GPOINTER_TO_INT(data); sdp_set_loglevel(LOG_PRI(loglevel)); config.set_config_value(CONFIG_SDP_DEBUG, LOG_PRI(loglevel));}static void on_debug_mpeg2t (GtkWidget *window, gpointer data){ int loglevel = GPOINTER_TO_INT(data); mpeg2t_set_loglevel(LOG_PRI(loglevel)); config.set_config_value(CONFIG_MPEG2T_DEBUG, LOG_PRI(loglevel));}static void on_media_play_audio (GtkWidget *window, gpointer data){ GtkCheckMenuItem *checkmenu; checkmenu = GTK_CHECK_MENU_ITEM(window); config.set_config_value(CONFIG_PLAY_AUDIO, checkmenu->active); if (psptr != NULL) { ShowMessage("Warning", "Play audio will not take effect until next session"); }}static void on_media_play_video (GtkWidget *window, gpointer data){ GtkCheckMenuItem *checkmenu; checkmenu = GTK_CHECK_MENU_ITEM(window); config.set_config_value(CONFIG_PLAY_VIDEO, checkmenu->active); if (psptr != NULL) { ShowMessage("Warning", "Play video will not take effect until next session"); }}static void on_network_rtp_over_rtsp (GtkWidget *window, gpointer data){ GtkCheckMenuItem *checkmenu; checkmenu = GTK_CHECK_MENU_ITEM(window); config.set_config_value(CONFIG_USE_RTP_OVER_RTSP, checkmenu->active);} static void change_video_size (int newsize){ if (master_screen_size == newsize) return; master_screen_size = newsize; if (psptr != NULL) { psptr->set_screen_size(newsize / 50); } int index; if (newsize == 50) index = 0; else if (newsize == 100) index = 1; else index = 2;#ifdef HAVE_GTK_2_0 if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(videoradio[index])))#else if (!(GTK_CHECK_MENU_ITEM(videoradio[index])->active)) #endif gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(videoradio[index]), TRUE);}static void on_video_radio (GtkWidget *window, gpointer data){#ifdef HAVE_GTK_2_0 if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(window)))#else if (!(GTK_CHECK_MENU_ITEM(window)->active)) #endif return; int newsize = GPOINTER_TO_INT(data); if (newsize != master_screen_size) { change_video_size(newsize); }}static void on_aspect_ratio (GtkWidget *window, gpointer data){#ifdef HAVE_GTK_2_0 if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(window)))#else if (!(GTK_CHECK_MENU_ITEM(window)->active)) #endif return; int newaspect = GPOINTER_TO_INT(data); if (psptr != NULL) set_aspect_ratio(newaspect);}static void on_video_fullscreen (GtkWidget *window, gpointer data){ if (psptr != NULL) { master_fullscreen = 1; psptr->set_screen_size(master_screen_size / 50, 1); }}static int on_time_slider_pressed (GtkWidget *window, gpointer data){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -