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

VirusEditor.h (2864B)


      1 #pragma once
      2 
      3 #include "jucePluginEditorLib/midiPorts.h"
      4 #include "jucePluginEditorLib/pluginEditor.h"
      5 #include "jucePluginEditorLib/focusedParameter.h"
      6 
      7 #include "baseLib/event.h"
      8 
      9 #include "Parts.h"
     10 #include "Tabs.h"
     11 #include "FxPage.h"
     12 #include "PatchManager.h"
     13 #include "ControllerLinks.h"
     14 #include "Leds.h"
     15 
     16 namespace virusLib
     17 {
     18 	class ROMFile;
     19 }
     20 
     21 namespace jucePluginEditorLib
     22 {
     23 	class FocusedParameter;
     24 }
     25 
     26 namespace pluginLib
     27 {
     28 	class Parameter;
     29 	class ParameterBinding;
     30 }
     31 
     32 namespace virus
     33 {
     34 	class VirusProcessor;
     35 }
     36 
     37 namespace genericVirusUI
     38 {
     39 	class ArpUserPattern;
     40 
     41 	class VirusEditor : public jucePluginEditorLib::Editor
     42 	{
     43 	public:
     44 		enum class SaveType
     45 		{
     46 			CurrentSingle,
     47 			Bank,
     48 			Arrangement
     49 		};
     50 
     51 		VirusEditor(pluginLib::ParameterBinding& _binding, virus::VirusProcessor& _processorRef, const jucePluginEditorLib::Skin& _skin);
     52 		~VirusEditor() override;
     53 
     54 		void setPart(size_t _part);
     55 
     56 		pluginLib::ParameterBinding& getParameterBinding() const { return m_parameterBinding; }
     57 
     58 		virus::Controller& getController() const;
     59 
     60 		std::pair<std::string, std::string> getDemoRestrictionText() const override;
     61 
     62 		genericUI::Button<juce::TextButton>* createJuceComponent(genericUI::Button<juce::TextButton>*, genericUI::UiObject& _object) override;
     63 		juce::Component* createJuceComponent(juce::Component*, genericUI::UiObject& _object) override;
     64 
     65 		const auto& getLeds() const { return m_leds; }
     66 
     67 	private:
     68 		void onProgramChange(int _part);
     69 		void onPlayModeChanged();
     70 		void onCurrentPartChanged();
     71 
     72 		void mouseEnter(const juce::MouseEvent& event) override;
     73 
     74 		void updatePresetName() const;
     75 		void updatePlayModeButtons() const;
     76 
     77 		void updateDeviceModel();
     78 
     79 		void savePreset();
     80 		void loadPreset();
     81 
     82 		void setPlayMode(uint8_t _playMode);
     83 
     84 		void savePresets(SaveType _saveType, const pluginLib::FileType& _fileType, uint8_t _bankNumber = 0);
     85 		bool savePresets(const std::string& _pathName, SaveType _saveType, const pluginLib::FileType& _fileType, uint8_t _bankNumber = 0) const;
     86 
     87 		virus::VirusProcessor& m_processor;
     88 		pluginLib::ParameterBinding& m_parameterBinding;
     89 
     90 		std::unique_ptr<Parts> m_parts;
     91 		std::unique_ptr<Leds> m_leds;
     92 		std::unique_ptr<Tabs> m_tabs;
     93 		std::unique_ptr<jucePluginEditorLib::MidiPorts> m_midiPorts;
     94 		std::unique_ptr<FxPage> m_fxPage;
     95 		std::unique_ptr<ControllerLinks> m_controllerLinks;
     96 
     97 		juce::Label* m_presetName = nullptr;
     98 		PartMouseListener* m_presetNameMouseListener  = nullptr;
     99 
    100 		std::unique_ptr<jucePluginEditorLib::FocusedParameter> m_focusedParameter;
    101 
    102 		juce::ComboBox* m_romSelector = nullptr;
    103 
    104 		juce::Button* m_playModeSingle = nullptr;
    105 		juce::Button* m_playModeMulti = nullptr;
    106 		juce::Button* m_playModeToggle = nullptr;
    107 
    108 		juce::Label* m_deviceModel = nullptr;
    109 
    110 		ArpUserPattern* m_arpUserPattern = nullptr;
    111 
    112 		baseLib::EventListener<const virusLib::ROMFile*> m_romChangedListener;
    113 	};
    114 }