Show warning if loading Carla or Ildaeil without Carla installed
Closes #66
This commit is contained in:
parent
3126e9ecc7
commit
65257f0494
2 changed files with 91 additions and 18 deletions
|
|
@ -121,6 +121,49 @@ struct CarlaModule : Module {
|
||||||
configOutput(i, name);
|
configOutput(i, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* binaryDir = nullptr;
|
||||||
|
const char* resourceDir = nullptr;
|
||||||
|
|
||||||
|
#if defined(CARLA_OS_MAC)
|
||||||
|
if (system::exists("~/Applications/Carla.app"))
|
||||||
|
{
|
||||||
|
binaryDir = "~/Applications/Carla.app/Contents/MacOS";
|
||||||
|
resourceDir = "~/Applications/Carla.app/Contents/MacOS/resources";
|
||||||
|
}
|
||||||
|
else if (system::exists("/Applications/Carla.app"))
|
||||||
|
{
|
||||||
|
binaryDir = "/Applications/Carla.app/Contents/MacOS";
|
||||||
|
resourceDir = "/Applications/Carla.app/Contents/MacOS/resources";
|
||||||
|
}
|
||||||
|
#elif defined(CARLA_OS_WINDOWS)
|
||||||
|
// Carla does not support system-wide install on Windows right now
|
||||||
|
if (false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (system::exists("/usr/local/lib/carla"))
|
||||||
|
{
|
||||||
|
binaryDir = "/usr/local/lib/carla";
|
||||||
|
resourceDir = "/usr/local/share/carla/resources";
|
||||||
|
}
|
||||||
|
else if (system::exists("/usr/lib/carla"))
|
||||||
|
{
|
||||||
|
binaryDir = "/usr/lib/carla";
|
||||||
|
resourceDir = "/usr/share/carla/resources";
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (binaryDir == nullptr)
|
||||||
|
{
|
||||||
|
static bool warningShown = false;
|
||||||
|
if (! warningShown)
|
||||||
|
{
|
||||||
|
warningShown = true;
|
||||||
|
async_dialog_message("Carla is not installed on this system, the Carla module will do nothing");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::memset(dataOut, 0, sizeof(dataOut));
|
std::memset(dataOut, 0, sizeof(dataOut));
|
||||||
|
|
||||||
fCarlaPluginDescriptor = carla_get_native_patchbay_cv8_plugin();
|
fCarlaPluginDescriptor = carla_get_native_patchbay_cv8_plugin();
|
||||||
|
|
@ -130,11 +173,7 @@ struct CarlaModule : Module {
|
||||||
memset(&fCarlaTimeInfo, 0, sizeof(fCarlaTimeInfo));
|
memset(&fCarlaTimeInfo, 0, sizeof(fCarlaTimeInfo));
|
||||||
|
|
||||||
fCarlaHostDescriptor.handle = this;
|
fCarlaHostDescriptor.handle = this;
|
||||||
#ifdef CARLA_OS_MAC
|
fCarlaHostDescriptor.resourceDir = resourceDir;
|
||||||
fCarlaHostDescriptor.resourceDir = "/Applications/Carla.app/Contents/MacOS/resources";
|
|
||||||
#else
|
|
||||||
fCarlaHostDescriptor.resourceDir = "/usr/share/carla/resources";
|
|
||||||
#endif
|
|
||||||
fCarlaHostDescriptor.uiName = "Carla";
|
fCarlaHostDescriptor.uiName = "Carla";
|
||||||
fCarlaHostDescriptor.uiParentId = 0;
|
fCarlaHostDescriptor.uiParentId = 0;
|
||||||
|
|
||||||
|
|
@ -158,13 +197,8 @@ struct CarlaModule : Module {
|
||||||
fCarlaHostHandle = carla_create_native_plugin_host_handle(fCarlaPluginDescriptor, fCarlaPluginHandle);
|
fCarlaHostHandle = carla_create_native_plugin_host_handle(fCarlaPluginDescriptor, fCarlaPluginHandle);
|
||||||
DISTRHO_SAFE_ASSERT_RETURN(fCarlaHostHandle != nullptr,);
|
DISTRHO_SAFE_ASSERT_RETURN(fCarlaHostHandle != nullptr,);
|
||||||
|
|
||||||
#ifdef CARLA_OS_MAC
|
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_BINARIES, 0, binaryDir);
|
||||||
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_BINARIES, 0, "/Applications/Carla.app/Contents/MacOS");
|
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_RESOURCES, 0, resourceDir);
|
||||||
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_RESOURCES, 0, "/Applications/Carla.app/Contents/MacOS/resources");
|
|
||||||
#else
|
|
||||||
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_BINARIES, 0, "/usr/lib/carla");
|
|
||||||
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_RESOURCES, 0, "/usr/share/carla/resources");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
fCarlaPluginDescriptor->dispatcher(fCarlaPluginHandle, NATIVE_PLUGIN_OPCODE_HOST_USES_EMBED,
|
fCarlaPluginDescriptor->dispatcher(fCarlaPluginHandle, NATIVE_PLUGIN_OPCODE_HOST_USES_EMBED,
|
||||||
0, 0, nullptr, 0.0f);
|
0, 0, nullptr, 0.0f);
|
||||||
|
|
@ -579,6 +613,9 @@ struct CarlaModuleWidget : ModuleWidget, IdleCallback {
|
||||||
|
|
||||||
void appendContextMenu(ui::Menu* const menu) override
|
void appendContextMenu(ui::Menu* const menu) override
|
||||||
{
|
{
|
||||||
|
if (module == nullptr || module->pcontext == nullptr || module->fCarlaHostHandle == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
menu->addChild(new ui::MenuSeparator);
|
menu->addChild(new ui::MenuSeparator);
|
||||||
|
|
||||||
menu->addChild(createCheckMenuItem(visible ? "Bring GUI to Front" : "Show GUI", "",
|
menu->addChild(createCheckMenuItem(visible ? "Bring GUI to Front" : "Show GUI", "",
|
||||||
|
|
@ -599,6 +636,9 @@ struct CarlaModuleWidget : ModuleWidget, IdleCallback {
|
||||||
|
|
||||||
void onDoubleClick(const DoubleClickEvent& e) override
|
void onDoubleClick(const DoubleClickEvent& e) override
|
||||||
{
|
{
|
||||||
|
if (module == nullptr || module->pcontext == nullptr || module->fCarlaHostHandle == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
e.consume(this);
|
e.consume(this);
|
||||||
showUI();
|
showUI();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -259,6 +259,7 @@ struct IldaeilModule : Module {
|
||||||
NativeTimeInfo fCarlaTimeInfo;
|
NativeTimeInfo fCarlaTimeInfo;
|
||||||
|
|
||||||
void* fUI = nullptr;
|
void* fUI = nullptr;
|
||||||
|
bool canUseBridges = true;
|
||||||
|
|
||||||
float audioDataIn1[BUFFER_SIZE];
|
float audioDataIn1[BUFFER_SIZE];
|
||||||
float audioDataIn2[BUFFER_SIZE];
|
float audioDataIn2[BUFFER_SIZE];
|
||||||
|
|
@ -320,13 +321,45 @@ struct IldaeilModule : Module {
|
||||||
fCarlaHostHandle = carla_create_native_plugin_host_handle(fCarlaPluginDescriptor, fCarlaPluginHandle);
|
fCarlaHostHandle = carla_create_native_plugin_host_handle(fCarlaPluginDescriptor, fCarlaPluginHandle);
|
||||||
DISTRHO_SAFE_ASSERT_RETURN(fCarlaHostHandle != nullptr,);
|
DISTRHO_SAFE_ASSERT_RETURN(fCarlaHostHandle != nullptr,);
|
||||||
|
|
||||||
#ifdef CARLA_OS_MAC
|
#if defined(CARLA_OS_MAC)
|
||||||
|
if (system::exists("~/Applications/Carla.app"))
|
||||||
|
{
|
||||||
|
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_BINARIES, 0, "~/Applications/Carla.app/Contents/MacOS");
|
||||||
|
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_RESOURCES, 0, "~/Applications/Carla.app/Contents/MacOS/resources");
|
||||||
|
}
|
||||||
|
else if (system::exists("/Applications/Carla.app"))
|
||||||
|
{
|
||||||
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_BINARIES, 0, "/Applications/Carla.app/Contents/MacOS");
|
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_BINARIES, 0, "/Applications/Carla.app/Contents/MacOS");
|
||||||
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_RESOURCES, 0, "/Applications/Carla.app/Contents/MacOS/resources");
|
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_RESOURCES, 0, "/Applications/Carla.app/Contents/MacOS/resources");
|
||||||
|
}
|
||||||
|
#elif defined(CARLA_OS_WINDOWS)
|
||||||
|
// Carla does not support system-wide install on Windows right now
|
||||||
|
if (false)
|
||||||
|
{
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
|
if (system::exists("/usr/local/lib/carla"))
|
||||||
|
{
|
||||||
|
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_BINARIES, 0, "/usr/local/lib/carla");
|
||||||
|
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_RESOURCES, 0, "/usr/local/share/carla/resources");
|
||||||
|
}
|
||||||
|
else if (system::exists("/usr/lib/carla"))
|
||||||
|
{
|
||||||
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_BINARIES, 0, "/usr/lib/carla");
|
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_BINARIES, 0, "/usr/lib/carla");
|
||||||
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_RESOURCES, 0, "/usr/share/carla/resources");
|
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PATH_RESOURCES, 0, "/usr/share/carla/resources");
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
else
|
||||||
|
{
|
||||||
|
canUseBridges = false;
|
||||||
|
|
||||||
|
static bool warningShown = false;
|
||||||
|
if (! warningShown)
|
||||||
|
{
|
||||||
|
warningShown = true;
|
||||||
|
async_dialog_message("Carla is not installed on this system, bridged plugins will not work");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (const char* const path = std::getenv("LV2_PATH"))
|
if (const char* const path = std::getenv("LV2_PATH"))
|
||||||
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PLUGIN_PATH, PLUGIN_LV2, path);
|
carla_set_engine_option(fCarlaHostHandle, ENGINE_OPTION_PLUGIN_PATH, PLUGIN_LV2, path);
|
||||||
|
|
@ -1482,7 +1515,7 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
|
||||||
if (ImGui::Button("Load Plugin"))
|
if (ImGui::Button("Load Plugin"))
|
||||||
fIdleState = kIdleLoadSelectedPlugin;
|
fIdleState = kIdleLoadSelectedPlugin;
|
||||||
|
|
||||||
if (fPluginType != PLUGIN_INTERNAL)
|
if (fPluginType != PLUGIN_INTERNAL && module->canUseBridges)
|
||||||
{
|
{
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::Checkbox("Run in bridge mode", &fPluginWillRunInBridgeMode);
|
ImGui::Checkbox("Run in bridge mode", &fPluginWillRunInBridgeMode);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue