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