Engine.saveUserPreset() doesn't hold its promise on Cancel
-
The message box states (Press cancel to create a new user preset), but it doesn't...
-
@ustk I don't even see a popup.
Edit: Just noticed I built HISE with
HISE_DEACTIVATE_OVERLAY=1
so that's possibly why I don't see it.I made a video about this function a while ago and it looks like I'm passing in a file object rather than a string even though the docs say it should be a preset name.
-
@d-healey Interesting behaviour... I reckon seeing your video but I might have overseen the file part!
Effectively the function takes both:
void ScriptingApi::Engine::saveUserPreset(var presetName) { if (auto sf = dynamic_cast<ScriptingObjects::ScriptFile*>(presetName.getObject())) { UserPresetHelpers::saveUserPreset(getProcessor()->getMainController()->getMainSynthChain(), sf->f.getFullPathName()); } else { getProcessor()->getMainController()->getUserPresetHandler().savePreset(presetName); } }
-
@d-healey So I might have found the culprit
I have
CONFIRM_PRESET_OVERWRITE=1
and the confirmation message doesn't seem to handle the CANCEL case so this would better be either removed from the message box or handledvoid UserPresetHelpers::saveUserPreset(ModulatorSynthChain *chain, const String& targetFile/*=String()*/, NotificationType notify/*=sendNotification*/) { #if USE_BACKEND const String version = dynamic_cast<GlobalSettingManager*>(chain->getMainController())->getSettingsObject().getSetting(HiseSettings::Project::Version); SemanticVersionChecker versionChecker(version, version); if (!versionChecker.newVersionNumberIsValid()) { PresetHandler::showMessageWindow("Invalid version number", "You need semantic versioning (something like 1.0.0) in order to support user presets", PresetHandler::IconType::Error); return; } if (!GET_PROJECT_HANDLER(chain).isActive()) return; #endif File presetFile = File(targetFile); String existingNote; StringArray existingTags; #if CONFIRM_PRESET_OVERWRITE if (presetFile.existsAsFile() && (!MessageManager::getInstance()->isThisTheMessageThread() || PresetHandler::showYesNoWindow("Confirm overwrite", "Do you want to overwrite the preset (Press cancel to create a new user preset?"))) { existingNote = PresetBrowser::DataBaseHelpers::getNoteFromXml(presetFile); existingTags = PresetBrowser::DataBaseHelpers::getTagsFromXml(presetFile); presetFile.deleteFile(); } #else if (presetFile.existsAsFile()) { existingNote = PresetBrowser::DataBaseHelpers::getNoteFromXml(presetFile); existingTags = PresetBrowser::DataBaseHelpers::getTagsFromXml(presetFile); presetFile.deleteFile(); } #endif if (!presetFile.existsAsFile()) { auto preset = createUserPreset(chain); if (preset.isValid()) { auto xml = preset.createXml(); presetFile.replaceWithText(xml->createDocument("")); if (existingNote.isNotEmpty()) PresetBrowser::DataBaseHelpers::writeNoteInXml(presetFile, existingNote); if (!existingTags.isEmpty()) PresetBrowser::DataBaseHelpers::writeTagsInXml(presetFile, existingTags); if (notify) { chain->getMainController()->getUserPresetHandler().currentlyLoadedFile = presetFile; chain->getMainController()->getUserPresetHandler().sendRebuildMessage(); } } } chain->getMainController()->getUserPresetHandler().postPresetSave(); }