X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=glwidget.cpp;h=ca9416bc4f38a14e26566696642a1ba7491fd8f9;hb=4a300e3cab7b1b1ef5a32e1f4a7ec319c48e95e5;hp=7caee374becc777d2af42575d58427bac5848d6b;hpb=c6c5e2ca4ea51426e32608f8b8e2cbcd5f1ab74f;p=nageru diff --git a/glwidget.cpp b/glwidget.cpp index 7caee37..ca9416b 100644 --- a/glwidget.cpp +++ b/glwidget.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -175,6 +176,18 @@ void GLWidget::show_preview_context_menu(unsigned signal_num, const QPoint &pos) QMenu card_submenu; QActionGroup card_group(&card_submenu); + QMenu interpretation_submenu; + QActionGroup interpretation_group(&interpretation_submenu); + + QMenu video_input_submenu; + QActionGroup video_input_group(&video_input_submenu); + + QMenu audio_input_submenu; + QActionGroup audio_input_group(&audio_input_submenu); + + QMenu mode_submenu; + QActionGroup mode_group(&mode_submenu); + unsigned num_cards = global_mixer->get_num_cards(); unsigned current_card = global_mixer->map_signal(signal_num); bool is_ffmpeg = global_mixer->card_is_ffmpeg(current_card); @@ -196,9 +209,6 @@ void GLWidget::show_preview_context_menu(unsigned signal_num, const QPoint &pos) // Note that this setting depends on which card is active. - QMenu interpretation_submenu; - QActionGroup interpretation_group(&interpretation_submenu); - YCbCrInterpretation current_interpretation = global_mixer->get_input_ycbcr_interpretation(current_card); { QAction *action = new QAction("Auto", &interpretation_group); @@ -239,10 +249,16 @@ void GLWidget::show_preview_context_menu(unsigned signal_num, const QPoint &pos) // --- The choices in the next few options depend a lot on which card is active --- bool has_auto_mode = false; - if (!is_ffmpeg) { + QAction *change_url_action = nullptr; + if (is_ffmpeg) { + // Add a menu to change the source URL if we're an FFmpeg card. + // (The theme can still override.) + if (global_mixer->card_is_ffmpeg(current_card)) { + change_url_action = new QAction("Change source filename/URL…", &menu); + menu.addAction(change_url_action); + } + } else { // Add a submenu for selecting video input, with an action for each input. - QMenu video_input_submenu; - QActionGroup video_input_group(&video_input_submenu); std::map video_inputs = global_mixer->get_available_video_inputs(current_card); uint32_t current_video_input = global_mixer->get_current_video_input(current_card); for (const auto &mode : video_inputs) { @@ -260,8 +276,6 @@ void GLWidget::show_preview_context_menu(unsigned signal_num, const QPoint &pos) menu.addMenu(&video_input_submenu); // The same for audio input. - QMenu audio_input_submenu; - QActionGroup audio_input_group(&audio_input_submenu); std::map audio_inputs = global_mixer->get_available_audio_inputs(current_card); uint32_t current_audio_input = global_mixer->get_current_audio_input(current_card); for (const auto &mode : audio_inputs) { @@ -279,8 +293,6 @@ void GLWidget::show_preview_context_menu(unsigned signal_num, const QPoint &pos) menu.addMenu(&audio_input_submenu); // The same for resolution. - QMenu mode_submenu; - QActionGroup mode_group(&mode_submenu); std::map video_modes = global_mixer->get_available_video_modes(current_card); uint32_t current_video_mode = global_mixer->get_current_video_mode(current_card); for (const auto &mode : video_modes) { @@ -341,6 +353,17 @@ void GLWidget::show_preview_context_menu(unsigned signal_num, const QPoint &pos) QAction *selected_item = menu.exec(global_pos); if (audio_source_action != nullptr && selected_item == audio_source_action) { global_audio_mixer->set_simple_input(current_card); + } else if (change_url_action != nullptr && selected_item == change_url_action) { + // NOTE: We can't use “this” as parent, since the dialog would inherit our style sheet. + bool ok; + const string url = global_mixer->get_ffmpeg_filename(current_card); + QString new_url = QInputDialog::getText(window(), tr("Change URL"), + tr("Enter new filename/URL for the given video input:"), QLineEdit::Normal, + QString::fromStdString(url), &ok); + // FIXME prefill the input + if (ok) { + global_mixer->set_ffmpeg_filename(current_card, new_url.toStdString()); + } } else if (selected_item == master_clock_action) { global_mixer->set_master_clock(signal_num); } else if (selected_item != nullptr) {