Implemented shift + click to reset panning knobs
This commit is contained in:
parent
7c371aae29
commit
3417d52d83
3 changed files with 61 additions and 1 deletions
|
@ -25,7 +25,7 @@
|
||||||
#include "../Source/Engine/SynthEngine.h"
|
#include "../Source/Engine/SynthEngine.h"
|
||||||
#include "../Components/ScaleComponent.h"
|
#include "../Components/ScaleComponent.h"
|
||||||
class ObxdAudioProcessor;
|
class ObxdAudioProcessor;
|
||||||
class Knob : public Slider, public ScalableComponent
|
class Knob : public Slider, public ScalableComponent, public ActionBroadcaster
|
||||||
{
|
{
|
||||||
juce::String img_name;
|
juce::String img_name;
|
||||||
public:
|
public:
|
||||||
|
@ -57,6 +57,18 @@ public:
|
||||||
*/
|
*/
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mouseDown(const MouseEvent& event) override
|
||||||
|
{
|
||||||
|
if (event.mods.isShiftDown())
|
||||||
|
{
|
||||||
|
if (shouldResetOnShiftClick)
|
||||||
|
{
|
||||||
|
sendActionMessage(resetActionMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Slider::mouseDown(event);
|
||||||
|
}
|
||||||
// Source: https://git.iem.at/audioplugins/IEMPluginSuite/-/blob/master/resources/customComponents/ReverseSlider.h
|
// Source: https://git.iem.at/audioplugins/IEMPluginSuite/-/blob/master/resources/customComponents/ReverseSlider.h
|
||||||
public:
|
public:
|
||||||
class KnobAttachment : public juce::AudioProcessorValueTreeState::SliderAttachment
|
class KnobAttachment : public juce::AudioProcessorValueTreeState::SliderAttachment
|
||||||
|
@ -106,9 +118,17 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
~Knob() override {};
|
~Knob() override {};
|
||||||
|
|
||||||
|
void resetOnShiftClick(bool value, const String& identifier)
|
||||||
|
{
|
||||||
|
shouldResetOnShiftClick = value;
|
||||||
|
resetActionMessage = identifier;
|
||||||
|
}
|
||||||
private:
|
private:
|
||||||
Image kni;
|
Image kni;
|
||||||
int fh, numFr;
|
int fh, numFr;
|
||||||
int w2, h2;
|
int w2, h2;
|
||||||
|
bool shouldResetOnShiftClick{ false };
|
||||||
|
String resetActionMessage{};
|
||||||
AudioProcessorParameter* parameter {nullptr};
|
AudioProcessorParameter* parameter {nullptr};
|
||||||
};
|
};
|
||||||
|
|
|
@ -420,35 +420,51 @@ void ObxdAudioProcessorEditor::loadSkin (ObxdAudioProcessor& ownerFilter)
|
||||||
|
|
||||||
if (name == "pan1Knob"){
|
if (name == "pan1Knob"){
|
||||||
pan1Knob = addKnob (x, y, d, ownerFilter, PAN1, "1", 0.5);
|
pan1Knob = addKnob (x, y, d, ownerFilter, PAN1, "1", 0.5);
|
||||||
|
pan1Knob->resetOnShiftClick(true, Action::panReset);
|
||||||
|
pan1Knob->addActionListener(this);
|
||||||
mappingComps["pan1Knob"] = pan1Knob;
|
mappingComps["pan1Knob"] = pan1Knob;
|
||||||
}
|
}
|
||||||
if (name == "pan2Knob"){
|
if (name == "pan2Knob"){
|
||||||
pan2Knob = addKnob (x, y, d, ownerFilter, PAN2, "2", 0.5);
|
pan2Knob = addKnob (x, y, d, ownerFilter, PAN2, "2", 0.5);
|
||||||
|
pan2Knob->resetOnShiftClick(true, Action::panReset);
|
||||||
|
pan2Knob->addActionListener(this);
|
||||||
mappingComps["pan2Knob"] = pan2Knob;
|
mappingComps["pan2Knob"] = pan2Knob;
|
||||||
}
|
}
|
||||||
if (name == "pan3Knob"){
|
if (name == "pan3Knob"){
|
||||||
pan3Knob = addKnob (x, y, d, ownerFilter, PAN3, "3", 0.5);
|
pan3Knob = addKnob (x, y, d, ownerFilter, PAN3, "3", 0.5);
|
||||||
|
pan3Knob->resetOnShiftClick(true, Action::panReset);
|
||||||
|
pan3Knob->addActionListener(this);
|
||||||
mappingComps["pan3Knob"] = pan3Knob;
|
mappingComps["pan3Knob"] = pan3Knob;
|
||||||
}
|
}
|
||||||
if (name == "pan4Knob"){
|
if (name == "pan4Knob"){
|
||||||
pan4Knob = addKnob (x, y, d, ownerFilter, PAN4, "4", 0.5);
|
pan4Knob = addKnob (x, y, d, ownerFilter, PAN4, "4", 0.5);
|
||||||
|
pan4Knob->resetOnShiftClick(true, Action::panReset);
|
||||||
|
pan4Knob->addActionListener(this);
|
||||||
mappingComps["pan4Knob"] = pan4Knob;
|
mappingComps["pan4Knob"] = pan4Knob;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (name == "pan5Knob"){
|
if (name == "pan5Knob"){
|
||||||
pan5Knob = addKnob (x, y, d, ownerFilter, PAN5, "5", 0.5);
|
pan5Knob = addKnob (x, y, d, ownerFilter, PAN5, "5", 0.5);
|
||||||
|
pan5Knob->resetOnShiftClick(true, Action::panReset);
|
||||||
|
pan5Knob->addActionListener(this);
|
||||||
mappingComps["pan5Knob"] = pan5Knob;
|
mappingComps["pan5Knob"] = pan5Knob;
|
||||||
}
|
}
|
||||||
if (name == "pan6Knob"){
|
if (name == "pan6Knob"){
|
||||||
pan6Knob = addKnob (x, y, d, ownerFilter, PAN6, "6", 0.5);
|
pan6Knob = addKnob (x, y, d, ownerFilter, PAN6, "6", 0.5);
|
||||||
|
pan6Knob->resetOnShiftClick(true, Action::panReset);
|
||||||
|
pan6Knob->addActionListener(this);
|
||||||
mappingComps["pan6Knob"] = pan6Knob;
|
mappingComps["pan6Knob"] = pan6Knob;
|
||||||
}
|
}
|
||||||
if (name == "pan7Knob"){
|
if (name == "pan7Knob"){
|
||||||
pan7Knob = addKnob (x, y, d, ownerFilter, PAN7, "7", 0.5);
|
pan7Knob = addKnob (x, y, d, ownerFilter, PAN7, "7", 0.5);
|
||||||
|
pan7Knob->resetOnShiftClick(true, Action::panReset);
|
||||||
|
pan7Knob->addActionListener(this);
|
||||||
mappingComps["pan7Knob"] = pan7Knob;
|
mappingComps["pan7Knob"] = pan7Knob;
|
||||||
}
|
}
|
||||||
if (name == "pan8Knob"){
|
if (name == "pan8Knob"){
|
||||||
pan8Knob = addKnob (x, y, d, ownerFilter, PAN8, "8", 0.5);
|
pan8Knob = addKnob (x, y, d, ownerFilter, PAN8, "8", 0.5);
|
||||||
|
pan8Knob->resetOnShiftClick(true, Action::panReset);
|
||||||
|
pan8Knob->addActionListener(this);
|
||||||
mappingComps["pan8Knob"] = pan8Knob;
|
mappingComps["pan8Knob"] = pan8Knob;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -730,6 +746,22 @@ TooglableButton* ObxdAudioProcessorEditor::addButton (int x, int y, int w, int h
|
||||||
|
|
||||||
return button;
|
return button;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ObxdAudioProcessorEditor::actionListenerCallback(const String& message)
|
||||||
|
{
|
||||||
|
if (message.equalsIgnoreCase(Action::panReset))
|
||||||
|
{
|
||||||
|
const StringArray parameters{ "pan1Knob", "pan2Knob", "pan3Knob", "pan4Knob", "pan5Knob", "pan6Knob", "pan7Knob", "pan8Knob" };
|
||||||
|
for (const auto& parameter : parameters)
|
||||||
|
{
|
||||||
|
if (auto* knob = dynamic_cast<Knob*>(mappingComps[parameter]))
|
||||||
|
{
|
||||||
|
knob->setValue(knob->getDoubleClickReturnValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Rectangle<int> ObxdAudioProcessorEditor::transformBounds(int x, int y, int w, int h)
|
Rectangle<int> ObxdAudioProcessorEditor::transformBounds(int x, int y, int w, int h)
|
||||||
{
|
{
|
||||||
if (getScaleFactor() == 1.0f)
|
if (getScaleFactor() == 1.0f)
|
||||||
|
@ -1449,6 +1481,8 @@ void ObxdAudioProcessorEditor::filesDropped(const StringArray& files, int x, int
|
||||||
//createMenu();
|
//createMenu();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const String ObxdAudioProcessorEditor::Action::panReset{ "panReset" };
|
||||||
/*
|
/*
|
||||||
bool ObxdAudioProcessorEditor::keyPressed(const KeyPress & press) {
|
bool ObxdAudioProcessorEditor::keyPressed(const KeyPress & press) {
|
||||||
if (press.getKeyCode() == '+' || press.getKeyCode() == KeyPress::numberPadAdd)
|
if (press.getKeyCode() == '+' || press.getKeyCode() == KeyPress::numberPadAdd)
|
||||||
|
|
|
@ -55,6 +55,7 @@ class ObxdAudioProcessorEditor : public AudioProcessorEditor
|
||||||
// , public Slider::Listener
|
// , public Slider::Listener
|
||||||
, public Button::Listener
|
, public Button::Listener
|
||||||
// , public ComboBox::Listener
|
// , public ComboBox::Listener
|
||||||
|
, public ActionListener
|
||||||
, public ApplicationCommandTarget
|
, public ApplicationCommandTarget
|
||||||
, public Timer
|
, public Timer
|
||||||
, public FileDragAndDropTarget
|
, public FileDragAndDropTarget
|
||||||
|
@ -177,6 +178,7 @@ public:
|
||||||
{
|
{
|
||||||
return processor.physicalPixelScaleFactor > 1.0;
|
return processor.physicalPixelScaleFactor > 1.0;
|
||||||
}
|
}
|
||||||
|
void actionListenerCallback(const String& message) override;
|
||||||
private:
|
private:
|
||||||
Rectangle<int> transformBounds(int x, int y, int w, int h);
|
Rectangle<int> transformBounds(int x, int y, int w, int h);
|
||||||
Knob* addKnob (int x, int y, int d, ObxdAudioProcessor& filter, int parameter, String name, float defval);
|
Knob* addKnob (int x, int y, int d, ObxdAudioProcessor& filter, int parameter, String name, float defval);
|
||||||
|
@ -304,6 +306,10 @@ private:
|
||||||
int menuScaleNum;
|
int menuScaleNum;
|
||||||
int countTimerForLed = 0;
|
int countTimerForLed = 0;
|
||||||
|
|
||||||
|
struct Action
|
||||||
|
{
|
||||||
|
static const String panReset;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // PLUGINEDITOR_H_INCLUDED
|
#endif // PLUGINEDITOR_H_INCLUDED
|
||||||
|
|
Loading…
Reference in a new issue