Ildaeil: support read only params

Signed-off-by: falkTX <falktx@falktx.com>
This commit is contained in:
falkTX 2021-11-17 11:33:52 +00:00
parent da4eca8d20
commit 46c333a0fe
No known key found for this signature in database
GPG key ID: CDBAA37ABC74FBA0

View file

@ -578,7 +578,7 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
char* name;
char* format;
uint32_t rindex;
bool boolean, bvalue, log;
bool boolean, bvalue, log, readonly;
float min, max, power;
Parameter()
: name(nullptr),
@ -587,6 +587,7 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
boolean(false),
bvalue(false),
log(false),
readonly(false),
min(0.0f),
max(1.0f) {}
~Parameter()
@ -639,6 +640,7 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
int fPluginSelected = -1;
bool fPluginScanningFinished = false;
bool fPluginHasCustomUI = false;
bool fPluginHasOutputParameters = false;
bool fPluginRunning = false;
bool fPluginWillRunInBridgeMode = false;
PluginInfoCache* fPlugins = nullptr;
@ -785,6 +787,8 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
title += info->maker;
ui->title = title.getAndReleaseBuffer();
fPluginHasOutputParameters = false;
const uint32_t pcount = ui->parameterCount = carla_get_parameter_count(handle, 0);
// make count of valid parameters
@ -792,13 +796,14 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
{
const ParameterData* const pdata = carla_get_parameter_data(handle, 0, i);
if (pdata->type != PARAMETER_INPUT ||
(pdata->hints & PARAMETER_IS_ENABLED) == 0x0 ||
(pdata->hints & PARAMETER_IS_READ_ONLY) != 0x0)
if ((pdata->hints & PARAMETER_IS_ENABLED) == 0x0)
{
--ui->parameterCount;
continue;
}
if (pdata->type == PARAMETER_OUTPUT)
fPluginHasOutputParameters = true;
}
ui->parameters = new PluginGenericUI::Parameter[ui->parameterCount];
@ -809,9 +814,7 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
{
const ParameterData* const pdata = carla_get_parameter_data(handle, 0, i);
if (pdata->type != PARAMETER_INPUT ||
(pdata->hints & PARAMETER_IS_ENABLED) == 0x0 ||
(pdata->hints & PARAMETER_IS_READ_ONLY) != 0x0)
if ((pdata->hints & PARAMETER_IS_ENABLED) == 0x0)
continue;
const CarlaParameterInfo* const pinfo = carla_get_parameter_info(handle, 0, i);
@ -832,8 +835,10 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
param.rindex = i;
param.boolean = pdata->hints & PARAMETER_IS_BOOLEAN;
param.log = pdata->hints & PARAMETER_IS_LOGARITHMIC;
param.readonly = pdata->type != PARAMETER_INPUT || (pdata->hints & PARAMETER_IS_READ_ONLY);
param.min = pranges->min;
param.max = pranges->max;
ui->values[j] = carla_get_current_parameter_value(handle, 0, i);
if (param.boolean)
@ -971,6 +976,12 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
fileBrowserHandle = nullptr;
}
if (fDrawingState == kDrawingPluginGenericUI && fPluginGenericUI != nullptr && fPluginHasOutputParameters)
{
updatePluginGenericUI(handle);
setDirty(true);
}
switch (fIdleState)
{
case kIdleInit:
@ -1267,6 +1278,14 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread {
{
PluginGenericUI::Parameter& param(ui->parameters[i]);
if (param.readonly)
{
ImGui::BeginDisabled();
ImGui::SliderFloat(param.name, &ui->values[i], param.min, param.max, param.format, ImGuiSliderFlags_NoInput);
ImGui::EndDisabled();
continue;
}
if (param.boolean)
{
if (ImGui::Checkbox(param.name, &ui->parameters[i].bvalue))