feat(color): Confirm before duplicate or saving model as template (#2931)

* fix(color): Confirm before duplicating model

* fix(color): Confirm before saveAsTemplate
This commit is contained in:
Peter Feerick
2023-01-01 11:50:18 +10:00
committed by GitHub
parent 655aa42c6f
commit 539b407b58
+47 -36
View File
@@ -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)