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 7e592a379b944956fb4b26058d7894c7f296556b
parent 1a6b04af89b3aa4cd0faede7e9da5d90956d3aba
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Mon, 14 Mar 2022 23:32:04 +0100

implement tabs

Diffstat:
Msource/jucePlugin/genericUI/assets/VirusC.json | 2+-
Msource/jucePlugin/genericUI/editor.h | 7+++++++
Msource/jucePlugin/ui3/Tabs.cpp | 38++++++++++++++++++++++++++++++++++++++
Msource/jucePlugin/ui3/Tabs.h | 20+++++++++++++++++---
4 files changed, 63 insertions(+), 4 deletions(-)

diff --git a/source/jucePlugin/genericUI/assets/VirusC.json b/source/jucePlugin/genericUI/assets/VirusC.json @@ -91,7 +91,7 @@ "isToggle" : "1", "radioGroupId" : "42", "normalImage" : "0", - "overImage" : "1", + "overImage" : "0", "downImage" : "1", "normalImageOn" : "1", "overImageOn" : "1", diff --git a/source/jucePlugin/genericUI/editor.h b/source/jucePlugin/genericUI/editor.h @@ -44,6 +44,13 @@ namespace genericUI juce::Component* findComponent(const std::string& _name) const; + template<typename T> + T* findComponentT(const std::string& _name) const + { + juce::Component* c = findComponent(_name); + return dynamic_cast<T*>(c); + } + private: static const char* getResourceByFilename(const std::string& _filename, int& _outDataSize); diff --git a/source/jucePlugin/ui3/Tabs.cpp b/source/jucePlugin/ui3/Tabs.cpp @@ -0,0 +1,38 @@ +#include "Tabs.h" + +#include "VirusEditor.h" + +namespace genericVirusUI +{ + Tabs::Tabs(VirusEditor& _editor): m_editor(_editor) + { + m_tabs.push_back(m_editor.findComponent("page_osc")); + m_tabs.push_back(m_editor.findComponent("page_lfo")); + m_tabs.push_back(m_editor.findComponent("page_fx")); + m_tabs.push_back(m_editor.findComponent("page_arp")); + m_tabs.push_back(m_editor.findComponent("page_presets")); + + m_tabButtons.push_back(m_editor.findComponentT<juce::Button>("TabOsc")); + m_tabButtons.push_back(m_editor.findComponentT<juce::Button>("TabLfo")); + m_tabButtons.push_back(m_editor.findComponentT<juce::Button>("TabEffects")); + m_tabButtons.push_back(m_editor.findComponentT<juce::Button>("TabArp")); + m_tabButtons.push_back(m_editor.findComponentT<juce::Button>("Presets")); + + if(m_tabs.size() != m_tabButtons.size()) + throw std::runtime_error("Number of tabs does not match number of tab buttons, not all requested objects have been found"); + + for(size_t i=0; i<m_tabButtons.size(); ++i) + m_tabButtons[i]->onClick = [this, i] { setPage(i); }; + + setPage(0); + } + + void Tabs::setPage(const size_t _page) + { + for(size_t i=0; i<m_tabs.size(); ++i) + { + m_tabs[i]->setVisible(_page == i); + m_tabButtons[i]->setToggleState(_page == i, juce::dontSendNotification); + } + } +} diff --git a/source/jucePlugin/ui3/Tabs.h b/source/jucePlugin/ui3/Tabs.h @@ -1,12 +1,27 @@ #pragma once +#include <vector> + +namespace juce +{ + class Button; + class Component; +} + namespace genericVirusUI { + class VirusEditor; + class Tabs { public: - Tabs(VirusEditor& _editor) : m_editor(_editor) {} + explicit Tabs(VirusEditor& _editor); private: + void setPage(size_t _page); + VirusEditor& m_editor; + + std::vector<juce::Component*> m_tabs; + std::vector<juce::Button*> m_tabButtons; }; -} -\ No newline at end of file +}