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

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 }