clap

CLAP Audio Plugin API
Log | Files | Refs | README | LICENSE

commit 2f86f38d103213b12e579866c25b487e872de12f
parent 7272da7faf555835968263f924212d4603edcc41
Author: Alexandre BIQUE <bique.alexandre@gmail.com>
Date:   Sat, 22 May 2021 10:25:22 +0200

Host: work on load native plugin preset

Diffstat:
Mexamples/host/application.cc | 5-----
Mexamples/host/main-window.cc | 16++++++++++++++++
Mexamples/host/main-window.hh | 1+
Mexamples/host/plugin-host.cc | 14++++++++++++++
Mexamples/host/plugin-host.hh | 6++++++
Mexamples/host/plugin-quick-controls-widget.cc | 4++--
6 files changed, 39 insertions(+), 7 deletions(-)

diff --git a/examples/host/application.cc b/examples/host/application.cc @@ -37,11 +37,6 @@ Application::Application(int argc, char **argv) mainWindow_->show(); engine_->setParentWindow(mainWindow_->getEmbedWindowId()); - QObject::connect(engine_, - SIGNAL(resizePluginView(int, int)), - mainWindow_, - SLOT(resizePluginView(int, int)), - Qt::QueuedConnection); if (engine_->loadPlugin(pluginPath_, pluginIndex_)) engine_->start(); diff --git a/examples/host/main-window.cc b/examples/host/main-window.cc @@ -12,6 +12,7 @@ #include "application.hh" #include "engine.hh" #include "main-window.hh" +#include "plugin-host.hh" #include "plugin-parameters-widget.hh" #include "plugin-quick-controls-widget.hh" #include "settings-dialog.hh" @@ -52,6 +53,11 @@ void MainWindow::createMenu() { QMenu *fileMenu = menuBar->addMenu(tr("File")); fileMenu->addAction(tr("Load plugin")); + connect(fileMenu->addAction(tr("Load Native Plugin Preset")), + &QAction::triggered, + this, + &MainWindow::loadNativePluginPreset); + fileMenu->addSeparator(); connect(fileMenu->addAction(tr("Settings")), &QAction::triggered, this, @@ -94,3 +100,12 @@ void MainWindow::resizePluginView(int width, int height) { pluginViewWidget_->show(); adjustSize(); } + +void MainWindow::loadNativePluginPreset() +{ + auto file = QFileDialog::getOpenFileName(this, tr("Load Plugin Native Preset")); + if (file.isEmpty()) + return; + + application_.engine()->pluginHost().loadNativePluginPreset(file.toStdString()); +} +\ No newline at end of file diff --git a/examples/host/main-window.hh b/examples/host/main-window.hh @@ -17,6 +17,7 @@ public: WId getEmbedWindowId(); public: + void loadNativePluginPreset(); void showSettingsDialog(); void showPluginParametersWindow(); void showPluginQuickControlsWindow(); diff --git a/examples/host/plugin-host.cc b/examples/host/plugin-host.cc @@ -169,6 +169,8 @@ void PluginHost::initPluginExtensions() { initPluginExtension(pluginGuiFreeStanding_, CLAP_EXT_GUI_FREE_STANDING); initPluginExtension(pluginEventLoop_, CLAP_EXT_EVENT_LOOP); initPluginExtension(pluginThreadPool_, CLAP_EXT_THREAD_POOL); + initPluginExtension(pluginPresetLoad_, CLAP_EXT_PRESET_LOAD); + initPluginExtension(pluginState_, CLAP_EXT_STATE); pluginExtensionsAreInitialized_ = true; } @@ -1021,6 +1023,18 @@ void PluginHost::clapQuickControlsSelectedPageChanged(clap_host *host, clap_id p h->quickControlsSetSelectedPage(page_id); } +bool PluginHost::loadNativePluginPreset(const std::string &path) { + checkForMainThread(); + + if (!pluginPresetLoad_) + return false; + + if (!pluginPresetLoad_->load_from_file) + throw std::logic_error("clap_plugin_preset_load does not implement load_from_file"); + + return pluginPresetLoad_->load_from_file(plugin_, path.c_str()); +} + void PluginHost::setPluginState(PluginState state) { switch (state) { case Inactive: diff --git a/examples/host/plugin-host.hh b/examples/host/plugin-host.hh @@ -59,6 +59,10 @@ public: auto quickControlsSelectedPage() const { return quickControlsSelectedPage_; } void setQuickControlsSelectedPageByHost(clap_id page_id); + bool loadNativePluginPreset(const std::string& path); + bool loadStateFromFile(const std::string& path); + bool saveStateToFile(const std::string& path); + static void checkForMainThread(); static void checkForAudioThread(); @@ -142,6 +146,8 @@ private: const clap_plugin_gui_free_standing *pluginGuiFreeStanding_ = nullptr; const clap_plugin_event_loop * pluginEventLoop_ = nullptr; const clap_plugin_thread_pool * pluginThreadPool_ = nullptr; + const clap_plugin_preset_load * pluginPresetLoad_ = nullptr; + const clap_plugin_state * pluginState_ = nullptr; bool pluginExtensionsAreInitialized_ = false; diff --git a/examples/host/plugin-quick-controls-widget.cc b/examples/host/plugin-quick-controls-widget.cc @@ -17,14 +17,14 @@ PluginQuickControlsWidget::PluginQuickControlsWidget(QWidget *parent, PluginHost for (auto &qc : controls_) qc = new PluginQuickControlWidget(this, pluginHost); - auto grid = new QGridLayout(this); + auto grid = new QGridLayout(); grid->setSpacing(3); const auto rowSize = CLAP_QUICK_CONTROLS_COUNT / 2; for (int i = 0; i < CLAP_QUICK_CONTROLS_COUNT; ++i) grid->addWidget(controls_[i], i / rowSize, i % rowSize); - auto vbox = new QVBoxLayout(this); + auto vbox = new QVBoxLayout(); vbox->addWidget(chooser_); vbox->addLayout(grid); vbox->setSpacing(3);