/*
	==============================================================================
	This file is part of Obxd synthesizer.

	Copyright � 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 ButtonList  : public ComboBox
{
public:
	ButtonList (Image k, int fh) : ComboBox("cb")
	{
		kni = k;
		count = 0;
		h2 = fh;
		w2 = k.getWidth();
	}
	//int addItem

// Source: https://git.iem.at/audioplugins/IEMPluginSuite/-/blob/master/resources/customComponents/ReverseSlider.h
public:
    class ButtonListAttachment  : public juce::AudioProcessorValueTreeState::ComboBoxAttachment
    {
        RangedAudioParameter* parameter = nullptr;
        ButtonList* buttonListToControl = nullptr;
    public:
        ButtonListAttachment (juce::AudioProcessorValueTreeState& stateToControl,
                              const juce::String& parameterID,
                              ButtonList& buttonListToControl) : AudioProcessorValueTreeState::ComboBoxAttachment (stateToControl, parameterID, buttonListToControl), buttonListToControl(&buttonListToControl)
        {
            parameter = stateToControl.getParameter (parameterID);
            buttonListToControl.setParameter (parameter);
        }
        /*
        ButtonListAttachment (juce::AudioProcessorValueTreeState& stateToControl,
                              const juce::String& parameterID,
                              ComboBox& buttonListToControl) : AudioProcessorValueTreeState::ComboBoxAttachment (stateToControl, parameterID, buttonListToControl)
        {
        }
        */
        void updateToSlider(){
            float val = parameter->getValue();
            //buttonListToControl->setValue(val, NotificationType::dontSendNotification);
            //buttonListToControl->setValue(parameter->convertFrom0to1(val0to1), NotificationType::dontSendNotification);
            buttonListToControl->setValue(val, NotificationType::dontSendNotification);
        }

        virtual ~ButtonListAttachment() = default;
    };

    void setParameter (const AudioProcessorParameter* p)
    {
        if (parameter == p)
            return;

        parameter = p;
        repaint();
    }
    
	void addChoice (String name)
	{
		addItem (name, ++count);
	}
    
	float getValue()
	{
		return ((getSelectedId() - 1) / (float) (count - 1));
	}
    
	void setValue (float val, NotificationType notify)
	{
		setSelectedId ((int) (val * (count - 1) + 1), notify);
	}
    
    void paintOverChildren (Graphics& g) override
	{
		int ofs = getSelectedId() - 1;
        g.drawImage(kni, 0, 0, getWidth(), getHeight(), 0, h2 * ofs, w2, h2);
	}

private:
    int count;
    Image kni;
    int w2, h2;
    const AudioProcessorParameter* parameter {nullptr};
};
