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:
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);