📄 gui_main.cpp
字号:
// enabled button record_enabled_button = gtk_check_button_new_with_label("Enabled"); gtk_box_pack_start(GTK_BOX(hbox), record_enabled_button, TRUE, TRUE, 5); gtk_signal_connect(GTK_OBJECT(record_enabled_button), "toggled", GTK_SIGNAL_FUNC(on_record_enabled_button), NULL); gtk_widget_show(record_enabled_button); // create second row hbox = gtk_hbox_new(FALSE, 1); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); // settings summary record_settings_label = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(record_settings_label), 0.0, 0.5); gtk_widget_show(record_settings_label); gtk_box_pack_start(GTK_BOX(hbox), record_settings_label, TRUE, TRUE, 0); // settings button record_settings_button = gtk_button_new_with_label(" Settings... "); gtk_box_pack_start(GTK_BOX(hbox), record_settings_button, FALSE, FALSE, 5); gtk_signal_connect(GTK_OBJECT(record_settings_button), "clicked", GTK_SIGNAL_FUNC(on_record_settings_button), NULL); gtk_widget_show(record_settings_button); // finalize gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_widget_show(frame);}static void LayoutTransmitFrame(GtkWidget* box){ GtkWidget *frame; GtkWidget *vbox, *hbox; frame = gtk_frame_new("Transmission"); gtk_frame_set_label_align(GTK_FRAME(frame), frameLabelAlignment, 0); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 5); vbox = gtk_vbox_new(FALSE, 1); gtk_widget_show(vbox); // create first row, homogenous hbox = gtk_hbox_new(TRUE, 1); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 5); // enabled button transmit_enabled_button = gtk_check_button_new_with_label("Enabled"); gtk_box_pack_start(GTK_BOX(hbox), transmit_enabled_button, TRUE, TRUE, 5); gtk_signal_connect(GTK_OBJECT(transmit_enabled_button), "toggled", GTK_SIGNAL_FUNC(on_transmit_enabled_button), NULL); gtk_widget_show(transmit_enabled_button); // create second row hbox = gtk_hbox_new(FALSE, 1); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); // settings summary transmit_settings_label = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(transmit_settings_label), 0.0, 0.5); gtk_widget_show(transmit_settings_label); gtk_box_pack_start(GTK_BOX(hbox), transmit_settings_label, TRUE, TRUE, 0); // settings button transmit_settings_button = gtk_button_new_with_label(" Settings... "); gtk_box_pack_start(GTK_BOX(hbox), transmit_settings_button, FALSE, FALSE, 5); gtk_signal_connect(GTK_OBJECT(transmit_settings_button), "clicked", GTK_SIGNAL_FUNC(on_transmit_settings_button), NULL); gtk_widget_show(transmit_settings_button); // finalize gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_widget_show(frame);}// Control framevoid LayoutControlFrame(GtkWidget* box){ GtkWidget *frame; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *label; GtkWidget *separator; GtkObject* adjustment; frame = gtk_frame_new("Control"); gtk_frame_set_label_align(GTK_FRAME(frame), frameLabelAlignment, 0); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); gtk_box_pack_end(GTK_BOX(box), frame, FALSE, FALSE, 5); vbox = gtk_vbox_new(FALSE, 1); gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(frame), vbox); hbox = gtk_hbox_new(FALSE, 1); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); label = gtk_label_new(" Duration:"); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); adjustment = gtk_adjustment_new( MyConfig->GetIntegerValue(CONFIG_APP_DURATION), 1, 24 * 60 * 60, 1, 0, 0); duration_spinner = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), 1, 0); gtk_signal_connect(GTK_OBJECT(duration_spinner), "value-changed", GTK_SIGNAL_FUNC(on_duration_changed), GTK_OBJECT(duration_spinner)); gtk_widget_show(duration_spinner); gtk_box_pack_start(GTK_BOX(hbox), duration_spinner, FALSE, FALSE, 5); durationUnitsIndex = 0; // temporary duration_units_menu = CreateOptionMenu(NULL, durationUnitsNames, sizeof(durationUnitsNames) / sizeof(char*), durationUnitsIndex, GTK_SIGNAL_FUNC(on_duration_units_menu_activate)); gtk_box_pack_start(GTK_BOX(hbox), duration_units_menu, FALSE, FALSE, 5); // vertical separator separator = gtk_vseparator_new(); gtk_widget_show(separator); gtk_box_pack_start(GTK_BOX(hbox), separator, FALSE, FALSE, 0); start_button = gtk_button_new(); start_button_label = gtk_label_new(" Start "); gtk_misc_set_alignment(GTK_MISC(start_button_label), 0.5, 0.5); gtk_container_add(GTK_CONTAINER(start_button), start_button_label); gtk_widget_show(start_button_label); gtk_box_pack_start(GTK_BOX(hbox), start_button, TRUE, TRUE, 5); gtk_signal_connect(GTK_OBJECT(start_button), "clicked", GTK_SIGNAL_FUNC(on_start_button), NULL); gtk_widget_show(start_button); // separator separator = gtk_hseparator_new(); gtk_widget_show(separator); gtk_box_pack_start(GTK_BOX(vbox), separator, TRUE, TRUE, 0); // second row hbox = gtk_hbox_new(FALSE, 1); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); label = gtk_label_new(" Configuration File:"); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); config_file_entry = gtk_entry_new_with_max_length(256); gtk_entry_set_text(GTK_ENTRY(config_file_entry), MyConfig->GetFileName()); gtk_widget_show(config_file_entry); gtk_box_pack_start(GTK_BOX(hbox), config_file_entry, TRUE, TRUE, 5); // config file load button load_config_button = gtk_button_new_with_label(" Load... "); gtk_signal_connect(GTK_OBJECT(load_config_button), "clicked", GTK_SIGNAL_FUNC(on_load_config_button), NULL); gtk_widget_show(load_config_button); gtk_box_pack_start(GTK_BOX(hbox), load_config_button, FALSE, FALSE, 5); // config file save button save_config_button = gtk_button_new_with_label(" Save "); gtk_signal_connect(GTK_OBJECT(save_config_button), "clicked", GTK_SIGNAL_FUNC(on_save_config_button), NULL); gtk_widget_show(save_config_button); gtk_box_pack_start(GTK_BOX(hbox), save_config_button, FALSE, FALSE, 5); gtk_widget_show(frame); // show control frame}// Status framevoid LayoutStatusFrame(GtkWidget* box){ GtkWidget *frame; GtkWidget *frame_vbox; GtkWidget *vbox, *hbox; GtkWidget *separator; frame = gtk_frame_new("Status"); gtk_frame_set_label_align(GTK_FRAME(frame), frameLabelAlignment, 0); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); gtk_box_pack_end(GTK_BOX(box), frame, FALSE, FALSE, 5); // frame vbox frame_vbox = gtk_vbox_new(FALSE, 1); gtk_widget_show(frame_vbox); gtk_container_add(GTK_CONTAINER(frame), frame_vbox); // first row hbox = gtk_hbox_new(FALSE, 1); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(frame_vbox), hbox, FALSE, FALSE, 2); media_source_label = gtk_label_new(" Source:"); gtk_misc_set_alignment(GTK_MISC(media_source_label), 0.0, 0.5); gtk_widget_show(media_source_label); gtk_box_pack_start(GTK_BOX(hbox), media_source_label, TRUE, TRUE, 5); media_source = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(media_source), 1.0, 0.5); gtk_widget_show(media_source); gtk_box_pack_start(GTK_BOX(hbox), media_source, TRUE, TRUE, 5); // separator separator = gtk_hseparator_new(); gtk_widget_show(separator); gtk_box_pack_start(GTK_BOX(frame_vbox), separator, TRUE, TRUE, 0); // second row hbox = gtk_hbox_new(FALSE, 1); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(frame_vbox), hbox, FALSE, FALSE, 2); // vbox for time labels vbox = gtk_vbox_new(FALSE, 1); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); start_time_label = gtk_label_new(" Start Time:"); gtk_misc_set_alignment(GTK_MISC(start_time_label), 0.0, 0.5); gtk_widget_show(start_time_label); gtk_box_pack_start(GTK_BOX(vbox), start_time_label, TRUE, TRUE, 0); duration_label = gtk_label_new(" Current Duration:"); gtk_misc_set_alignment(GTK_MISC(duration_label), 0.0, 0.5); gtk_widget_show(duration_label); gtk_box_pack_start(GTK_BOX(vbox), duration_label, TRUE, TRUE, 0); current_time_label = gtk_label_new(" Current Time:"); gtk_misc_set_alignment(GTK_MISC(current_time_label), 0.0, 0.5); gtk_widget_show(current_time_label); gtk_box_pack_start(GTK_BOX(vbox), current_time_label, TRUE, TRUE, 0); finish_time_label = gtk_label_new(" Finish Time:"); gtk_misc_set_alignment(GTK_MISC(finish_time_label), 0.0, 0.5); gtk_widget_show(finish_time_label); gtk_box_pack_start(GTK_BOX(vbox), finish_time_label, TRUE, TRUE, 0); // vbox for time values vbox = gtk_vbox_new(FALSE, 1); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); start_time = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(start_time), 1.0, 0.5); gtk_widget_show(start_time); gtk_box_pack_start(GTK_BOX(vbox), start_time, TRUE, TRUE, 0); duration = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(duration), 1.0, 0.5); gtk_widget_show(duration); gtk_box_pack_start(GTK_BOX(vbox), duration, TRUE, TRUE, 0); current_time = gtk_label_new(" "); gtk_misc_set_alignment(GTK_MISC(current_time), 1.0, 0.5); gtk_widget_show(current_time); gtk_box_pack_start(GTK_BOX(vbox), current_time, TRUE, TRUE, 0); finish_time = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(finish_time), 1.0, 0.5); gtk_widget_show(finish_time); gtk_box_pack_start(GTK_BOX(vbox), finish_time, TRUE, TRUE, 0); // vbox for time units vbox = gtk_vbox_new(FALSE, 1); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5); start_time_units = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(start_time_units), 1.0, 0.5); gtk_widget_show(start_time_units); gtk_box_pack_start(GTK_BOX(vbox), start_time_units, TRUE, TRUE, 0); duration_units = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(duration_units), 1.0, 0.5); gtk_widget_show(duration_units); gtk_box_pack_start(GTK_BOX(vbox), duration_units, TRUE, TRUE, 0); current_time_units = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(current_time_units), 1.0, 0.5); gtk_widget_show(current_time_units); gtk_box_pack_start(GTK_BOX(vbox), current_time_units, TRUE, TRUE, 0); finish_time_units = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(finish_time_units), 1.0, 0.5); gtk_widget_show(finish_time_units); gtk_box_pack_start(GTK_BOX(vbox), finish_time_units, TRUE, TRUE, 0); // separator separator = gtk_hseparator_new(); gtk_widget_show(separator); gtk_box_pack_start(GTK_BOX(frame_vbox), separator, TRUE, TRUE, 0); // third row hbox = gtk_hbox_new(FALSE, 1); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(frame_vbox), hbox, FALSE, FALSE, 2); // vbox for size labels vbox = gtk_vbox_new(FALSE, 1); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); current_size_label = gtk_label_new(" Current Size:"); gtk_misc_set_alignment(GTK_MISC(current_size_label), 0.0, 0.5); gtk_widget_show(current_size_label); gtk_box_pack_start(GTK_BOX(vbox), current_size_label, TRUE, TRUE, 0); final_size_label = gtk_label_new(" Estimated Final Size:"); gtk_misc_set_alignment(GTK_MISC(final_size_label), 0.0, 0.5); gtk_widget_show(final_size_label); gtk_box_pack_start(GTK_BOX(vbox), final_size_label, TRUE, TRUE, 0); // vbox for size values vbox = gtk_vbox_new(FALSE, 1); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); current_size = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(current_size), 1.0, 0.5); gtk_widget_show(current_size); gtk_box_pack_start(GTK_BOX(vbox), current_size, TRUE, TRUE, 0); final_size = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(final_size), 1.0, 0.5); gtk_widget_show(final_size); gtk_box_pack_start(GTK_BOX(vbox), final_size, TRUE, TRUE, 0); // vbox for size units vbox = gtk_vbox_new(FALSE, 1); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5); current_size_units = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(current_size_units), 1.0, 0.5); gtk_widget_show(current_size_units); gtk_box_pack_start(GTK_BOX(vbox), current_size_units, TRUE, TRUE, 0); final_size_units = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(final_size_units), 1.0, 0.5); gtk_widget_show(final_size_units); gtk_box_pack_start(GTK_BOX(vbox), final_size_units, TRUE, TRUE, 0); // separator separator = gtk_hseparator_new(); gtk_widget_show(separator); gtk_box_pack_start(GTK_BOX(frame_vbox), separator, TRUE, TRUE, 0); // fourth row hbox = gtk_hbox_new(FALSE, 1); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(frame_vbox), hbox, FALSE, FALSE, 2); actual_fps_label = gtk_label_new(" Video Frame Rate:"); gtk_misc_set_alignment(GTK_MISC(actual_fps_label), 0.0, 0.5); gtk_widget_show(actual_fps_label); gtk_box_pack_start(GTK_BOX(hbox), actual_fps_label, TRUE, TRUE, 5); actual_fps = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(actual_fps), 1.0, 0.5); gtk_widget_show(actual_fps); gtk_box_pack_start(GTK_BOX(hbox), actual_fps, FALSE, FALSE, 0); actual_fps_units = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(actual_fps_units), 1.0, 0.5); gtk_widget_show(actual_fps_units); gtk_box_pack_start(GTK_BOX(hbox), actual_fps_units, FALSE, FALSE, 5); gtk_widget_show(frame); // show control frame}/* * Main routine - set up window */int gui_main(int argc, char **argv, CLiveConfig* pConfig){ MyConfig = pConfig; AVFlow = new CPreviewAVMediaFlow(pConfig); gtk_init(&argc, &argv); // Setup main window main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_policy(GTK_WINDOW(main_window), FALSE, FALSE, TRUE); char buffer[80]; snprintf(buffer, sizeof(buffer), "cisco mp4live %s", VERSION); gtk_window_set_title(GTK_WINDOW(main_window), buffer); gtk_signal_connect(GTK_OBJECT(main_window), "delete_event", GTK_SIGNAL_FUNC(delete_event), NULL); // main boxes main_hbox = gtk_hbox_new(FALSE, 1); gtk_container_set_border_width(GTK_CONTAINER(main_hbox), 4); gtk_widget_show(main_hbox); gtk_container_add(GTK_CONTAINER(main_window), main_hbox); main_vbox1 = gtk_vbox_new(FALSE, 1); gtk_container_set_border_width(GTK_CONTAINER(main_vbox1), 4); gtk_widget_show(main_vbox1); gtk_box_pack_start(GTK_BOX(main_hbox), main_vbox1, FALSE, FALSE, 5); main_vbox2 = gtk_vbox_new(FALSE, 1); gtk_container_set_border_width(GTK_CONTAINER(main_vbox2), 4); gtk_widget_show(main_vbox2); gtk_box_pack_start(GTK_BOX(main_hbox), main_vbox2, FALSE, FALSE, 5); // Video Preview NewVideoWindow(); // Video Frame LayoutVideoFrame(main_vbox2); // Audio Frame LayoutAudioFrame(main_vbox2); // Recording Frame LayoutRecordingFrame(main_vbox2); // Transmission Frame LayoutTransmitFrame(main_vbox2); // Status frame LayoutStatusFrame(main_vbox1); // Control frame LayoutControlFrame(main_vbox1); DisplayAllSettings(); gtk_widget_show(main_window); if (MyConfig->GetBoolValue(CONFIG_VIDEO_ENABLE)) { AVFlow->StartVideoPreview(); } // "press" start button if (MyConfig->m_appAutomatic) { on_start_button(start_button, NULL); } gtk_main(); delete AVFlow; return 0;}/* end gui_main.cpp */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -