From 5b45b6285ded6a2ab1ad65a91efb965686ba5a10 Mon Sep 17 00:00:00 2001 From: Achilleas Villiotis Date: Wed, 7 Aug 2024 14:56:27 +0300 Subject: [PATCH] Added onDrop functionality, need a way to allow click passthrough. --- NeuralAmpModeler/NeuralAmpModeler.cpp | 3 ++ NeuralAmpModeler/NeuralAmpModelerControls.h | 34 +++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/NeuralAmpModeler/NeuralAmpModeler.cpp b/NeuralAmpModeler/NeuralAmpModeler.cpp index 75e14227d..29dda3378 100644 --- a/NeuralAmpModeler/NeuralAmpModeler.cpp +++ b/NeuralAmpModeler/NeuralAmpModeler.cpp @@ -250,6 +250,9 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info) helpSVG)); pGraphics->AttachControl(new NAMAboutBoxControl(b, backgroundBitmap, style), kCtrlTagAboutBox)->Hide(true); + + // Implements drag and drop capabilities for plugin + pGraphics->AttachControl(new NAMDragDropControl(mainArea, loadModelCompletionHandler)); pGraphics->ForAllControlsFunc([](IControl* pControl) { pControl->SetMouseEventsWhenDisabled(true); diff --git a/NeuralAmpModeler/NeuralAmpModelerControls.h b/NeuralAmpModeler/NeuralAmpModelerControls.h index ee5c3c282..6a3cdde24 100644 --- a/NeuralAmpModeler/NeuralAmpModelerControls.h +++ b/NeuralAmpModeler/NeuralAmpModelerControls.h @@ -1,6 +1,7 @@ #pragma once #include // std::round +#include // std::function #include // std::stringstream #include "IControls.h" @@ -558,3 +559,36 @@ class NAMAboutBoxControl : public IContainerBase int mAnimationTime = 200; bool mWillHide = false; }; + +class NAMDragDropControl : public IControl +{ +public: + NAMDragDropControl(const IRECT& bounds, + std::function loadModelCompletionHandler) + : IControl(bounds), loadModel(loadModelCompletionHandler) + { + mIgnoreMouse = true; + } + + void Draw(IGraphics& g) override + {} + + void OnDrop(const char* str) override + { + // Handle the dropped data + if (str) + { + std::cout << "Dropped data: " << str << std::endl; + + WDL_String fileName, directory; + fileName.Set(str); + directory.Set(str); + directory.remove_filepart(true); + + loadModel(fileName, directory); + } + } + +private: + std::function loadModel; +};