gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

commit 8493be12d61081cff554b9b043367acd5d85d0e4
parent 824715deabf5169ec73eac54bba3616854068d4f
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Tue,  5 Nov 2024 22:58:26 +0100

implement context menu for control table entry

Diffstat:
Msource/xtJucePlugin/weControlTreeItem.cpp | 23+++++++++++++++++++++++
Msource/xtJucePlugin/weControlTreeItem.h | 2++
Msource/xtJucePlugin/weWaveTreeItem.cpp | 16++--------------
Msource/xtJucePlugin/xtWaveEditor.cpp | 18++++++++++++++++++
Msource/xtJucePlugin/xtWaveEditor.h | 2++
5 files changed, 47 insertions(+), 14 deletions(-)

diff --git a/source/xtJucePlugin/weControlTreeItem.cpp b/source/xtJucePlugin/weControlTreeItem.cpp @@ -105,6 +105,29 @@ namespace xtJucePlugin } } + void ControlTreeItem::itemClicked(const juce::MouseEvent& _mouseEvent) + { + if(!_mouseEvent.mods.isPopupMenu()) + { + TreeItem::itemClicked(_mouseEvent); + return; + } + + juce::PopupMenu menu; + + menu.addItem("Remove", [this] + { + m_editor.getData().setTableWave(m_table, m_index, g_invalidWaveIndex); + }); + menu.addItem("Select Wave", [this] + { + m_editor.setSelectedWave(m_wave); + }); + menu.addSubMenu("Copy to", m_editor.createCopyToSelectedTableMenu(m_wave)); + + menu.showMenuAsync({}); + } + void ControlTreeItem::onWaveChanged() const { repaintItem(); diff --git a/source/xtJucePlugin/weControlTreeItem.h b/source/xtJucePlugin/weControlTreeItem.h @@ -24,6 +24,8 @@ namespace xtJucePlugin bool isInterestedInDragSource(const juce::DragAndDropTarget::SourceDetails& _dragSourceDetails) override; void itemDropped(const juce::DragAndDropTarget::SourceDetails& _dragSourceDetails, int _insertIndex) override; + void itemClicked(const juce::MouseEvent&) override; + private: void onWaveChanged() const; diff --git a/source/xtJucePlugin/weWaveTreeItem.cpp b/source/xtJucePlugin/weWaveTreeItem.cpp @@ -179,20 +179,8 @@ namespace xtJucePlugin if(selectedTableId.isValid()) { - juce::PopupMenu controlTableSlotsMenu; - for(uint16_t i=0; i<xt::wave::g_wavesPerTable; ++i) - { - const auto tableIndex = xt::TableIndex(i); - - if(i && (i & 15) == 0) - controlTableSlotsMenu.addColumnBreak(); - - controlTableSlotsMenu.addItem("Slot " + std::to_string(i + 1), !xt::wave::isReadOnly(tableIndex), false, [this, tableIndex, selectedTableId] - { - m_editor.getData().setTableWave(selectedTableId, tableIndex, m_waveIndex); - }); - } - menu.addSubMenu("Copy to current Control Table", controlTableSlotsMenu); + const auto subMenu = m_editor.createCopyToSelectedTableMenu(m_waveIndex); + menu.addSubMenu("Copy to current Control Table", subMenu); } menu.showMenuAsync({}); diff --git a/source/xtJucePlugin/xtWaveEditor.cpp b/source/xtJucePlugin/xtWaveEditor.cpp @@ -243,4 +243,22 @@ namespace xtJucePlugin const auto& wavetableNames = getEditor().getXtController().getParameterDescriptions().getValueList("waveType"); return wavetableNames->valueToText(_id.rawId()); } + + juce::PopupMenu WaveEditor::createCopyToSelectedTableMenu(xt::WaveId _id) + { + juce::PopupMenu controlTableSlotsMenu; + for(uint16_t i=0; i<xt::wave::g_wavesPerTable; ++i) + { + const auto tableIndex = xt::TableIndex(i); + + if(i && (i & 15) == 0) + controlTableSlotsMenu.addColumnBreak(); + + controlTableSlotsMenu.addItem("Slot " + std::to_string(i), !xt::wave::isReadOnly(tableIndex), false, [this, tableIndex, _id] + { + getData().setTableWave(getSelectedTable(), tableIndex, _id); + }); + } + return controlTableSlotsMenu; + } } diff --git a/source/xtJucePlugin/xtWaveEditor.h b/source/xtJucePlugin/xtWaveEditor.h @@ -53,6 +53,8 @@ namespace xtJucePlugin xt::TableId getSelectedTable() const { return m_selectedTable; } + juce::PopupMenu createCopyToSelectedTableMenu(xt::WaveId _id); + private: // ComponentMovementWatcher void componentVisibilityChanged() override { checkFirstTimeVisible(); }