📄 gui_main.cpp
字号:
read = config.get_config_string(CONFIG_PREV_FILE_0);
if (read != NULL) {
gchar *newone = g_strdup(read);
playlist = g_list_append(playlist, newone);
}
read = config.get_config_string(CONFIG_PREV_FILE_1);
if (read != NULL) {
gchar *newone = g_strdup(read);
playlist = g_list_append(playlist, newone);
}
read = config.get_config_string(CONFIG_PREV_FILE_2);
if (read != NULL) {
gchar *newone = g_strdup(read);
playlist = g_list_append(playlist, newone);
}
read = config.get_config_string(CONFIG_PREV_FILE_3);
if (read != NULL) {
gchar *newone = g_strdup(read);
playlist = g_list_append(playlist, newone);
}
last_file = g_strdup(config.get_config_string(CONFIG_PREV_DIRECTORY));
master_looped = config.get_config_value(CONFIG_LOOPED);
master_muted = config.get_config_value(CONFIG_MUTED);
master_volume = config.get_config_value(CONFIG_VOLUME);
rtsp_set_error_func(player_library_message);
rtsp_set_loglevel(config.get_config_value(CONFIG_RTSP_DEBUG));
rtp_set_error_msg_func(player_library_message);
rtp_set_loglevel(config.get_config_value(CONFIG_RTP_DEBUG));
sdp_set_error_func(player_library_message);
sdp_set_loglevel(config.get_config_value(CONFIG_SDP_DEBUG));
http_set_error_func(player_library_message);
http_set_loglevel(config.get_config_value(CONFIG_HTTP_DEBUG));
/*
* Set up main window
*/
main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_policy(GTK_WINDOW(main_window), FALSE, TRUE, FALSE);
gtk_window_set_title(GTK_WINDOW(main_window),
"cisco Open Source MPEG4 Player");
gtk_widget_set_uposition(GTK_WIDGET(main_window), 10, 10);
gtk_widget_set_usize(main_window, 450, 185);
gtk_window_set_default_size(GTK_WINDOW(main_window), 450, 185);
gtk_signal_connect(GTK_OBJECT(main_window),
"delete_event",
GTK_SIGNAL_FUNC(delete_event),
NULL);
main_vbox = gtk_vbox_new(FALSE, 1);
gtk_widget_show(main_vbox);
// add stuff
accel_group = gtk_accel_group_new();
gtk_accel_group_attach(accel_group, GTK_OBJECT(main_window));
tooltips = gtk_tooltips_new();
GtkWidget *menubar, *menu, *menuitem;
menubar = gtk_menu_bar_new();
gtk_box_pack_start(GTK_BOX(main_vbox), menubar, FALSE, FALSE, 0);
gtk_widget_show(menubar);
menu = CreateBarSubMenu(menubar, "File");
menuitem = CreateMenuItem(menu,
accel_group,
tooltips,
"Open",
"^O",
"Open local media file",
GTK_SIGNAL_FUNC(on_browse_button_clicked),
NULL);
close_menuitem = CreateMenuItem(menu,
accel_group,
tooltips,
"Close",
"^C",
"Close file/stream being viewed",
GTK_SIGNAL_FUNC(on_main_menu_close),
NULL);
// NULL entry is a seperator
menuitem = CreateMenuItem(menu,
accel_group,
tooltips,
NULL, NULL, NULL,
NULL, NULL);
menuitem = CreateMenuItem(menu,
accel_group,
tooltips,
"Exit",
"^X",
"Exit program",
GTK_SIGNAL_FUNC(delete_event),
NULL);
menu = CreateBarSubMenu(menubar, "Media");
GtkWidget *videosub;
videosub = CreateSubMenu(menu, "Video");
GSList *videosizelist = NULL;
GtkWidget *videoradio;
videoradio = CreateMenuRadio(videosub,
"50 %",
&videosizelist,
GTK_SIGNAL_FUNC(on_video_radio),
GINT_TO_POINTER(50));
videoradio = CreateMenuRadio(videosub,
"100 %",
&videosizelist,
GTK_SIGNAL_FUNC(on_video_radio),
GINT_TO_POINTER(100));
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(videoradio), TRUE);
videoradio = CreateMenuRadio(videosub,
"200 %",
&videosizelist,
GTK_SIGNAL_FUNC(on_video_radio),
GINT_TO_POINTER(200));
menuitem = CreateMenuItem(videosub,
accel_group,
tooltips,
NULL, NULL, NULL,
NULL, NULL);
menuitem = CreateMenuItem(videosub,
accel_group,
tooltips,
"Full Screen",
"M-<enter>",
"Full Screen",
GTK_SIGNAL_FUNC(on_video_fullscreen),
NULL);
menuitem = CreateMenuCheck(menu,
"Play Audio",
GTK_SIGNAL_FUNC(on_media_play_audio),
NULL,
config.get_config_value(CONFIG_PLAY_AUDIO));
menuitem = CreateMenuCheck(menu,
"Play Video",
GTK_SIGNAL_FUNC(on_media_play_video),
NULL,
config.get_config_value(CONFIG_PLAY_VIDEO));
menu = CreateBarSubMenu(menubar, "Network");
menuitem = CreateMenuCheck(menu,
"Use RTP over RTSP(TCP)",
GTK_SIGNAL_FUNC(on_network_rtp_over_rtsp),
NULL,
config.get_config_value(CONFIG_USE_RTP_OVER_RTSP));
menu = CreateBarSubMenu(menubar, "Help");
menuitem = CreateMenuItem(menu,
accel_group,
tooltips,
"Help",
NULL,
NULL,
GTK_SIGNAL_FUNC(on_main_menu_help),
NULL);
CreateMenuItemSeperator(menu);
GtkWidget *debugsub;
debugsub = CreateSubMenu(menu, "Debug");
menuitem = CreateMenuCheck(debugsub,
"Mpeg4ISOOnly",
GTK_SIGNAL_FUNC(on_debug_mpeg4isoonly),
NULL,
config.get_config_value(CONFIG_USE_MPEG4_ISO_ONLY) == 0 ? FALSE : TRUE);
menuitem = CreateMenuCheck(debugsub,
"Use Old mp4 library",
GTK_SIGNAL_FUNC(on_debug_use_old_mp4_lib),
NULL,
config.get_config_value(CONFIG_USE_OLD_MP4_LIB) == 0 ? FALSE : TRUE);
CreateLogLevelSubmenu(debugsub,
"HTTP library",
config.get_config_value(CONFIG_HTTP_DEBUG),
GTK_SIGNAL_FUNC(on_debug_http));
CreateLogLevelSubmenu(debugsub,
"RTSP library",
config.get_config_value(CONFIG_RTSP_DEBUG),
GTK_SIGNAL_FUNC(on_debug_rtsp));
CreateLogLevelSubmenu(debugsub,
"RTP library",
config.get_config_value(CONFIG_RTP_DEBUG),
GTK_SIGNAL_FUNC(on_debug_rtp));
CreateLogLevelSubmenu(debugsub,
"SDP library",
config.get_config_value(CONFIG_SDP_DEBUG),
GTK_SIGNAL_FUNC(on_debug_sdp));
CreateMenuItemSeperator(menu);
menuitem = CreateMenuItem(menu,
accel_group,
tooltips,
"About",
NULL,
NULL,
GTK_SIGNAL_FUNC(on_main_menu_about),
NULL);
// this is how you turn off the widget
gtk_widget_set_sensitive(close_menuitem, 0);
GtkWidget *hbox;
/*
* first line - Play: combo box browse button
*/
hbox = gtk_hbox_new(FALSE, 1);
gtk_widget_show(hbox);
gtk_box_pack_start(GTK_BOX(main_vbox), hbox, FALSE, FALSE, 5);
GtkWidget *label;
label = gtk_label_new("Play: ");
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 10);
gtk_widget_show(label);
// combo box uses list playlist.
combo = gtk_combo_new();
gtk_signal_connect(GTK_OBJECT(GTK_COMBO(combo)->entry),
"activate",
GTK_SIGNAL_FUNC(on_play_list_selected),
NULL);
gtk_signal_connect(GTK_OBJECT(GTK_COMBO(combo)->list),
"select_child",
GTK_SIGNAL_FUNC(on_playlist_child_selected),
combo);
gtk_combo_set_popdown_strings (GTK_COMBO(combo), playlist);
gtk_combo_set_value_in_list(GTK_COMBO(combo), FALSE, FALSE);
gtk_combo_disable_activate(GTK_COMBO(combo));
gtk_combo_set_use_arrows_always(GTK_COMBO(combo), 1);
gtk_box_pack_start(GTK_BOX(hbox), combo, TRUE, TRUE, 0);
gtk_widget_show(combo);
/* button for browse */
GtkWidget *button;
button = gtk_button_new_with_label("Browse");
gtk_signal_connect(GTK_OBJECT(button),
"clicked",
GTK_SIGNAL_FUNC(on_browse_button_clicked),
NULL);
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 10);
gtk_widget_show(button);
/*************************************************************************
* 2nd line play pause stop speaker volume
*************************************************************************/
hbox = gtk_hbox_new(FALSE, 1);
gtk_box_pack_start(GTK_BOX(main_vbox), hbox, FALSE, FALSE, 5);
gtk_widget_show(hbox);
GtkWidget *vbox, *hbox2;
vbox = gtk_vbox_new(TRUE, 1);
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5);
gtk_widget_show(vbox);
hbox2 = gtk_hbox_new(TRUE, 1);
gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0);
gtk_widget_show(hbox2);
GtkWidget *image;
play_button = gtk_toggle_button_new();
image = CreateWidgetFromXpm(main_window,xpm_play);
gtk_container_add(GTK_CONTAINER(play_button), image);
gdk_pixmap_unref((GdkPixmap *)image);
gtk_widget_show(play_button);
gtk_signal_connect(GTK_OBJECT(play_button),
"clicked",
GTK_SIGNAL_FUNC(on_play_clicked),
NULL);
gtk_box_pack_start(GTK_BOX(hbox2), play_button, FALSE, FALSE, 2);
pause_button = gtk_toggle_button_new();
image = CreateWidgetFromXpm(main_window,xpm_pause);
gtk_container_add(GTK_CONTAINER(pause_button), image);
gdk_pixmap_unref((GdkPixmap *)image);
gtk_widget_show(pause_button);
gtk_signal_connect(GTK_OBJECT(pause_button),
"clicked",
GTK_SIGNAL_FUNC(on_pause_clicked),
NULL);
gtk_box_pack_start(GTK_BOX(hbox2), pause_button, FALSE, FALSE, 2);
stop_button = gtk_toggle_button_new();
image = CreateWidgetFromXpm(main_window,xpm_stop);
gtk_container_add(GTK_CONTAINER(stop_button), image);
gdk_pixmap_unref((GdkPixmap *)image);
gtk_widget_show(stop_button);
gtk_signal_connect(GTK_OBJECT(stop_button),
"clicked",
GTK_SIGNAL_FUNC(on_stop_clicked),
NULL);
gtk_box_pack_start(GTK_BOX(hbox2), stop_button, FALSE, FALSE, 2);
gtk_widget_set_sensitive(play_button, 0);
gtk_widget_set_sensitive(pause_button, 0);
gtk_widget_set_sensitive(stop_button, 0);
GtkWidget *sep = gtk_vseparator_new();
gtk_widget_show(sep);
gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 5);
vbox = gtk_vbox_new(FALSE, 1);
gtk_widget_show(vbox);
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5);
hbox2 = gtk_hbox_new(FALSE, 1);
gtk_widget_show(hbox2);
gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0);
speaker_button = gtk_button_new();
image = CreateWidgetFromXpm(speaker_button,
master_muted == 0 ?
xpm_speaker : xpm_speaker_muted);
gtk_container_add(GTK_CONTAINER(speaker_button), image);
gdk_pixmap_unref((GdkPixmap *)image);
gtk_widget_show(speaker_button);
gtk_signal_connect(GTK_OBJECT(speaker_button),
"clicked",
GTK_SIGNAL_FUNC(on_speaker_clicked),
NULL);
gtk_box_pack_start(GTK_BOX(hbox2), speaker_button, FALSE, FALSE, 5);
GtkObject *vol_adj;
vol_adj = gtk_adjustment_new(master_volume,
0.0,
100.0,
5.0,
25.0,
0.0);
GtkWidget *vol;
vol = gtk_hscale_new(GTK_ADJUSTMENT(vol_adj));
gtk_scale_set_digits(GTK_SCALE(vol),0);
gtk_scale_set_draw_value(GTK_SCALE(vol), 0);
gtk_range_set_adjustment ( GTK_RANGE( vol ), GTK_ADJUSTMENT(vol_adj));
gtk_range_slider_update ( GTK_RANGE( vol ) );
gtk_range_clear_background ( GTK_RANGE( vol ) );
//gtk_range_draw_background ( GTK_RANGE( vol ) );
#if 0
// We don't need this - I'm not 100% sure why, but we don't...
gtk_signal_connect(vol_adj,
"value_changed",
GTK_SIGNAL_FUNC(on_volume_adjusted),
vol);
#endif
gtk_signal_connect(GTK_OBJECT(vol),
"button_release_event",
GTK_SIGNAL_FUNC(on_volume_adjusted),
vol);
gtk_widget_show(vol);
volume_slider = vol;
gtk_box_pack_start(GTK_BOX(hbox2), vol, TRUE, TRUE, 0);
// boxes for Looped label
sep = gtk_vseparator_new();
gtk_widget_show(sep);
gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 5);
vbox = gtk_vbox_new(TRUE, 1);
gtk_widget_show(vbox);
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5);
hbox2 = gtk_hbox_new(TRUE, 1);
gtk_widget_show(hbox2);
gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0);
GtkWidget *loop_enabled_button;
loop_enabled_button = gtk_check_button_new_with_label("Looped");
gtk_box_pack_start(GTK_BOX(hbox2), loop_enabled_button, FALSE, FALSE, 0);
gtk_signal_connect(GTK_OBJECT(loop_enabled_button),
"toggled",
GTK_SIGNAL_FUNC(on_loop_enabled_button),
loop_enabled_button);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(loop_enabled_button),
master_looped);
gtk_widget_show(loop_enabled_button);
/*
* 3rd line - where we are meter...
*/
hbox = gtk_hbox_new(FALSE, 5);
gtk_box_pack_start(GTK_BOX(main_vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show(hbox);
GtkObject *time_slider_adj;
master_time = 0;
time_slider_adj = gtk_adjustment_new(0.0,
0.0,
100.0,
0.5,
0.5,
0.5);
time_slider = gtk_hscale_new(GTK_ADJUSTMENT(time_slider_adj));
gtk_widget_ref(time_slider);
gtk_range_set_update_policy(GTK_RANGE(time_slider), GTK_UPDATE_DELAYED);
gtk_scale_set_digits(GTK_SCALE(time_slider),0);
gtk_scale_set_draw_value(GTK_SCALE(time_slider), 0);
gtk_range_set_adjustment(GTK_RANGE(time_slider),
GTK_ADJUSTMENT(time_slider_adj));
gtk_range_slider_update(GTK_RANGE(time_slider));
gtk_range_clear_background(GTK_RANGE( time_slider));
//gtk_range_draw_background(GTK_RANGE(time_slider));
gtk_signal_connect(GTK_OBJECT(time_slider),
"button_release_event",
GTK_SIGNAL_FUNC(on_time_slider_adjusted),
time_slider);
gtk_signal_connect(GTK_OBJECT(time_slider),
"button_press_event",
GTK_SIGNAL_FUNC(on_time_slider_pressed),
NULL);
gtk_widget_set_sensitive(time_slider, 0);
gtk_widget_show(time_slider);
gtk_box_pack_start(GTK_BOX(hbox), time_slider, TRUE, TRUE, 0);
/*
* 4th line - time display...
*/
hbox = gtk_hbox_new(FALSE, 1);
gtk_box_pack_start(GTK_BOX(main_vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show(hbox);
time_disp = gtk_label_new("0:00:00");
gtk_widget_ref(time_disp);
gtk_widget_show(time_disp);
gtk_box_pack_start(GTK_BOX(hbox), time_disp, TRUE, TRUE,0);
// session information
for (int ix = 0; ix < 4; ix++) {
hbox = gtk_hbox_new(FALSE, 1);
gtk_box_pack_start(GTK_BOX(main_vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show(hbox);
session_desc[ix] = gtk_label_new("");
gtk_widget_ref(session_desc[ix]);
gtk_widget_show(session_desc[ix]);
gtk_box_pack_start(GTK_BOX(hbox), session_desc[ix], TRUE, TRUE,0);
}
gtk_timeout_add(500, main_timer, main_window);
gtk_container_add(GTK_CONTAINER(main_window), main_vbox);
gtk_widget_show(main_window);
/*
* set up drag and drop
*/
gtk_drag_dest_set(main_window,
GTK_DEST_DEFAULT_ALL,
drop_types,
1,
GDK_ACTION_COPY);
gtk_signal_connect(GTK_OBJECT(main_window),
"drag_data_received",
GTK_SIGNAL_FUNC(on_drag_data_received),
main_window);
/*
* any args passed ?
*/
argc--;
argv++;
if (argc > 0) {
start_session_from_name(*argv);
}
gtk_main();
exit(0);
}
/* end gui_main.cpp */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -