| 968 | } |
| 969 | |
| 970 | std::vector<VST3Wrapper::FactoryPresetDesc> VST3Wrapper::FindFactoryPresets() const |
| 971 | { |
| 972 | using namespace Steinberg; |
| 973 | |
| 974 | wxArrayString paths; |
| 975 | wxDir::GetAllFiles(VST3Utils::GetFactoryPresetsPath(mEffectClassInfo), &paths); |
| 976 | |
| 977 | std::vector<FactoryPresetDesc> result; |
| 978 | for(auto& path : paths) |
| 979 | { |
| 980 | wxFileName filename(path); |
| 981 | result.push_back({ filename.GetFullPath(), filename.GetName() }); |
| 982 | } |
| 983 | |
| 984 | auto cache = GetCache(mEffectClassInfo.ID()); |
| 985 | if(cache->rootUnitProgramChangeParameterID != Vst::kNoParamId && |
| 986 | cache->rootUnitProgramCount > 0) |
| 987 | { |
| 988 | Vst::String128 programName; |
| 989 | if(cache->rootUnitProgramListID != Vst::kNoProgramListId) |
| 990 | { |
| 991 | auto unitInfoProvider = FUnknownPtr<Vst::IUnitInfo>(mEditController); |
| 992 | |
| 993 | for(int32 programIndex = 0, programCount = cache->rootUnitProgramCount; |
| 994 | programIndex < programCount; |
| 995 | ++programIndex) |
| 996 | { |
| 997 | if(unitInfoProvider->getProgramName(cache->rootUnitProgramListID, programIndex, programName) != kResultOk) |
| 998 | programName[0] = 0; |
| 999 | auto presetDisplayName = VST3Utils::ToWxString(programName); |
| 1000 | if(presetDisplayName.empty()) |
| 1001 | presetDisplayName = wxString::Format("Unit %03d - %04d", Vst::kRootUnitId, programIndex); |
| 1002 | |
| 1003 | result.push_back({ |
| 1004 | VST3Utils::MakeFactoryPresetID(Vst::kRootUnitId, programIndex), |
| 1005 | presetDisplayName |
| 1006 | }); |
| 1007 | } |
| 1008 | } |
| 1009 | else |
| 1010 | { |
| 1011 | for(int32_t programIndex = 0; programIndex < cache->rootUnitProgramCount; ++programIndex) |
| 1012 | { |
| 1013 | auto normalizedValue = mEditController->plainParamToNormalized(cache->rootUnitProgramChangeParameterID, programIndex); |
| 1014 | if(mEditController->getParamStringByValue(cache->rootUnitProgramChangeParameterID, normalizedValue, programName) == kResultOk) |
| 1015 | { |
| 1016 | result.push_back({ |
| 1017 | VST3Utils::MakeFactoryPresetID(Vst::kRootUnitId, programIndex), |
| 1018 | VST3Utils::ToWxString(programName) |
| 1019 | }); |
| 1020 | } |
| 1021 | } |
| 1022 | } |
| 1023 | } |
| 1024 | |
| 1025 | return result; |
| 1026 | } |
| 1027 | |