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 3ab910ab3703909c4ff2bfde4f66deccee02d465
parent 41312fe037a52565130e91c11b6b182e116be2b5
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Sun, 14 Jul 2024 12:12:54 +0200

drag & drop / patch rename working in grid mode

Diffstat:
Msource/jucePluginEditorLib/patchmanager/grid.cpp | 13++++++++++---
Msource/jucePluginEditorLib/patchmanager/griditem.cpp | 5++++-
Msource/jucePluginEditorLib/patchmanager/griditemcontainer.cpp | 13++++++++-----
3 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/source/jucePluginEditorLib/patchmanager/grid.cpp b/source/jucePluginEditorLib/patchmanager/grid.cpp @@ -203,9 +203,16 @@ namespace jucePluginEditorLib::patchManager repaint(); } - juce::Rectangle<int> Grid::getEntryPosition(int _row, bool _relativeToComponentTopLeft) + juce::Rectangle<int> Grid::getEntryPosition(const int _row, bool _relativeToComponentTopLeft) { - // TODO - return {}; + juce::Rectangle<int> result; + result.setSize(m_itemWidth, m_itemHeight); + + const auto x = _row / m_viewport.getVisibleRowCount(); + const auto y = _row - x * m_viewport.getVisibleRowCount(); + + result.setPosition(x * m_itemWidth - m_viewport.getViewArea().getX(), y * m_itemHeight - m_viewport.getViewArea().getY()); + + return result; } } diff --git a/source/jucePluginEditorLib/patchmanager/griditem.cpp b/source/jucePluginEditorLib/patchmanager/griditem.cpp @@ -7,6 +7,7 @@ namespace jucePluginEditorLib::patchManager GridItem::GridItem(Grid& _grid) : m_grid(_grid) { setInterceptsMouseClicks(false, true); + setSize(_grid.getItemWidth(), _grid.getItemHeight()); } void GridItem::paint(juce::Graphics& _g) @@ -22,12 +23,14 @@ namespace jucePluginEditorLib::patchManager juce::Component::paint(_g); } - void GridItem::setItem(uint32_t _index, juce::Component* _component) + void GridItem::setItem(const uint32_t _index, juce::Component* _component) { m_index = _index; m_item = _component; if(m_item->getParentComponent() != this) addAndMakeVisible(m_item); + + m_item->setSize(getWidth(), getHeight()); } } diff --git a/source/jucePluginEditorLib/patchmanager/griditemcontainer.cpp b/source/jucePluginEditorLib/patchmanager/griditemcontainer.cpp @@ -3,8 +3,6 @@ #include "grid.h" #include "griditem.h" -#include "dsp56kEmu/logging.h" - namespace jucePluginEditorLib::patchManager { GridItemContainer::GridItemContainer(Grid& _grid) : m_grid(_grid) @@ -50,7 +48,7 @@ namespace jucePluginEditorLib::patchManager juce::Graphics g (snapshot); g.setOrigin ((getLocalPoint (rowComp, juce::Point<int>()) - imageArea.getPosition()) * additionalScale); - const auto rowScale = Component::getApproximateScaleFactorForComponent (rowComp) * additionalScale; + const auto rowScale = getApproximateScaleFactorForComponent(rowComp) * additionalScale; if (g.reduceClipRegion (rowComp->getLocalBounds() * rowScale)) { @@ -69,7 +67,12 @@ namespace jucePluginEditorLib::patchManager { m_itemIndexMouseDown = InvalidItem; - const auto rows = m_grid.getSelectedEntries(); + juce::SparseSet<int> rows; + const auto hoveredIndex = mouseToItemIndex(_e); + if(m_grid.isSelected(hoveredIndex)) + rows = m_grid.getSelectedEntries(); + else + rows.addRange(juce::Range<int>(static_cast<int>(hoveredIndex), static_cast<int>(hoveredIndex)+1)); if(!rows.isEmpty()) { @@ -83,7 +86,7 @@ namespace jucePluginEditorLib::patchManager const auto dragImage = createSnapshotOfRows(rows, x, y); const auto p = juce::Point<int> (x, y) - _e.getEventRelativeTo (this).position.toInt(); - dragContainer->startDragging (dragDescription, this, dragImage, true, &p, &_e.source); + dragContainer->startDragging (dragDescription, &m_grid, dragImage, true, &p, &_e.source); } } }