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 2f17c8882bb530cc528384225307214fa0d40dcc
parent ba208cb240ffb4b70ea962b6632e16e8cd320153
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Sat,  4 May 2024 16:34:56 +0200

add deduplication by name

Diffstat:
Msource/jucePluginEditorLib/patchmanager/list.cpp | 35++++++++++++++++++++++++-----------
Msource/jucePluginEditorLib/patchmanager/list.h | 7++++---
2 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/source/jucePluginEditorLib/patchmanager/list.cpp b/source/jucePluginEditorLib/patchmanager/list.cpp @@ -290,9 +290,13 @@ namespace jucePluginEditorLib::patchManager } } menu.addSeparator(); - menu.addItem("Hide Duplicates", true, m_hideDuplicates, [this] + menu.addItem("Hide Duplicates (by hash)", true, m_hideDuplicatesByHash, [this] { - setFilter(m_filter, !m_hideDuplicates); + setFilter(m_filter, !m_hideDuplicatesByHash, m_hideDuplicatesByName); + }); + menu.addItem("Hide Duplicates (by name)", true, m_hideDuplicatesByName, [this] + { + setFilter(m_filter, m_hideDuplicatesByHash, !m_hideDuplicatesByName); }); menu.showMenuAsync({}); return true; @@ -533,18 +537,19 @@ namespace jucePluginEditorLib::patchManager void List::setFilter(const std::string& _filter) { - setFilter(_filter, m_hideDuplicates); + setFilter(_filter, m_hideDuplicatesByHash, m_hideDuplicatesByName); } - void List::setFilter(const std::string& _filter, const bool _hideDuplicates) + void List::setFilter(const std::string& _filter, const bool _hideDuplicatesByHash, const bool _hideDuplicatesByName) { - if (m_filter == _filter && _hideDuplicates == m_hideDuplicates) + if (m_filter == _filter && _hideDuplicatesByHash == m_hideDuplicatesByHash && m_hideDuplicatesByName == _hideDuplicatesByName) return; const auto selected = getSelectedPatches(); m_filter = _filter; - m_hideDuplicates = _hideDuplicates; + m_hideDuplicatesByHash = _hideDuplicatesByHash; + m_hideDuplicatesByName = _hideDuplicatesByName; filterPatches(); updateContent(); @@ -646,7 +651,7 @@ namespace jucePluginEditorLib::patchManager void List::filterPatches() { - if (m_filter.empty() && !m_hideDuplicates) + if (m_filter.empty() && !m_hideDuplicatesByHash && !m_hideDuplicatesByName) { m_filteredPatches.clear(); return; @@ -655,15 +660,23 @@ namespace jucePluginEditorLib::patchManager m_filteredPatches.reserve(m_patches.size()); m_filteredPatches.clear(); - std::set<pluginLib::patchDB::PatchHash> knownPatches; + std::set<pluginLib::patchDB::PatchHash> knownHashes; + std::set<std::string> knownNames; for (const auto& patch : m_patches) { - if(m_hideDuplicates) + if(m_hideDuplicatesByHash) + { + if(knownHashes.find(patch->hash) != knownHashes.end()) + continue; + knownHashes.insert(patch->hash); + } + + if(m_hideDuplicatesByName) { - if(knownPatches.find(patch->hash) != knownPatches.end()) + if(knownNames.find(patch->getName()) != knownNames.end()) continue; - knownPatches.insert(patch->hash); + knownNames.insert(patch->getName()); } if (m_filter.empty() || match(patch)) diff --git a/source/jucePluginEditorLib/patchmanager/list.h b/source/jucePluginEditorLib/patchmanager/list.h @@ -43,7 +43,7 @@ namespace jucePluginEditorLib::patchManager const Patches& getPatches() const { - if (m_filter.empty() && !m_hideDuplicates) + if (m_filter.empty() && !m_hideDuplicatesByHash && !m_hideDuplicatesByName) return m_patches; return m_filteredPatches; } @@ -73,7 +73,7 @@ namespace jucePluginEditorLib::patchManager } void setFilter(const std::string& _filter); - void setFilter(const std::string& _filter, bool _hideDuplicates); + void setFilter(const std::string& _filter, bool _hideDuplicatesByHash, bool _hideDuplicatesByName); PatchManager& getPatchManager() const { @@ -108,7 +108,8 @@ namespace jucePluginEditorLib::patchManager Patches m_patches; Patches m_filteredPatches; std::string m_filter; - bool m_hideDuplicates = false; + bool m_hideDuplicatesByHash = false; + bool m_hideDuplicatesByName = false; pluginLib::patchDB::SearchHandle m_searchHandle = pluginLib::patchDB::g_invalidSearchHandle; bool m_ignoreSelectedRowsChanged = false; };