| 674 | } |
| 675 | |
| 676 | void ClientChainWidget::contextMenuEvent(QContextMenuEvent* ev) |
| 677 | { |
| 678 | const int idx = hitTest(ev->pos()); |
| 679 | if (idx < 0 || m_boxes[idx].isEndpoint) { QWidget::contextMenuEvent(ev); return; } |
| 680 | const auto stage = m_boxes[idx].stage; |
| 681 | if (!isStageImplemented(stage) || !m_audio) { |
| 682 | QToolTip::showText(ev->globalPos(), |
| 683 | QString("<b>%1</b> — not implemented yet").arg(stageLabel(stage)), |
| 684 | this); |
| 685 | return; |
| 686 | } |
| 687 | |
| 688 | QMenu menu(this); |
| 689 | auto* header = menu.addAction( |
| 690 | QString("Stage — %1").arg(stageLabel(stage))); |
| 691 | header->setEnabled(false); |
| 692 | menu.addSeparator(); |
| 693 | |
| 694 | const bool bypassed = isStageBypassed(stage); |
| 695 | auto* bypassAct = menu.addAction(bypassed ? "Enable" : "Bypass"); |
| 696 | auto* editAct = menu.addAction("Edit…"); |
| 697 | |
| 698 | QAction* chosen = menu.exec(ev->globalPos()); |
| 699 | if (!chosen) return; |
| 700 | if (chosen == editAct) { |
| 701 | emit editRequested(stage); |
| 702 | return; |
| 703 | } |
| 704 | if (chosen == bypassAct) { |
| 705 | const bool newEnabled = bypassed; // was bypassed → user wants it enabled |
| 706 | if (stage == AudioEngine::TxChainStage::Eq && m_audio->clientEqTx()) { |
| 707 | m_audio->clientEqTx()->setEnabled(newEnabled); |
| 708 | m_audio->saveClientEqSettings(); |
| 709 | } else if (stage == AudioEngine::TxChainStage::Comp && m_audio->clientCompTx()) { |
| 710 | m_audio->clientCompTx()->setEnabled(newEnabled); |
| 711 | m_audio->saveClientCompSettings(); |
| 712 | } else if (stage == AudioEngine::TxChainStage::Gate && m_audio->clientGateTx()) { |
| 713 | m_audio->clientGateTx()->setEnabled(newEnabled); |
| 714 | m_audio->saveClientGateSettings(); |
| 715 | } else if (stage == AudioEngine::TxChainStage::DeEss && m_audio->clientDeEssTx()) { |
| 716 | m_audio->clientDeEssTx()->setEnabled(newEnabled); |
| 717 | m_audio->saveClientDeEssSettings(); |
| 718 | } else if (stage == AudioEngine::TxChainStage::Tube && m_audio->clientTubeTx()) { |
| 719 | m_audio->clientTubeTx()->setEnabled(newEnabled); |
| 720 | m_audio->saveClientTubeSettings(); |
| 721 | } else if (stage == AudioEngine::TxChainStage::Enh && m_audio->clientPuduTx()) { |
| 722 | m_audio->clientPuduTx()->setEnabled(newEnabled); |
| 723 | m_audio->saveClientPuduSettings(); |
| 724 | } else if (stage == AudioEngine::TxChainStage::Reverb && m_audio->clientReverbTx()) { |
| 725 | m_audio->clientReverbTx()->setEnabled(newEnabled); |
| 726 | m_audio->saveClientReverbSettings(); |
| 727 | } |
| 728 | emit stageEnabledChanged(stage, newEnabled); |
| 729 | update(); |
| 730 | } |
| 731 | } |
| 732 | |
| 733 | void ClientChainWidget::dragEnterEvent(QDragEnterEvent* ev) |
nothing calls this directly
no test coverage detected