2
0
Fork 0
OB-Xd/Source/Gui/TooglableButton.h

133 lines
4.0 KiB
C++
Executable File
Raw Blame History

/*
==============================================================================
This file is part of Obxd synthesizer.
Copyright <20> 2013-2014 Filatov Vadim
Contact author via email :
justdat_@_e1.ru
This file may be licensed under the terms of of the
GNU General Public License Version 2 (the ``GPL'').
Software distributed under the License is distributed
on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
express or implied. See the GPL for the specific language
governing rights and limitations.
You should have received a copy of the GPL along with this
program. If not, go to http://www.gnu.org/licenses/gpl.html
or write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
==============================================================================
*/
#pragma once
#include "../Source/Engine/SynthEngine.h"
class TooglableButton : public ImageButton
{
public:
TooglableButton (Image k) : ImageButton()
{
//this->setImages
kni = k;
toogled = false;
width = kni.getWidth();
height = kni.getHeight();
w2 = width;
h2 = height / 2;
this->setClickingTogglesState (true);
}
~TooglableButton() override{
};
// Source: https://git.iem.at/audioplugins/IEMPluginSuite/-/blob/master/resources/customComponents/ReverseSlider.h
public:
class ToggleAttachment : public juce::AudioProcessorValueTreeState::ButtonAttachment
{
RangedAudioParameter* parameter = nullptr;
TooglableButton* buttonToControl = nullptr;
public:
ToggleAttachment (juce::AudioProcessorValueTreeState& stateToControl,
const juce::String& parameterID,
TooglableButton& buttonToControl) : AudioProcessorValueTreeState::ButtonAttachment (stateToControl, parameterID, buttonToControl), buttonToControl(&buttonToControl)
{
parameter = stateToControl.getParameter (parameterID);
buttonToControl.setParameter (parameter);
}
/*
ToggleAttachment (juce::AudioProcessorValueTreeState& stateToControl,
const juce::String& parameterID,
Button& buttonToControl) : AudioProcessorValueTreeState::ButtonAttachment (stateToControl, parameterID, buttonToControl)
{
}*/
void updateToSlider(){
float val = parameter->getValue();
//buttonToControl->setValue(parameter->convertFrom0to1(val0to1), NotificationType::dontSendNotification);
buttonToControl->setValue(val, NotificationType::dontSendNotification);
}
virtual ~ToggleAttachment() = default;
};
void setParameter (const AudioProcessorParameter* p)
{
if (parameter == p)
return;
parameter = p;
repaint();
}
void clicked() override
{
toogled = ! toogled;
//this->setColour(1,Colours::blue);
//if(toogled)
// this->setColour(TextButton::ColourIds::buttonColourId,Colours::lightgreen);
//else
// this->removeColour(TextButton::ColourIds::buttonColourId);
//this->setColour(DrawableButton::ColourIds::backgroundColourId,Colours::lightpink);
Button::clicked();
};
void paintButton (Graphics& g, bool isMouseOverButton, bool isButtonDown) override
{
int offset = 0;
if (toogled)
{
offset = 1;
}
g.setImageResamplingQuality(Graphics::ResamplingQuality::highResamplingQuality);
g.drawImage(kni, 0, 0, getWidth(), getHeight(), 0, offset * h2, w2, h2);
}
void setValue (float state, int notify)
{
if (state > 0.5)
toogled = true;
else toogled = false;
repaint();
}
float getValue()
{
if (toogled)
return 1;
else return 0;
}
//void paint(Graphics& g)
//{
// g.drawImageTransformed(kni,AffineTransform::rotation(((getValue() - getMinimum())/(getMaximum() - getMinimum()))*float_Pi - float_Pi*2));
//}
bool toogled;
private:
Image kni;
int width, height, w2, h2;
const AudioProcessorParameter* parameter {nullptr};
};