X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=mainwindow.cpp;h=0b1ad4a93eefc193f1d418d5a502825b1d676f49;hb=ffdaf77a93025a46bf2c428b881ea73a2ed6c8c4;hp=5535c151bfcf2594390d5bdb141785acfa4c77de;hpb=593173ffcdbccff777720b3c41c3e771fa93a10a;p=nageru diff --git a/mainwindow.cpp b/mainwindow.cpp index 5535c15..0b1ad4a 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -31,6 +32,15 @@ using namespace std::placeholders; Q_DECLARE_METATYPE(std::vector); +namespace { + +void schedule_cut_signal(int ignored) +{ + global_mixer->schedule_cut(); +} + +} // namespace + MainWindow *global_mainwindow = nullptr; MainWindow::MainWindow() @@ -47,7 +57,7 @@ MainWindow::MainWindow() connect(ui->exit_action, &QAction::triggered, this, &MainWindow::exit_triggered); connect(ui->about_action, &QAction::triggered, this, &MainWindow::about_triggered), - // Hook up the transition buttons. + // Hook up the transition buttons. (Keyboard shortcuts are set in set_transition_names().) // TODO: Make them dynamic. connect(ui->transition_btn1, &QPushButton::clicked, bind(&MainWindow::transition_clicked, this, 0)); connect(ui->transition_btn2, &QPushButton::clicked, bind(&MainWindow::transition_clicked, this, 1)); @@ -90,8 +100,9 @@ void MainWindow::mixer_created(Mixer *mixer) // Hook up the click. connect(ui_display->display, &GLWidget::clicked, bind(&MainWindow::channel_clicked, this, i)); - // Let the theme update the text whenever the resolution changed. + // Let the theme update the text whenever the resolution or color changed. connect(ui_display->display, &GLWidget::resolution_updated, this, &MainWindow::update_channel_name); + connect(ui_display->display, &GLWidget::color_updated, this, &MainWindow::update_channel_color); // Hook up the keyboard key. QShortcut *shortcut = new QShortcut(QKeySequence(Qt::Key_1 + i), this); @@ -134,6 +145,11 @@ void MainWindow::mixer_created(Mixer *mixer) }); connect(ui->reset_meters_button, &QPushButton::clicked, this, &MainWindow::reset_meters_button_clicked); mixer->set_audio_level_callback(bind(&MainWindow::audio_level_callback, this, _1, _2, _3, _4, _5, _6, _7, _8)); + + struct sigaction act; + act.sa_handler = schedule_cut_signal; + act.sa_flags = SA_RESTART; + sigaction(SIGHUP, &act, nullptr); } void MainWindow::mixer_shutting_down() @@ -280,8 +296,9 @@ void MainWindow::relayout() remaining_height -= audiostrip_height + ui->vertical_layout->spacing(); // The previews will be constrained by the remaining height, and the width. - double preview_label_height = previews[0]->title_bar->geometry().height() + ui->preview_displays->spacing(); // Wrong spacing? - int preview_total_width = ui->preview_displays->geometry().width(); + double preview_label_height = previews[0]->title_bar->geometry().height() + + previews[0]->main_vertical_layout->spacing(); + int preview_total_width = ui->preview_displays->geometry().width() - (previews.size() - 1) * ui->preview_displays->spacing(); double preview_height = min(remaining_height - preview_label_height, (preview_total_width / double(previews.size())) * 9.0 / 16.0); remaining_height -= preview_height + preview_label_height + ui->vertical_layout->spacing(); @@ -292,33 +309,34 @@ void MainWindow::relayout() // Set the widths for the previews. double preview_width = preview_height * 16.0 / 9.0; - double remaining_preview_width = preview_total_width; - for (unsigned i = 0; i < previews.size(); ++i) { ui->preview_displays->setStretch(i, lrintf(preview_width)); - remaining_preview_width -= preview_width + ui->preview_displays->spacing(); } // The preview horizontal spacer. + double remaining_preview_width = preview_total_width - previews.size() * preview_width; ui->preview_displays->setStretch(previews.size(), lrintf(remaining_preview_width)); } void MainWindow::set_transition_names(vector transition_names) { - if (transition_names.size() < 1) { + if (transition_names.size() < 1 || transition_names[0].empty()) { transition_btn1->setText(QString("")); } else { - transition_btn1->setText(QString::fromStdString(transition_names[0])); + transition_btn1->setText(QString::fromStdString(transition_names[0] + " (J)")); + ui->transition_btn1->setShortcut(QKeySequence("J")); } - if (transition_names.size() < 2) { + if (transition_names.size() < 2 || transition_names[1].empty()) { transition_btn2->setText(QString("")); } else { - transition_btn2->setText(QString::fromStdString(transition_names[1])); + transition_btn2->setText(QString::fromStdString(transition_names[1] + " (K)")); + ui->transition_btn2->setShortcut(QKeySequence("K")); } - if (transition_names.size() < 3) { + if (transition_names.size() < 3 || transition_names[2].empty()) { transition_btn3->setText(QString("")); } else { - transition_btn3->setText(QString::fromStdString(transition_names[2])); + transition_btn3->setText(QString::fromStdString(transition_names[2] + " (L)")); + ui->transition_btn3->setShortcut(QKeySequence("L")); } } @@ -330,6 +348,15 @@ void MainWindow::update_channel_name(Mixer::Output output) } } +void MainWindow::update_channel_color(Mixer::Output output) +{ + if (output >= Mixer::OUTPUT_INPUT0) { + unsigned channel = output - Mixer::OUTPUT_INPUT0; + string color = global_mixer->get_channel_color(output); + previews[channel]->frame->setStyleSheet(QString::fromStdString("background-color:" + color)); + } +} + void MainWindow::transition_clicked(int transition_number) { global_mixer->transition_clicked(transition_number);