From 539b407b58cfa82d524a8ceee85200a1675cba10 Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Sun, 1 Jan 2023 11:50:18 +1000 Subject: [PATCH] feat(color): Confirm before duplicate or saving model as template (#2931) * fix(color): Confirm before duplicating model * fix(color): Confirm before saveAsTemplate --- radio/src/gui/colorlcd/model_select.cpp | 83 ++++++++++++++----------- 1 file changed, 47 insertions(+), 36 deletions(-) diff --git a/radio/src/gui/colorlcd/model_select.cpp b/radio/src/gui/colorlcd/model_select.cpp index 07f2d6cb8..5270a41f1 100644 --- a/radio/src/gui/colorlcd/model_select.cpp +++ b/radio/src/gui/colorlcd/model_select.cpp @@ -409,28 +409,32 @@ void ModelsPageBody::selectModel(ModelCell *model) } } -void ModelsPageBody::duplicateModel(ModelCell* model) +void ModelsPageBody::duplicateModel(ModelCell *model) { - storageFlushCurrentModel(); - storageCheck(true); + new ConfirmDialog( + parent, STR_DUPLICATE_MODEL, + std::string(model->modelName, sizeof(model->modelName)).c_str(), [=] { + storageFlushCurrentModel(); + storageCheck(true); - char duplicatedFilename[LEN_MODEL_FILENAME + 1]; - memcpy(duplicatedFilename, model->modelFilename, - sizeof(duplicatedFilename)); - if (findNextFileIndex(duplicatedFilename, LEN_MODEL_FILENAME, - MODELS_PATH)) { - sdCopyFile(model->modelFilename, MODELS_PATH, duplicatedFilename, - MODELS_PATH); - // Make a new model which is a copy of the selected one, set the same - // labels - auto new_model = modelslist.addModel(duplicatedFilename, true, model); - for (const auto &lbl : modelslabels.getLabelsByModel(model)) { - modelslabels.addLabelToModel(lbl, new_model); - } - update(); - } else { - TRACE("ModelsListError: Invalid File"); - } + char duplicatedFilename[LEN_MODEL_FILENAME + 1]; + memcpy(duplicatedFilename, model->modelFilename, + sizeof(duplicatedFilename)); + if (findNextFileIndex(duplicatedFilename, LEN_MODEL_FILENAME, + MODELS_PATH)) { + sdCopyFile(model->modelFilename, MODELS_PATH, duplicatedFilename, + MODELS_PATH); + // Make a new model which is a copy of the selected one, set the same + // labels + auto new_model = modelslist.addModel(duplicatedFilename, true, model); + for (const auto &lbl : modelslabels.getLabelsByModel(model)) { + modelslabels.addLabelToModel(lbl, new_model); + } + update(); + } else { + TRACE("ModelsListError: Invalid File"); + } + }); } void ModelsPageBody::deleteModel(ModelCell *model) @@ -447,22 +451,29 @@ void ModelsPageBody::deleteModel(ModelCell *model) void ModelsPageBody::saveAsTemplate(ModelCell *model) { - storageDirty(EE_MODEL); - storageCheck(true); - constexpr size_t size = sizeof(model->modelName) + sizeof(YAML_EXT); - char modelName[size]; - snprintf(modelName, size, "%s%s", model->modelName, YAML_EXT); - char templatePath[FF_MAX_LFN]; - snprintf(templatePath, FF_MAX_LFN, "%s%c%s", PERS_TEMPL_PATH, '/', modelName); - sdCheckAndCreateDirectory(TEMPLATES_PATH); - sdCheckAndCreateDirectory(PERS_TEMPL_PATH); - if (isFileAvailable(templatePath)) { - new ConfirmDialog(parent, STR_FILE_EXISTS, STR_ASK_OVERWRITE, [=] { - sdCopyFile(model->modelFilename, MODELS_PATH, modelName, PERS_TEMPL_PATH); - }); - } else { - sdCopyFile(model->modelFilename, MODELS_PATH, modelName, PERS_TEMPL_PATH); - } + new ConfirmDialog( + parent, STR_SAVE_TEMPLATE, + std::string(model->modelName, sizeof(model->modelName)).c_str(), [=] { + storageDirty(EE_MODEL); + storageCheck(true); + constexpr size_t size = sizeof(model->modelName) + sizeof(YAML_EXT); + char modelName[size]; + snprintf(modelName, size, "%s%s", model->modelName, YAML_EXT); + char templatePath[FF_MAX_LFN]; + snprintf(templatePath, FF_MAX_LFN, "%s%c%s", PERS_TEMPL_PATH, '/', + modelName); + sdCheckAndCreateDirectory(TEMPLATES_PATH); + sdCheckAndCreateDirectory(PERS_TEMPL_PATH); + if (isFileAvailable(templatePath)) { + new ConfirmDialog(parent, STR_FILE_EXISTS, STR_ASK_OVERWRITE, [=] { + sdCopyFile(model->modelFilename, MODELS_PATH, modelName, + PERS_TEMPL_PATH); + }); + } else { + sdCopyFile(model->modelFilename, MODELS_PATH, modelName, + PERS_TEMPL_PATH); + } + }); } void ModelsPageBody::editLabels(ModelCell* model)