Use F7 key as "deploy to MOD" action, make it visible on file menu

Signed-off-by: falkTX <falktx@falktx.com>
This commit is contained in:
falkTX 2022-01-12 08:06:44 +00:00
parent a16c43f094
commit 28e0295a4a
No known key found for this signature in database
GPG key ID: CDBAA37ABC74FBA0
5 changed files with 43 additions and 20 deletions

View file

@ -37,12 +37,17 @@
#include <string.hpp> #include <string.hpp>
#include <system.hpp> #include <system.hpp>
#include <app/Scene.hpp> #include <app/Scene.hpp>
#include <engine/Engine.hpp>
#include <window/Window.hpp> #include <window/Window.hpp>
#ifdef NDEBUG #ifdef NDEBUG
# undef DEBUG # undef DEBUG
#endif #endif
#ifdef HAVE_LIBLO
# include <lo/lo.h>
#endif
// for finding home dir // for finding home dir
#ifndef ARCH_WIN #ifndef ARCH_WIN
# include <pwd.h> # include <pwd.h>
@ -204,6 +209,27 @@ void saveAsDialog()
#endif #endif
} }
void deployToMOD()
{
#ifdef HAVE_LIBLO
const lo_address addr = lo_address_new_with_proto(LO_UDP, REMOTE_HOST, REMOTE_HOST_PORT);
DISTRHO_SAFE_ASSERT_RETURN(addr != nullptr,);
APP->engine->prepareSave();
APP->patch->saveAutosave();
APP->patch->cleanAutosave();
std::vector<uint8_t> data(rack::system::archiveDirectory(APP->patch->autosavePath, 1));
if (const lo_blob blob = lo_blob_new(data.size(), data.data()))
{
lo_send(addr, "/load", "b", blob);
lo_blob_free(blob);
}
lo_address_free(addr);
#endif
}
} }
void async_dialog_filebrowser(const bool saving, void async_dialog_filebrowser(const bool saving,

View file

@ -19,6 +19,12 @@
#pragma once #pragma once
#ifdef HAVE_LIBLO
// # define REMOTE_HOST "localhost"
# define REMOTE_HOST "192.168.51.1"
# define REMOTE_HOST_PORT "2228"
#endif
namespace rack namespace rack
{ {
namespace ui { namespace ui {
@ -37,5 +43,6 @@ void revertDialog();
void saveDialog(const std::string& path); void saveDialog(const std::string& path);
void saveAsDialog(); void saveAsDialog();
void appendSelectionContextMenu(rack::ui::Menu* menu); void appendSelectionContextMenu(rack::ui::Menu* menu);
void deployToMOD();
} }

View file

@ -56,6 +56,10 @@ ifeq ($(DEBUG),true)
BASE_FLAGS += -UDEBUG BASE_FLAGS += -UDEBUG
endif endif
ifeq ($(HAVE_LIBLO),true)
BASE_FLAGS += -DHAVE_LIBLO
endif
ifeq ($(HEADLESS),true) ifeq ($(HEADLESS),true)
BASE_FLAGS += -DHEADLESS BASE_FLAGS += -DHEADLESS
endif endif

View file

@ -56,10 +56,6 @@
#include "../CardinalCommon.hpp" #include "../CardinalCommon.hpp"
// #define REMOTE_HOST "localhost"
#define REMOTE_HOST "192.168.51.1"
#define REMOTE_HOST_PORT "2228"
namespace rack { namespace rack {
namespace app { namespace app {
namespace menuBar { namespace menuBar {
@ -150,22 +146,8 @@ struct FileButton : MenuButton {
lo_address_free(addr); lo_address_free(addr);
})); }));
} else { } else {
menu->addChild(createMenuItem("Deploy to MOD", "", []() { menu->addChild(createMenuItem("Deploy to MOD", "F7", []() {
const lo_address addr = lo_address_new_with_proto(LO_UDP, REMOTE_HOST, REMOTE_HOST_PORT); patchUtils::deployToMOD();
DISTRHO_SAFE_ASSERT_RETURN(addr != nullptr,);
APP->engine->prepareSave();
APP->patch->saveAutosave();
APP->patch->cleanAutosave();
std::vector<uint8_t> data(rack::system::archiveDirectory(APP->patch->autosavePath, 1));
if (const lo_blob blob = lo_blob_new(data.size(), data.data()))
{
lo_send(addr, "/load", "b", blob);
lo_blob_free(blob);
}
lo_address_free(addr);
})); }));
} }
#endif #endif

View file

@ -255,6 +255,10 @@ void Scene::onHoverKey(const HoverKeyEvent& e) {
settings::cpuMeter ^= true; settings::cpuMeter ^= true;
e.consume(this); e.consume(this);
} }
if (e.key == GLFW_KEY_F7 && (e.mods & RACK_MOD_MASK) == 0) {
patchUtils::deployToMOD();
e.consume(this);
}
// Module selections // Module selections
if (e.keyName == "a" && (e.mods & RACK_MOD_MASK) == RACK_MOD_CTRL) { if (e.keyName == "a" && (e.mods & RACK_MOD_MASK) == RACK_MOD_CTRL) {