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:
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(); }