kopia lustrzana https://github.com/jameshball/osci-render
Add common EffectComponent across all sliders incl. frequency and remove EffectComponentGroup
rodzic
902286a086
commit
e4b5545723
|
@ -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);
|
||||
}
|
|
@ -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)
|
||||
};
|
||||
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
};
|
|
@ -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() {
|
||||
}
|
|
@ -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)
|
||||
};
|
|
@ -1,7 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#include <JuceHeader.h>
|
||||
#include "EffectComponentGroup.h"
|
||||
#include "PluginProcessor.h"
|
||||
#include "parser/FileParser.h"
|
||||
#include "parser/FrameProducer.h"
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
|
||||
#include <JuceHeader.h>
|
||||
#include "PluginProcessor.h"
|
||||
#include "EffectComponentGroup.h"
|
||||
#include "EffectsComponent.h"
|
||||
#include "MainComponent.h"
|
||||
|
||||
|
|
|
@ -4,8 +4,6 @@ DraggableListBoxItemData::~DraggableListBoxItemData() {};
|
|||
|
||||
void DraggableListBoxItem::paint(juce::Graphics& g)
|
||||
{
|
||||
modelData.paintContents(rowNum, g, getLocalBounds());
|
||||
|
||||
if (insertAfter)
|
||||
{
|
||||
g.setColour(juce::Colours::red);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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)
|
||||
};
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
};
|
||||
|
|
|
@ -7,6 +7,9 @@
|
|||
cppLanguageStandard="20" projectLineFeed=" " 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"
|
||||
|
|
Ładowanie…
Reference in New Issue