Ildaeil: Add plugin type selector

Signed-off-by: falkTX <falktx@falktx.com>
This commit is contained in:
falkTX 2021-11-17 10:28:41 +00:00
parent b3d96ca6d0
commit 7fbf0bd8e7
No known key found for this signature in database
GPG key ID: CDBAA37ABC74FBA0

View file

@ -628,12 +628,14 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
kIdleShowCustomUI, kIdleShowCustomUI,
kIdleHidePluginUI, kIdleHidePluginUI,
kIdleGiveIdleToUI, kIdleGiveIdleToUI,
kIdleChangePluginType,
kIdleNothing kIdleNothing
} fIdleState = kIdleInit; } fIdleState = kIdleInit;
PluginType fPluginType = PLUGIN_LV2; PluginType fPluginType = PLUGIN_LV2;
PluginType fNextPluginType = fPluginType;
uint fPluginCount = 0; uint fPluginCount = 0;
uint fPluginSelected = false; int fPluginSelected = -1;
bool fPluginScanningFinished = false; bool fPluginScanningFinished = false;
bool fPluginHasCustomUI = false; bool fPluginHasCustomUI = false;
bool fPluginRunning = false; bool fPluginRunning = false;
@ -984,6 +986,15 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
module->fCarlaPluginDescriptor->ui_idle(module->fCarlaPluginHandle); module->fCarlaPluginDescriptor->ui_idle(module->fCarlaPluginHandle);
break; break;
case kIdleChangePluginType:
fIdleState = kIdleNothing;
fPluginSelected = -1;
if (isThreadRunning())
stopThread(-1);
fPluginType = fNextPluginType;
startThread();
break;
case kIdleNothing: case kIdleNothing:
break; break;
} }
@ -991,6 +1002,8 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
void loadSelectedPlugin(const CarlaHostHandle handle) void loadSelectedPlugin(const CarlaHostHandle handle)
{ {
DISTRHO_SAFE_ASSERT_RETURN(fPluginSelected >= 0,);
const PluginInfoCache& info(fPlugins[fPluginSelected]); const PluginInfoCache& info(fPlugins[fPluginSelected]);
const char* label = nullptr; const char* label = nullptr;
@ -1283,6 +1296,14 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
void drawPluginList() void drawPluginList()
{ {
static const char* pluginTypes[] = {
getPluginTypeAsString(PLUGIN_INTERNAL),
getPluginTypeAsString(PLUGIN_LV2),
#ifdef DISTRHO_OS_MAC
getPluginTypeAsString(PLUGIN_AU),
#endif
};
setupMainWindowPos(); setupMainWindowPos();
if (ImGui::Begin("Plugin List", nullptr, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize)) if (ImGui::Begin("Plugin List", nullptr, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize))
@ -1315,13 +1336,52 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
ImGui::SetKeyboardFocusHere(); ImGui::SetKeyboardFocusHere();
} }
if (ImGui::InputText("", fPluginSearchString, sizeof(fPluginSearchString)-1, ImGuiInputTextFlags_CharsNoBlank|ImGuiInputTextFlags_AutoSelectAll)) if (ImGui::InputText("", fPluginSearchString, sizeof(fPluginSearchString)-1,
ImGuiInputTextFlags_CharsNoBlank|ImGuiInputTextFlags_AutoSelectAll))
fPluginSearchActive = true; fPluginSearchActive = true;
ImGui::SameLine();
ImGui::PushItemWidth(-1.0f);
int current;
switch (fPluginType)
{
case PLUGIN_LV2:
current = 1;
break;
#ifdef DISTRHO_OS_MAC
case PLUGIN_AU:
current = 2;
break;
#endif
default:
current = 0;
break;
}
if (ImGui::Combo("", &current, pluginTypes, ARRAY_SIZE(pluginTypes)))
{
fIdleState = kIdleChangePluginType;
switch (current)
{
case 0:
fNextPluginType = PLUGIN_INTERNAL;
break;
case 1:
fNextPluginType = PLUGIN_LV2;
break;
#ifdef DISTRHO_OS_MAC
case 2:
fNextPluginType = PLUGIN_AU;
break;
#endif
}
}
if (ImGui::IsKeyDown(ImGuiKey_Escape)) if (ImGui::IsKeyDown(ImGuiKey_Escape))
fPluginSearchActive = false; fPluginSearchActive = false;
ImGui::BeginDisabled(!fPluginScanningFinished); ImGui::BeginDisabled(!fPluginScanningFinished || fPluginSelected < 0);
if (ImGui::Button("Load Plugin")) if (ImGui::Button("Load Plugin"))
fIdleState = kIdleLoadSelectedPlugin; fIdleState = kIdleLoadSelectedPlugin;
@ -1329,6 +1389,8 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
ImGui::SameLine(); ImGui::SameLine();
ImGui::Checkbox("Run in bridge mode", &fPluginWillRunInBridgeMode); ImGui::Checkbox("Run in bridge mode", &fPluginWillRunInBridgeMode);
ImGui::EndDisabled();
if (fPluginRunning) if (fPluginRunning)
{ {
ImGui::SameLine(); ImGui::SameLine();
@ -1337,8 +1399,6 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
fDrawingState = kDrawingPluginGenericUI; fDrawingState = kDrawingPluginGenericUI;
} }
ImGui::EndDisabled();
if (ImGui::BeginChild("pluginlistwindow")) if (ImGui::BeginChild("pluginlistwindow"))
{ {
if (ImGui::BeginTable("pluginlist", 2, ImGuiTableFlags_NoSavedSettings)) if (ImGui::BeginTable("pluginlist", 2, ImGuiTableFlags_NoSavedSettings))
@ -1348,8 +1408,9 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
switch (fPluginType) switch (fPluginType)
{ {
case PLUGIN_INTERNAL: case PLUGIN_INTERNAL:
// case PLUGIN_JSFX: case PLUGIN_AU:
case PLUGIN_SFZ: case PLUGIN_SFZ:
// case PLUGIN_JSFX:
ImGui::TableSetupColumn("Name"); ImGui::TableSetupColumn("Name");
ImGui::TableSetupColumn("Label"); ImGui::TableSetupColumn("Label");
ImGui::TableHeadersRow(); ImGui::TableHeadersRow();
@ -1370,7 +1431,7 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
if (search != nullptr && ildaeil::strcasestr(info.name, search) == nullptr) if (search != nullptr && ildaeil::strcasestr(info.name, search) == nullptr)
continue; continue;
bool selected = fPluginSelected == i; bool selected = fPluginSelected >= 0 && static_cast<uint>(fPluginSelected) == i;
switch (fPluginType) switch (fPluginType)
{ {