Add common EffectComponent across all sliders incl. frequency and remove EffectComponentGroup

pull/170/head
James Ball 2023-07-02 18:47:04 +01:00
rodzic 902286a086
commit e4b5545723
15 zmienionych plików z 145 dodań i 96 usunięć

Wyświetl plik

@ -1,20 +0,0 @@
#include "EffectComponentGroup.h"
EffectComponentGroup::EffectComponentGroup(const juce::String& id, const juce::String& name) : id(id) {
addAndMakeVisible(slider);
addAndMakeVisible(label);
label.setText(name, juce::dontSendNotification);
label.attachToComponent(&slider, true);
slider.setSliderStyle(juce::Slider::LinearHorizontal);
slider.setTextBoxStyle(juce::Slider::TextBoxRight, false, 90, slider.getTextBoxHeight());
}
EffectComponentGroup::~EffectComponentGroup() {
}
void EffectComponentGroup::resized() {
auto sliderLeft = 100;
slider.setBounds(sliderLeft, 0, getWidth() - 200, 20);
}

Wyświetl plik

@ -1,19 +0,0 @@
#pragma once
#include <JuceHeader.h>
class EffectComponentGroup : public juce::Component {
public:
EffectComponentGroup(const juce::String& id, const juce::String& name);
~EffectComponentGroup() override;
void resized() override;
juce::Slider slider;
juce::Label label;
juce::String id;
private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(EffectComponentGroup)
};

Wyświetl plik

@ -5,8 +5,8 @@ EffectsComponent::EffectsComponent(OscirenderAudioProcessor& p) : audioProcessor
setText("Audio Effects");
addAndMakeVisible(frequency);
frequency.setHideCheckbox(true);
frequency.slider.setRange(0.0, 12000.0);
frequency.slider.setSkewFactorFromMidPoint(500.0);
frequency.slider.setTextValueSuffix("Hz");
frequency.slider.setValue(audioProcessor.frequency, juce::dontSendNotification);
@ -43,13 +43,8 @@ EffectsComponent::~EffectsComponent() {
}
void EffectsComponent::resized() {
auto xPadding = 10;
auto yPadding = 20;
frequency.setBounds(xPadding, yPadding, getWidth() - xPadding, 40);
auto area = getLocalBounds().reduced(20);
auto row = area.removeFromTop(24);
addBtn.setBounds(row.removeFromRight(100));
frequency.setBounds(area.removeFromTop(30));
area.removeFromTop(6);
listBox.setBounds(area);

Wyświetl plik

@ -2,7 +2,6 @@
#include <JuceHeader.h>
#include "audio/BitCrushEffect.h"
#include "EffectComponentGroup.h"
#include "PluginProcessor.h"
#include "components/DraggableListBox.h"
#include "components/MyListComponent.h"
@ -17,13 +16,13 @@ public:
private:
OscirenderAudioProcessor& audioProcessor;
juce::TextButton addBtn;
// juce::TextButton addBtn;
MyListBoxItemData itemData;
MyListBoxModel listBoxModel;
DraggableListBox listBox;
EffectComponentGroup frequency = EffectComponentGroup("frequency", "Frequency");
EffectComponent frequency = EffectComponent(0.0, 12000.0, 0.1, 400, "Frequency", "frequency");
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(EffectsComponent)
};

Wyświetl plik

@ -0,0 +1,12 @@
#include "LuaComponent.h"
#include "PluginEditor.h"
LuaComponent::LuaComponent(OscirenderAudioProcessor& p, OscirenderAudioProcessorEditor& editor) : audioProcessor(p), pluginEditor(editor) {
setText(".lua File Settings");
}
LuaComponent::~LuaComponent() {
}
void LuaComponent::resized() {
}

Wyświetl plik

@ -0,0 +1,19 @@
#pragma once
#include <JuceHeader.h>
#include "PluginProcessor.h"
class OscirenderAudioProcessorEditor;
class LuaComponent : public juce::GroupComponent {
public:
LuaComponent(OscirenderAudioProcessor&, OscirenderAudioProcessorEditor&);
~LuaComponent() override;
void resized() override;
private:
OscirenderAudioProcessor& audioProcessor;
OscirenderAudioProcessorEditor& pluginEditor;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(LuaComponent)
};

