]> git.sesse.net Git - nageru/blobdiff - mainwindow.cpp
Fix so that you can't right-click on non-signal channels anymore.
[nageru] / mainwindow.cpp
index a1c291537fd5031f88fd33320f7c70f104ce4a7a..d46c87c38e7766b667230057482814f8879646ca 100644 (file)
@@ -46,6 +46,7 @@
 
 #include "aboutdialog.h"
 #include "alsa_pool.h"
+#include "analyzer.h"
 #include "clickable_label.h"
 #include "context_menus.h"
 #include "correlation_meter.h"
@@ -200,6 +201,7 @@ MainWindow::MainWindow()
        connect(ui->exit_action, &QAction::triggered, this, &MainWindow::exit_triggered);
        connect(ui->manual_action, &QAction::triggered, this, &MainWindow::manual_triggered);
        connect(ui->about_action, &QAction::triggered, this, &MainWindow::about_triggered);
+       connect(ui->open_analyzer_action, &QAction::triggered, this, &MainWindow::open_analyzer_triggered);
        connect(ui->simple_audio_mode, &QAction::triggered, this, &MainWindow::simple_audio_mode_triggered);
        connect(ui->multichannel_audio_mode, &QAction::triggered, this, &MainWindow::multichannel_audio_mode_triggered);
        connect(ui->input_mapping_action, &QAction::triggered, this, &MainWindow::input_mapping_triggered);
@@ -210,7 +212,7 @@ MainWindow::MainWindow()
        ui->timecode_stream_action->setChecked(global_flags.display_timecode_in_stream);
        ui->timecode_stdout_action->setChecked(global_flags.display_timecode_on_stdout);
 
-       if (global_flags.x264_video_to_http) {
+       if (global_flags.x264_video_to_http && isinf(global_flags.x264_crf)) {
                connect(ui->x264_bitrate_action, &QAction::triggered, this, &MainWindow::x264_bitrate_triggered);
        } else {
                ui->x264_bitrate_action->setEnabled(false);
@@ -251,6 +253,13 @@ MainWindow::MainWindow()
        connect(new QShortcut(QKeySequence::MoveToNextPage, this), &QShortcut::activated, switch_page);
        connect(new QShortcut(QKeySequence::MoveToPreviousPage, this), &QShortcut::activated, switch_page);
 
+       if (global_flags.enable_quick_cut_keys) {
+               ui->quick_cut_enable_action->setChecked(true);
+       }
+       connect(ui->quick_cut_enable_action, &QAction::changed, [this](){
+               global_flags.enable_quick_cut_keys = ui->quick_cut_enable_action->isChecked();
+       });
+
        last_audio_level_callback = steady_clock::now() - seconds(1);
 
        if (!global_flags.midi_mapping_filename.empty()) {
@@ -280,6 +289,7 @@ void MainWindow::mixer_created(Mixer *mixer)
        // Make the previews.
        unsigned num_previews = mixer->get_num_channels();
 
+       const char qwerty[] = "QWERTYUIOP";
        for (unsigned i = 0; i < num_previews; ++i) {
                Mixer::Output output = Mixer::Output(Mixer::OUTPUT_INPUT0 + i);
 
@@ -302,6 +312,12 @@ void MainWindow::mixer_created(Mixer *mixer)
                QShortcut *shortcut = new QShortcut(QKeySequence(Qt::Key_1 + i), this);
                connect(shortcut, &QShortcut::activated, bind(&MainWindow::channel_clicked, this, i));
 
+               // Hook up the quick-cut key.
+               if (i < strlen(qwerty)) {
+                       QShortcut *shortcut = new QShortcut(QKeySequence(qwerty[i]), this);
+                       connect(shortcut, &QShortcut::activated, bind(&MainWindow::quick_cut_activated, this, i));
+               }
+
                // Hook up the white balance button (irrelevant if invisible).
                ui_display->wb_button->setVisible(mixer->get_supports_set_wb(output));
                connect(ui_display->wb_button, &QPushButton::clicked, bind(&MainWindow::wb_button_clicked, this, i));
@@ -380,6 +396,8 @@ void MainWindow::mixer_created(Mixer *mixer)
        midi_mapper.refresh_lights();
        midi_mapper.start_thread();
 
+       analyzer.reset(new Analyzer);
+
        struct sigaction act;
        memset(&act, 0, sizeof(act));
        act.sa_handler = schedule_cut_signal;
@@ -495,7 +513,7 @@ void MainWindow::setup_audio_expanded_view()
                update_eq_label(bus_index, EQ_BAND_MID, global_audio_mixer->get_eq(bus_index, EQ_BAND_MID));
                update_eq_label(bus_index, EQ_BAND_BASS, global_audio_mixer->get_eq(bus_index, EQ_BAND_BASS));
                ui_audio_expanded_view->fader->setDbValue(global_audio_mixer->get_fader_volume(bus_index));
-               ui_audio_expanded_view->mute_button->setChecked(global_audio_mixer->get_mute(bus_index) ? Qt::Checked : Qt::Unchecked);
+               ui_audio_expanded_view->mute_button->setChecked(global_audio_mixer->get_mute(bus_index));
                connect(ui_audio_expanded_view->mute_button, &QPushButton::toggled,
                        bind(&MainWindow::mute_button_toggled, this, bus_index, _1));
                ui->buses->addWidget(channel);
@@ -549,11 +567,14 @@ void MainWindow::setup_audio_expanded_view()
 
 void MainWindow::mixer_shutting_down()
 {
-       ui->me_live->clean_context();
-       ui->me_preview->clean_context();
+       ui->me_live->shutdown();
+       ui->me_preview->shutdown();
+
        for (Ui::Display *display : previews) {
-               display->display->clean_context();
+               display->display->shutdown();
        }
+
+       analyzer->mixer_shutting_down();
 }
 
 void MainWindow::cut_triggered()
@@ -590,6 +611,11 @@ void MainWindow::about_triggered()
        AboutDialog().exec();
 }
 
+void MainWindow::open_analyzer_triggered()
+{
+       analyzer->show();
+}
+
 void MainWindow::simple_audio_mode_triggered()
 {
        if (global_audio_mixer->get_mapping_mode() == AudioMixer::MappingMode::SIMPLE) {
@@ -1242,6 +1268,8 @@ void MainWindow::update_channel_name(Mixer::Output output, const string &name)
                unsigned channel = output - Mixer::OUTPUT_INPUT0;
                previews[channel]->label->setText(name.c_str());
        }
+
+       analyzer->update_channel_name(output, name);
 }
 
 void MainWindow::update_channel_color(Mixer::Output output, const string &color)
@@ -1267,6 +1295,15 @@ void MainWindow::channel_clicked(int channel_number)
        }
 }
 
+void MainWindow::quick_cut_activated(int channel_number)
+{
+       if (!global_flags.enable_quick_cut_keys) {
+               return;
+       }
+       global_mixer->channel_clicked(channel_number);
+       global_mixer->transition_clicked(0);
+}
+
 void MainWindow::wb_button_clicked(int channel_number)
 {
        current_wb_pick_display = channel_number;
@@ -1291,6 +1328,12 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event)
        return false;
 }
 
+void MainWindow::closeEvent(QCloseEvent *event)
+{
+       analyzer->hide();
+       event->accept();
+}
+
 namespace {
 
 double srgb_to_linear(double x)