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 }