Wyświetl plik

@ -1,7 +1,6 @@
#pragma once
#include <JuceHeader.h>
#include "EffectComponentGroup.h"
#include "PluginProcessor.h"
#include "parser/FileParser.h"
#include "parser/FrameProducer.h"

Wyświetl plik

@ -10,7 +10,6 @@
#include <JuceHeader.h>
#include "PluginProcessor.h"
#include "EffectComponentGroup.h"
#include "EffectsComponent.h"
#include "MainComponent.h"

Wyświetl plik

@ -4,8 +4,6 @@ DraggableListBoxItemData::~DraggableListBoxItemData() {};
void DraggableListBoxItem::paint(juce::Graphics& g)
{
modelData.paintContents(rowNum, g, getLocalBounds());
if (insertAfter)
{
g.setColour(juce::Colours::red);

Wyświetl plik

@ -8,7 +8,6 @@ struct DraggableListBoxItemData
virtual ~DraggableListBoxItemData() = 0;
virtual int getNumItems() = 0;
virtual void paintContents(int, juce::Graphics&, juce::Rectangle<int>) = 0;
virtual void moveBefore(int indexOfItemToMove, int indexOfItemToPlaceBefore) = 0;
virtual void moveAfter(int indexOfItemToMove, int indexOfItemToPlaceAfter) = 0;

Wyświetl plik

@ -0,0 +1,41 @@
#include "EffectComponent.h"
EffectComponent::EffectComponent(double min, double max, double step, double value, juce::String name, juce::String id) : name(name), id(id) {
addAndMakeVisible(slider);
addAndMakeVisible(selected);
slider.setSliderStyle(juce::Slider::LinearHorizontal);
slider.setTextBoxStyle(juce::Slider::TextBoxRight, false, 90, slider.getTextBoxHeight());
slider.setRange(min, max, step);
slider.setValue(value, juce::dontSendNotification);
selected.setToggleState(false, juce::dontSendNotification);
}
EffectComponent::~EffectComponent() {}
void EffectComponent::resized() {
auto sliderRight = getWidth() - 140;
auto bounds = getLocalBounds();
bounds.removeFromRight(10);
slider.setBounds(bounds.removeFromRight(sliderRight));
if (hideCheckbox) {
bounds.removeFromLeft(5);
} else {
bounds.removeFromLeft(2);
selected.setBounds(bounds.removeFromLeft(25));
}
textBounds = bounds;
}
void EffectComponent::paint(juce::Graphics& g) {
g.fillAll(juce::Colours::lightgrey);
g.setColour(juce::Colours::black);
auto bounds = getLocalBounds();
g.drawRect(bounds);
g.drawText(name, textBounds, juce::Justification::left);
}
void EffectComponent::setHideCheckbox(bool hide) {
hideCheckbox = hide;
}

Wyświetl plik

@ -0,0 +1,27 @@
#pragma once
#include <JuceHeader.h>
#include "../PluginProcessor.h"
#include "../audio/Effect.h"
class EffectComponent : public juce::Component {
public:
EffectComponent(double min, double max, double step, double value, juce::String name, juce::String id);
~EffectComponent();
void resized() override;
void paint(juce::Graphics& g) override;
void setHideCheckbox(bool hide);
juce::Slider slider;
juce::String id;
juce::String name;
juce::ToggleButton selected;
private:
bool hideCheckbox = false;
juce::Rectangle<int> textBounds;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(EffectComponent)
};

Wyświetl plik

@ -1,15 +1,11 @@
#include "MyListComponent.h"
MyListComponent::MyListComponent(DraggableListBox& lb, MyListBoxItemData& data, int rn) : DraggableListBoxItem(lb, data, rn) {
addAndMakeVisible(slider);
addAndMakeVisible(selected);
MyListComponent::MyListComponent(DraggableListBox& lb, MyListBoxItemData& data, int rn, std::shared_ptr<EffectComponent> effectComponent) : DraggableListBoxItem(lb, data, rn), effectComponent(effectComponent) {
addAndMakeVisible(*effectComponent);
slider.setSliderStyle(juce::Slider::LinearHorizontal);
slider.setTextBoxStyle(juce::Slider::TextBoxRight, false, 90, slider.getTextBoxHeight());
slider.setRange(0.0, 1.0, 0.01);
slider.setValue(data.getValue(rn), juce::dontSendNotification);
slider.onValueChange = [this] {
((MyListBoxItemData&)modelData).setValue(rowNum, slider.getValue());
effectComponent->slider.setValue(data.getValue(rn), juce::dontSendNotification);
effectComponent->slider.onValueChange = [this] {
((MyListBoxItemData&)modelData).setValue(rowNum, this->effectComponent->slider.getValue());
};
// check if effect is in audioProcessor enabled effects
@ -20,31 +16,44 @@ MyListComponent::MyListComponent(DraggableListBox& lb, MyListBoxItemData& data,
break;
}
}
selected.setToggleState(isSelected, juce::dontSendNotification);
selected.onClick = [this] {
((MyListBoxItemData&)modelData).setSelected(rowNum, selected.getToggleState());
effectComponent->selected.setToggleState(isSelected, juce::dontSendNotification);
effectComponent->selected.onClick = [this] {
((MyListBoxItemData&)modelData).setSelected(rowNum, this->effectComponent->selected.getToggleState());
};
}
MyListComponent::~MyListComponent() {}
void MyListComponent::paint (juce::Graphics& g) {
modelData.paintContents(rowNum, g, dataArea);
DraggableListBoxItem::paint(g);
void MyListComponent::paint(juce::Graphics& g) {
DraggableListBoxItem::paint(g);
auto bounds = getLocalBounds();
bounds.removeFromLeft(20);
// draw drag and drop handle using circles
g.setColour(juce::Colours::white);
double size = 4;
double leftPad = 4;
double spacing = 7;
double topPad = 7;
g.fillEllipse(leftPad, topPad, size, size);
g.fillEllipse(leftPad, topPad + spacing, size, size);
g.fillEllipse(leftPad, topPad + 2 * spacing, size, size);
g.fillEllipse(leftPad + spacing, topPad, size, size);
g.fillEllipse(leftPad + spacing, topPad + spacing, size, size);
g.fillEllipse(leftPad + spacing, topPad + 2 * spacing, size, size);
}
void MyListComponent::resized() {
auto sliderLeft = 150;
slider.setBounds(sliderLeft, 0, getWidth() - sliderLeft - 10, getHeight());
selected.setBounds(2, 0, 25, getHeight());
auto area = getLocalBounds();
area.removeFromLeft(20);
effectComponent->setBounds(area);
}
juce::Component* MyListBoxModel::refreshComponentForRow(int rowNumber, bool isRowSelected, juce::Component *existingComponentToUpdate) {
std::unique_ptr<MyListComponent> item(dynamic_cast<MyListComponent*>(existingComponentToUpdate));
if (juce::isPositiveAndBelow(rowNumber, modelData.getNumItems()))
{
item = std::make_unique<MyListComponent>(listBox, (MyListBoxItemData&)modelData, rowNumber);
if (juce::isPositiveAndBelow(rowNumber, modelData.getNumItems())) {
auto data = (MyListBoxItemData&)modelData;
std::shared_ptr<EffectComponent> effectComponent = std::make_shared<EffectComponent>(0, 1, 0.01, 0, data.getText(rowNumber), data.getId(rowNumber));
item = std::make_unique<MyListComponent>(listBox, (MyListBoxItemData&)modelData, rowNumber, effectComponent);
}
return item.release();
}

Wyświetl plik

@ -3,6 +3,7 @@
#include <JuceHeader.h>
#include "../PluginProcessor.h"
#include "../audio/Effect.h"
#include "EffectComponent.h"
// Application-specific data container
struct MyListBoxItemData : public DraggableListBoxItemData
@ -24,14 +25,6 @@ struct MyListBoxItemData : public DraggableListBoxItemData
// data.push_back(juce::String("Yahoo"));
}
void paintContents(int rowNum, juce::Graphics& g, juce::Rectangle<int> bounds) override {
g.fillAll(juce::Colours::lightgrey);
g.setColour(juce::Colours::black);
g.drawRect(bounds);
bounds.removeFromLeft(30);
g.drawText(data[rowNum]->getName(), bounds, juce::Justification::left);
}
void moveBefore(int indexOfItemToMove, int indexOfItemToPlaceBefore) override {
auto effect = data[indexOfItemToMove];
@ -101,19 +94,14 @@ struct MyListBoxItemData : public DraggableListBoxItemData
class MyListComponent : public DraggableListBoxItem
{
public:
MyListComponent(DraggableListBox& lb, MyListBoxItemData& data, int rn);
MyListComponent(DraggableListBox& lb, MyListBoxItemData& data, int rn, std::shared_ptr<EffectComponent> effectComponent);
~MyListComponent();
void paint(juce::Graphics&) override;
void paint(juce::Graphics& g) override;
void resized() override;
protected:
juce::Rectangle<int> dataArea;
juce::Slider slider;
juce::String id;
juce::ToggleButton selected;
std::shared_ptr<EffectComponent> effectComponent;
private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MyListComponent)
};

Wyświetl plik

@ -7,6 +7,9 @@
cppLanguageStandard="20" projectLineFeed="&#10;" headerPath="./include">
<MAINGROUP id="j5Ge2T" name="osci-render">
<GROUP id="{75439074-E50C-362F-1EDF-8B4BE9011259}" name="Source">
<FILE id="X26RjJ" name="LuaComponent.cpp" compile="1" resource="0"
file="Source/LuaComponent.cpp"/>
<FILE id="g5xRHT" name="LuaComponent.h" compile="0" resource="0" file="Source/LuaComponent.h"/>
<GROUP id="{75F6236A-68A5-85DA-EDAE-23D1621601DB}" name="lua">
<FILE id="X5i9iw" name="lapi.c" compile="1" resource="0" file="Source/lua/lapi.c"/>
<FILE id="J62WSE" name="lapi.h" compile="0" resource="0" file="Source/lua/lapi.h"/>
@ -81,6 +84,10 @@
file="Source/components/DraggableListBox.cpp"/>
<FILE id="Y9NEGn" name="DraggableListBox.h" compile="0" resource="0"
file="Source/components/DraggableListBox.h"/>
<FILE id="xLAEHK" name="EffectComponent.cpp" compile="1" resource="0"
file="Source/components/EffectComponent.cpp"/>
<FILE id="u4UCwb" name="EffectComponent.h" compile="0" resource="0"
file="Source/components/EffectComponent.h"/>
<FILE id="M9ImIg" name="MyListComponent.cpp" compile="1" resource="0"
file="Source/components/MyListComponent.cpp"/>
<FILE id="goyxlC" name="MyListComponent.h" compile="0" resource="0"
@ -196,10 +203,6 @@
<FILE id="GKBQ8j" name="MainComponent.cpp" compile="1" resource="0"
file="Source/MainComponent.cpp"/>
<FILE id="RU8fGr" name="MainComponent.h" compile="0" resource="0" file="Source/MainComponent.h"/>
<FILE id="PBCW3H" name="EffectComponentGroup.cpp" compile="1" resource="0"
file="Source/EffectComponentGroup.cpp"/>
<FILE id="FXKqir" name="EffectComponentGroup.h" compile="0" resource="0"
file="Source/EffectComponentGroup.h"/>
<FILE id="I44EdJ" name="EffectsComponent.cpp" compile="1" resource="0"
file="Source/EffectsComponent.cpp"/>
<FILE id="qxxNX3" name="EffectsComponent.h" compile="0" resource="0"