gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

parameterbinding.h (3020B)


      1 #pragma once
      2 
      3 #include "juce_gui_basics/juce_gui_basics.h"
      4 
      5 #include "parameterlistener.h"
      6 
      7 namespace juce
      8 {
      9 	class Button;
     10 	class ComboBox;
     11 	class Component;
     12 	class MouseEvent;
     13 	class Slider;
     14 }
     15 
     16 namespace pluginLib
     17 {
     18 	class Parameter;
     19 	class Controller;
     20 
     21 	class ParameterBinding
     22 	{
     23 		class MouseListener : public juce::MouseListener
     24 		{
     25 		public:
     26 			MouseListener(pluginLib::Parameter* _param, juce::Slider& _slider);
     27 			void mouseDown(const juce::MouseEvent& event) override;
     28 			void mouseUp(const juce::MouseEvent& event) override;
     29 			void mouseDrag(const juce::MouseEvent& event) override;
     30 			void mouseWheelMove(const juce::MouseEvent& event, const juce::MouseWheelDetails& wheel) override;
     31 			void mouseDoubleClick(const juce::MouseEvent& event) override;
     32 
     33 		private:
     34 			pluginLib::Parameter *m_param;
     35 			juce::Slider* m_slider;
     36 		};
     37 	public:
     38 		static constexpr uint8_t CurrentPart = 0xff;
     39 
     40 		struct BoundParameter
     41 		{
     42 			Parameter* parameter = nullptr;
     43 			juce::Component* component = nullptr;
     44 			uint32_t paramIndex = 0xffffffff;
     45 			uint8_t part = CurrentPart;
     46 			size_t onChangeListenerId = ParameterListener::InvalidListenerId;
     47 			size_t softknobTargetChangedListenerId = ParameterListener::InvalidListenerId;
     48 		};
     49 
     50 		baseLib::Event<BoundParameter> onBind;
     51 		baseLib::Event<BoundParameter> onUnbind;
     52 
     53 		ParameterBinding(Controller& _controller) : m_controller(_controller)
     54 		{
     55 		}
     56 		~ParameterBinding();
     57 
     58 		void bind(juce::Slider& _control, uint32_t _param);
     59 		void bind(juce::Slider& _control, uint32_t _param, uint8_t _part);
     60 		void bind(juce::ComboBox& _control, uint32_t _param);
     61 		void bind(juce::ComboBox& _control, uint32_t _param, uint8_t _part);
     62 		void bind(juce::Button& _control, uint32_t _param);
     63 		void bind(juce::Button& _control, uint32_t _param, uint8_t _part);
     64 		void bind(juce::Label& _control, uint32_t _param);
     65 		void bind(juce::Label& _control, uint32_t _param, uint8_t _part);
     66 
     67 		bool bind(juce::Component& _component, uint32_t _param, uint8_t _part);
     68 
     69 		void clearBindings();
     70 		void clear();
     71 		void setPart(uint8_t _part);
     72 
     73 		void disableBindings();
     74 		void enableBindings();
     75 
     76 		const auto& getBindings() const { return m_bindings; }
     77 		juce::Component* getBoundComponent(const pluginLib::Parameter* _parameter) const;
     78 		pluginLib::Parameter* getBoundParameter(const juce::Component* _component) const;
     79 
     80 		bool unbind(const Parameter* _param);
     81 		bool unbind(const juce::Component* _component);
     82 
     83 	private:
     84 		void removeMouseListener(juce::Slider& _slider);
     85 
     86 		void addBinding(const BoundParameter& _boundParameter);
     87 		void disableBinding(BoundParameter& _b);
     88 
     89 		Controller& m_controller;
     90 
     91 		void bind(const std::vector<BoundParameter>& _bindings, bool _currentPartOnly);
     92 
     93 		std::vector<BoundParameter> m_bindings;
     94 		std::vector<BoundParameter> m_disabledBindings;
     95 		std::map<const pluginLib::Parameter*, juce::Component*> m_boundParameters;
     96 		std::map<const juce::Component*, pluginLib::Parameter*> m_boundComponents;
     97 		std::map<juce::Slider*, MouseListener*> m_sliderMouseListeners;
     98 	};
     99 }