Ildaeil: Add plugin type selector
Signed-off-by: falkTX <falktx@falktx.com>
This commit is contained in:
parent
b3d96ca6d0
commit
7fbf0bd8e7
1 changed files with 68 additions and 7 deletions
|
@ -628,12 +628,14 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
|
|||
kIdleShowCustomUI,
|
||||
kIdleHidePluginUI,
|
||||
kIdleGiveIdleToUI,
|
||||
kIdleChangePluginType,
|
||||
kIdleNothing
|
||||
} fIdleState = kIdleInit;
|
||||
|
||||
PluginType fPluginType = PLUGIN_LV2;
|
||||
PluginType fNextPluginType = fPluginType;
|
||||
uint fPluginCount = 0;
|
||||
uint fPluginSelected = false;
|
||||
int fPluginSelected = -1;
|
||||
bool fPluginScanningFinished = false;
|
||||
bool fPluginHasCustomUI = false;
|
||||
bool fPluginRunning = false;
|
||||
|
@ -984,6 +986,15 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
|
|||
module->fCarlaPluginDescriptor->ui_idle(module->fCarlaPluginHandle);
|
||||
break;
|
||||
|
||||
case kIdleChangePluginType:
|
||||
fIdleState = kIdleNothing;
|
||||
fPluginSelected = -1;
|
||||
if (isThreadRunning())
|
||||
stopThread(-1);
|
||||
fPluginType = fNextPluginType;
|
||||
startThread();
|
||||
break;
|
||||
|
||||
case kIdleNothing:
|
||||
break;
|
||||
}
|
||||
|
@ -991,6 +1002,8 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
|
|||
|
||||
void loadSelectedPlugin(const CarlaHostHandle handle)
|
||||
{
|
||||
DISTRHO_SAFE_ASSERT_RETURN(fPluginSelected >= 0,);
|
||||
|
||||
const PluginInfoCache& info(fPlugins[fPluginSelected]);
|
||||
|
||||
const char* label = nullptr;
|
||||
|
@ -1283,6 +1296,14 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
|
|||
|
||||
void drawPluginList()
|
||||
{
|
||||
static const char* pluginTypes[] = {
|
||||
getPluginTypeAsString(PLUGIN_INTERNAL),
|
||||
getPluginTypeAsString(PLUGIN_LV2),
|
||||
#ifdef DISTRHO_OS_MAC
|
||||
getPluginTypeAsString(PLUGIN_AU),
|
||||
#endif
|
||||
};
|
||||
|
||||
setupMainWindowPos();
|
||||
|
||||
if (ImGui::Begin("Plugin List", nullptr, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize))
|
||||
|
@ -1315,13 +1336,52 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
|
|||
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;
|
||||
|
||||
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("", ¤t, 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))
|
||||
fPluginSearchActive = false;
|
||||
|
||||
ImGui::BeginDisabled(!fPluginScanningFinished);
|
||||
ImGui::BeginDisabled(!fPluginScanningFinished || fPluginSelected < 0);
|
||||
|
||||
if (ImGui::Button("Load Plugin"))
|
||||
fIdleState = kIdleLoadSelectedPlugin;
|
||||
|
@ -1329,6 +1389,8 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
|
|||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Run in bridge mode", &fPluginWillRunInBridgeMode);
|
||||
|
||||
ImGui::EndDisabled();
|
||||
|
||||
if (fPluginRunning)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
|
@ -1337,8 +1399,6 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
|
|||
fDrawingState = kDrawingPluginGenericUI;
|
||||
}
|
||||
|
||||
ImGui::EndDisabled();
|
||||
|
||||
if (ImGui::BeginChild("pluginlistwindow"))
|
||||
{
|
||||
if (ImGui::BeginTable("pluginlist", 2, ImGuiTableFlags_NoSavedSettings))
|
||||
|
@ -1348,8 +1408,9 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
|
|||
switch (fPluginType)
|
||||
{
|
||||
case PLUGIN_INTERNAL:
|
||||
// case PLUGIN_JSFX:
|
||||
case PLUGIN_AU:
|
||||
case PLUGIN_SFZ:
|
||||
// case PLUGIN_JSFX:
|
||||
ImGui::TableSetupColumn("Name");
|
||||
ImGui::TableSetupColumn("Label");
|
||||
ImGui::TableHeadersRow();
|
||||
|
@ -1370,7 +1431,7 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
|
|||
if (search != nullptr && ildaeil::strcasestr(info.name, search) == nullptr)
|
||||
continue;
|
||||
|
||||
bool selected = fPluginSelected == i;
|
||||
bool selected = fPluginSelected >= 0 && static_cast<uint>(fPluginSelected) == i;
|
||||
|
||||
switch (fPluginType)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue