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 }