void syncProgramNames()

in pedalboard/juce_overrides/juce_PatchedVST3PluginFormat.cpp [3376:3445]


  void syncProgramNames() {
    programNames.clear();

    if (processor == nullptr || editController == nullptr)
      return;

    Vst::UnitID programUnitID;
    Vst::ParameterInfo paramInfo{};

    {
      int idx, num = editController->getParameterCount();

      for (idx = 0; idx < num; ++idx)
        if (editController->getParameterInfo(idx, paramInfo) == kResultOk &&
            (paramInfo.flags &
             Steinberg::Vst::ParameterInfo::kIsProgramChange) != 0)
          break;

      if (idx >= num)
        return;

      programParameterID = paramInfo.id;
      programUnitID = paramInfo.unitId;
    }

    if (unitInfo != nullptr) {
      Vst::UnitInfo uInfo{};
      const int unitCount = unitInfo->getUnitCount();

      for (int idx = 0; idx < unitCount; ++idx) {
        if (unitInfo->getUnitInfo(idx, uInfo) == kResultOk &&
            uInfo.id == programUnitID) {
          const int programListCount = unitInfo->getProgramListCount();

          for (int j = 0; j < programListCount; ++j) {
            Vst::ProgramListInfo programListInfo{};

            if (unitInfo->getProgramListInfo(j, programListInfo) == kResultOk &&
                programListInfo.id == uInfo.programListId) {
              Vst::String128 name;

              for (int k = 0; k < programListInfo.programCount; ++k)
                if (unitInfo->getProgramName(programListInfo.id, k, name) ==
                    kResultOk)
                  programNames.add(toString(name));

              return;
            }
          }

          break;
        }
      }
    }

    if (editController != nullptr && paramInfo.stepCount > 0) {
      auto numPrograms = paramInfo.stepCount + 1;

      for (int i = 0; i < numPrograms; ++i) {
        auto valueNormalized =
            static_cast<Vst::ParamValue>(i) /
            static_cast<Vst::ParamValue>(paramInfo.stepCount);

        Vst::String128 programName;
        if (editController->getParamStringByValue(paramInfo.id, valueNormalized,
                                                  programName) == kResultOk)
          programNames.add(toString(programName));
      }
    }
  }