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

pluginEditor.h (4261B)


      1 #pragma once
      2 
      3 #include "imagePool.h"
      4 #include "parameterOverlays.h"
      5 #include "skin.h"
      6 
      7 #include "juceUiLib/editor.h"
      8 
      9 #include "synthLib/buildconfig.h"
     10 
     11 #include "baseLib/event.h"
     12 
     13 #include "jucePluginLib/types.h"
     14 
     15 namespace baseLib
     16 {
     17 	class ChunkReader;
     18 	class BinaryStream;
     19 	class ChunkWriter;
     20 }
     21 
     22 namespace pluginLib
     23 {
     24 	class FileType;
     25 	class ParameterBinding;
     26 }
     27 
     28 namespace jucePluginEditorLib
     29 {
     30 	namespace patchManager
     31 	{
     32 		class PatchManager;
     33 	}
     34 
     35 	class Processor;
     36 
     37 	class Editor : public genericUI::Editor, genericUI::EditorInterface
     38 	{
     39 	public:
     40 		baseLib::Event<Editor*, juce::MouseEvent*> onOpenMenu;
     41 
     42 		Editor(Processor& _processor, pluginLib::ParameterBinding& _binding, Skin _skin);
     43 		~Editor() override;
     44 
     45 		Editor(const Editor&) = delete;
     46 		Editor(Editor&&) = delete;
     47 		Editor& operator = (const Editor&) = delete;
     48 		Editor& operator = (Editor&&) = delete;
     49 		
     50 		void create();
     51 
     52 		const char* findResourceByFilename(const std::string& _filename, uint32_t& _size) const;
     53 
     54 		void loadPreset(const std::function<void(const juce::File&)>& _callback);
     55 		void savePreset(const pluginLib::FileType& _fileType, const std::function<void(const juce::File&)>& _callback);
     56 #if !SYNTHLIB_DEMO_MODE
     57 		static bool savePresets(const pluginLib::FileType& _type, const std::string& _pathName, const std::vector<std::vector<uint8_t>>& _presets);
     58 #endif
     59 		static std::string createValidFilename(pluginLib::FileType& _type, const juce::File& _file);
     60 
     61 		virtual std::pair<std::string, std::string> getDemoRestrictionText() const = 0;
     62 
     63 		void showDemoRestrictionMessageBox() const;
     64 
     65 		Processor& getProcessor() const { return m_processor; }
     66 
     67 		void setPatchManager(patchManager::PatchManager* _patchManager);
     68 
     69 		patchManager::PatchManager* getPatchManager() const
     70 		{
     71 			return m_patchManager.get();
     72 		}
     73 
     74 		void setPerInstanceConfig(const std::vector<uint8_t>& _data) override;
     75 		void getPerInstanceConfig(std::vector<uint8_t>& _data) override;
     76 
     77 		virtual void saveChunkData(baseLib::BinaryStream& _s);
     78 		virtual void loadChunkData(baseLib::ChunkReader& _cr);
     79 
     80 		void setCurrentPart(uint8_t _part) override;
     81 
     82 		void showDisclaimer() const;
     83 
     84 		bool shouldDropFilesWhenDraggedExternally(const juce::DragAndDropTarget::SourceDetails& sourceDetails, juce::StringArray& files, bool& canMoveFiles) override;
     85 
     86 		void copyCurrentPatchToClipboard() const;
     87 		bool replaceCurrentPatchFromClipboard() const;
     88 
     89 		virtual void openMenu(juce::MouseEvent* _event);
     90 		virtual bool openContextMenuForParameter(const juce::MouseEvent* _event);
     91 
     92 		bool copyRegionToClipboard(const std::string& _regionId) const;
     93 		bool copyParametersToClipboard(const std::vector<std::string>& _params, const std::string& _regionId = {}) const;
     94 		bool setParameters(const std::map<std::string, pluginLib::ParamValue>& _paramValues) const;
     95 
     96 		auto& getImagePool() { return m_imagePool; }
     97 
     98 		void parentHierarchyChanged() override;
     99 
    100 		juce::PopupMenu createExportFileTypeMenu(const std::function<void(pluginLib::FileType)>& _func) const;
    101 		virtual void createExportFileTypeMenu(juce::PopupMenu& _menu, const std::function<void(pluginLib::FileType)>& _func) const;
    102 
    103 	protected:
    104 		bool keyPressed(const juce::KeyPress& _key) override;
    105 
    106 	private:
    107 		void onDisclaimerFinished() const;
    108 
    109 		const char* getResourceByFilename(const std::string& _name, uint32_t& _dataSize) override;
    110 		int getParameterIndexByName(const std::string& _name) override;
    111 		bool bindParameter(juce::Button& _target, int _parameterIndex) override;
    112 		bool bindParameter(juce::ComboBox& _target, int _parameterIndex) override;
    113 		bool bindParameter(juce::Slider& _target, int _parameterIndex) override;
    114 		bool bindParameter(juce::Label& _target, int _parameterIndex) override;
    115 		juce::Value* getParameterValue(int _parameterIndex, uint8_t _part) override;
    116 
    117 		Processor& m_processor;
    118 		pluginLib::ParameterBinding& m_binding;
    119 
    120 		const Skin m_skin;
    121 
    122 		std::map<std::string, std::vector<char>> m_fileCache;
    123 
    124 		std::unique_ptr<juce::FileChooser> m_fileChooser;
    125 		std::unique_ptr<patchManager::PatchManager> m_patchManager;
    126 		std::vector<uint8_t> m_patchManagerConfig;
    127 		std::vector<std::shared_ptr<juce::TemporaryFile>> m_dragAndDropTempFiles;
    128 		std::vector<juce::File> m_dragAndDropFiles;
    129 		ImagePool m_imagePool;
    130 		ParameterOverlays m_overlays;
    131 	};
    132 }