Parts.h (1668B)
1 #pragma once 2 3 #include <vector> 4 5 #include "baseLib/event.h" 6 #include "juceUiLib/button.h" 7 #include "virusLib/frontpanelState.h" 8 9 namespace genericVirusUI 10 { 11 class PartButton; 12 class VirusEditor; 13 14 class PartMouseListener : public juce::MouseListener 15 { 16 public: 17 explicit PartMouseListener(const int _part, const std::function<void(const juce::MouseEvent&, int)>& _callback) : m_part(_part), m_callback(_callback) 18 { 19 } 20 21 void mouseDrag(const juce::MouseEvent& _event) override 22 { 23 m_callback(_event, m_part); 24 } 25 26 private: 27 int m_part; 28 std::function<void(const juce::MouseEvent&, int)> m_callback; 29 }; 30 31 class Parts : juce::Timer 32 { 33 public: 34 explicit Parts(VirusEditor& _editor); 35 ~Parts() override; 36 37 void onProgramChange() const; 38 void onPlayModeChanged() const; 39 void onCurrentPartChanged() const; 40 41 private: 42 void selectPart(size_t _part) const; 43 void selectPartMidiChannel(size_t _part) const; 44 void selectPrevPreset(size_t _part) const; 45 void selectNextPreset(size_t _part) const; 46 47 void updatePresetNames() const; 48 void updateSelectedPart() const; 49 void updateAll() const; 50 void updateSingleOrMultiMode() const; 51 52 void timerCallback() override; 53 54 VirusEditor& m_editor; 55 56 std::vector<genericUI::Button<juce::DrawableButton>*> m_partSelect; 57 std::vector<juce::Button*> m_presetPrev; 58 std::vector<juce::Button*> m_presetNext; 59 60 std::vector<juce::Slider*> m_partVolume; 61 std::vector<juce::Slider*> m_partPan; 62 std::vector<juce::Component*> m_partActive; 63 64 std::vector<PartButton*> m_presetName; 65 66 virusLib::FrontpanelState m_frontpanelState; 67 baseLib::EventListener<virusLib::FrontpanelState> m_onFrontpanelStateChanged; 68 }; 69 }