Oscilloscope 0.5.0
A simple oscilloscope VST
Loading...
Searching...
No Matches
ControlSection.cpp
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 ControlSection.cpp
5 Created: 8 Mar 2023 11:57:32am
6 Author: wadda
7
8 ==============================================================================
9*/
10
11#include <JuceHeader.h>
12#include "ControlSection.h"
13
14//==============================================================================
15
17{
18 // make objects visible
19 addAndMakeVisible(toggleOscilloscope);
20 addAndMakeVisible(toggleText);
21 addAndMakeVisible(basicControls);
22 addAndMakeVisible(proControls);
23
24 // set ControlSection expander button
25 toggleText.setJustificationType(juce::Justification::centred);
26 toggleText.setFont(juce::Font(18, 1));
27 toggleText.setText("+", juce::dontSendNotification);
28 toggleOscilloscope.setMouseCursor(juce::MouseCursor::PointingHandCursor);
29 toggleOscilloscope.setAlpha(0);
30 toggleOscilloscope.setAlwaysOnTop(true);
31
32 // set number of sections shown
33 numHorizontalSections = 1;
34}
35
37{
38}
39
40void ControlSection::setAttachment(juce::String attachmentName, juce::AudioProcessorValueTreeState &processorTreeState)
41{
42 // resolve attachment name and map it to correct attachment
43 switch (resolveAttachment(attachmentName))
44 {
45 case (ControlSection::Attachments::BufferLength):
46 {
47 basicControls.bufferLengthAttachment.reset(
48 new juce::AudioProcessorValueTreeState::SliderAttachment(processorTreeState, attachmentName, basicControls.bufferLength));
49 break;
50 }
51 case (ControlSection::Attachments::DrawGrid):
52 {
53 basicControls.gridAttachment.reset(
54 new juce::AudioProcessorValueTreeState::ButtonAttachment(processorTreeState, attachmentName, basicControls.drawGrid));
55 break;
56 }
57 case (ControlSection::Attachments::IsProfessional):
58 {
59 isProfessionalAttachment.reset(
60 new juce::AudioProcessorValueTreeState::ButtonAttachment(processorTreeState, attachmentName, toggleOscilloscope));
62 break;
63 }
64 case (ControlSection::Attachments::IsTriggered):
65 {
66 proControls.triggerButtonAttachment.reset(
67 new juce::AudioProcessorValueTreeState::ButtonAttachment(processorTreeState, attachmentName, proControls.triggerButton));
68
69 // Set auto trigger visible if trigger selected
70 proControls.autoTriggerButton.setVisible(proControls.triggerButton.getToggleState());
71 break;
72 }
73 case (ControlSection::Attachments::TriggerLevel):
74 {
75 proControls.triggerLevelAttachment.reset(
76 new juce::AudioProcessorValueTreeState::SliderAttachment(processorTreeState, attachmentName, proControls.triggerLevel));
77 break;
78 }
79 case (ControlSection::Attachments::SlopeButtonTriggered):
80 {
81 proControls.slopeButtonAttachment.reset(
82 new juce::AudioProcessorValueTreeState::ButtonAttachment(processorTreeState, attachmentName, proControls.slopeButton));
83 break;
84 }
85 case (ControlSection::Attachments::IsAutoTriggered):
86 {
87 proControls.autoTriggerButtonAttachment.reset(
88 new juce::AudioProcessorValueTreeState::ButtonAttachment(processorTreeState, attachmentName, proControls.autoTriggerButton));
89 break;
90 }
91 case (ControlSection::Attachments::DecayTime):
92 {
93 proControls.refreshTimeAttachment.reset(
94 new juce::AudioProcessorValueTreeState::SliderAttachment(processorTreeState, attachmentName, proControls.refreshTime));
95 break;
96 }
97 case (ControlSection::Attachments::MuteOutput):
98 {
99 basicControls.muteOutputAttachment.reset(
100 new juce::AudioProcessorValueTreeState::ButtonAttachment(processorTreeState, attachmentName, basicControls.muteOutput));
101 break;
102 }
103 default:
104 {
105 break;
106 }
107 }
108}
109
110void ControlSection::setMultipleAttachments(std::vector<juce::String> attachmentNames, juce::AudioProcessorValueTreeState &processorTreeState)
111{
112 // call setAttachment for each attachment in attachmentNames
113 for (int i = 0; i < attachmentNames.size(); i++)
114 {
115 setAttachment(attachmentNames[i], processorTreeState);
116 }
117}
118
120{
121 // check state and set variable
122 if (toggleOscilloscope.getToggleState())
123 {
124 numHorizontalSections = 2;
125 }
126 else
127 {
128 numHorizontalSections = 1;
129 }
130}
131
133{
134 // check state and set text
135 if (toggleOscilloscope.getToggleState())
136 {
137 toggleText.setText("-", juce::dontSendNotification);
138 }
139 else
140 {
141 toggleText.setText("+", juce::dontSendNotification);
142 }
143}
144
145void ControlSection::paint(juce::Graphics &g)
146{
147
148 // fill background
149 g.fillAll(CONTROLSECTIONCOLOR());
150
151 // draw toggle ControlSection expander contour
152 g.setColour(GUITOGGLERCOLOUR());
153 g.drawRect(toggleOscilloscopeArea);
154}
155
157{
158 // set ControlSection expander area
159 toggleOscilloscopeArea = juce::Rectangle<int>(
160 getWidth() / 2 - 10,
161 10,
162 20,
163 20);
164 toggleOscilloscope.setBounds(toggleOscilloscopeArea);
165 toggleText.setBounds(toggleOscilloscopeArea);
166
167 // set basicControls position and size
168 int basicControlHeight = getHeight() / numHorizontalSections;
169 basicControls.setTopLeftPosition(0, 0);
170 basicControls.setSize(getWidth(), basicControlHeight);
171
172 // set proControls position and size
173 proControls.setTopLeftPosition(0, basicControlHeight);
174 proControls.setSize(getWidth(), getHeight() - basicControlHeight);
175}
176
177ControlSection::Attachments ControlSection::resolveAttachment(juce::String attachmentName)
178{
179 // map string to Attachment enum
180 auto itr = attachmentsMap.find(attachmentName);
181 if (itr != attachmentsMap.end())
182 {
183 return itr->second;
184 }
185 return ControlSection::Attachments::Default;
186}
std::unique_ptr< juce::AudioProcessorValueTreeState::ButtonAttachment > gridAttachment
Definition: BasicControls.h:64
std::unique_ptr< juce::AudioProcessorValueTreeState::ButtonAttachment > muteOutputAttachment
Definition: BasicControls.h:70
juce::ToggleButton drawGrid
Definition: BasicControls.h:40
std::unique_ptr< juce::AudioProcessorValueTreeState::SliderAttachment > bufferLengthAttachment
Definition: BasicControls.h:58
juce::ToggleButton muteOutput
Definition: BasicControls.h:46
juce::Slider bufferLength
Definition: BasicControls.h:52
void resized() override
~ControlSection() override
void paint(juce::Graphics &) override
void resetNumHorizontalSections()
void setAttachment(juce::String attachmentName, juce::AudioProcessorValueTreeState &processorTreeState)
void setMultipleAttachments(std::vector< juce::String > attachmentNames, juce::AudioProcessorValueTreeState &processorTreeState)
juce::ToggleButton triggerButton
Definition: ProControls.h:40
juce::ToggleButton slopeButton
Definition: ProControls.h:52
juce::ToggleButton autoTriggerButton
Definition: ProControls.h:46
std::unique_ptr< juce::AudioProcessorValueTreeState::ButtonAttachment > autoTriggerButtonAttachment
Definition: ProControls.h:88
std::unique_ptr< juce::AudioProcessorValueTreeState::ButtonAttachment > triggerButtonAttachment
Definition: ProControls.h:82
std::unique_ptr< juce::AudioProcessorValueTreeState::SliderAttachment > triggerLevelAttachment
Definition: ProControls.h:70
juce::Slider refreshTime
Definition: ProControls.h:64
std::unique_ptr< juce::AudioProcessorValueTreeState::SliderAttachment > refreshTimeAttachment
Definition: ProControls.h:76
juce::Slider triggerLevel
Definition: ProControls.h:58
std::unique_ptr< juce::AudioProcessorValueTreeState::ButtonAttachment > slopeButtonAttachment
Definition: ProControls.h:94