diff --git a/radio/src/gui/colorlcd/libui/list_line_button.cpp b/radio/src/gui/colorlcd/libui/list_line_button.cpp index ccb22fbd6..e3f44effe 100644 --- a/radio/src/gui/colorlcd/libui/list_line_button.cpp +++ b/radio/src/gui/colorlcd/libui/list_line_button.cpp @@ -309,6 +309,19 @@ void InputMixGroupBase::refresh() lv_label_set_text(label, s); } +int InputMixGroupBase::getLineNumber(uint8_t index) +{ + int n = 0; + auto l = std::find_if(lines.begin(), lines.end(), [&](InputMixButtonBase* l) { + n += 1; + return l->getIndex() == index; + }); + + if (l != lines.end()) return n; + + return -1; +} + InputMixGroupBase* InputMixPageBase::getGroupBySrc(mixsrc_t src) { auto g = std::find_if( diff --git a/radio/src/gui/colorlcd/libui/list_line_button.h b/radio/src/gui/colorlcd/libui/list_line_button.h index c91d110ef..de7ac9a40 100644 --- a/radio/src/gui/colorlcd/libui/list_line_button.h +++ b/radio/src/gui/colorlcd/libui/list_line_button.h @@ -111,6 +111,7 @@ class InputMixGroupBase : public Window mixsrc_t getMixSrc() { return idx; } size_t getLineCount() { return lines.size(); } + int getLineNumber(uint8_t idx); virtual void adjustHeight(); void addLine(InputMixButtonBase* line); diff --git a/radio/src/gui/colorlcd/model/model_inputs.cpp b/radio/src/gui/colorlcd/model/model_inputs.cpp index 970323b59..1ca2cd428 100644 --- a/radio/src/gui/colorlcd/model/model_inputs.cpp +++ b/radio/src/gui/colorlcd/model/model_inputs.cpp @@ -347,24 +347,36 @@ void ModelInputsPage::insertInput(uint8_t input, uint8_t index) void ModelInputsPage::deleteInput(uint8_t index) { - _copyMode = 0; - auto group = getGroupByIndex(index); - if (!group) return; + if (!group) return; auto line = getLineByIndex(index); if (!line) return; - group->removeLine(line); - if (group->getLineCount() == 0) { - group->deleteLater(); - removeGroup(group); + auto expo = expoAddress(index); + std::string s(getSourceString(group->getMixSrc())); + s += " - "; + if (expo->name[0]) { + s += expo->name; } else { - line->deleteLater(); + s += "#"; + s += std::to_string(group->getLineNumber(index)); } - removeLine(line); - ::deleteExpo(index); + if (confirmationDialog(STR_DELETE_INPUT_LINE, s.c_str())) { + _copyMode = 0; + + group->removeLine(line); + if (group->getLineCount() == 0) { + group->deleteLater(); + removeGroup(group); + } else { + line->deleteLater(); + } + removeLine(line); + + ::deleteExpo(index); + } } void ModelInputsPage::pasteInput(uint8_t dst_idx, uint8_t input) diff --git a/radio/src/gui/colorlcd/model/model_mixes.cpp b/radio/src/gui/colorlcd/model/model_mixes.cpp index b7f21366e..b8e4be123 100644 --- a/radio/src/gui/colorlcd/model/model_mixes.cpp +++ b/radio/src/gui/colorlcd/model/model_mixes.cpp @@ -372,24 +372,36 @@ void ModelMixesPage::insertMix(uint8_t channel, uint8_t index) void ModelMixesPage::deleteMix(uint8_t index) { - _copyMode = 0; - auto group = getGroupByIndex(index); if (!group) return; auto line = getLineByIndex(index); if (!line) return; - ::deleteMix(index); - - group->removeLine(line); - if (group->getLineCount() == 0) { - group->deleteLater(); - removeGroup(group); + auto mix = mixAddress(index); + std::string s(getSourceString(group->getMixSrc())); + s += " - "; + if (mix->name[0]) { + s += mix->name; } else { - line->deleteLater(); + s += "#"; + s += std::to_string(group->getLineNumber(index)); + } + + if (confirmationDialog(STR_DELETE_MIX_LINE, s.c_str())) { + _copyMode = 0; + + ::deleteMix(index); + + group->removeLine(line); + if (group->getLineCount() == 0) { + group->deleteLater(); + removeGroup(group); + } else { + line->deleteLater(); + } + removeLine(line); } - removeLine(line); } void ModelMixesPage::pasteMix(uint8_t dst_idx, uint8_t channel) diff --git a/radio/src/gui/common/stdlcd/model_inputs.cpp b/radio/src/gui/common/stdlcd/model_inputs.cpp index 77b08c342..d6f1a9a8c 100644 --- a/radio/src/gui/common/stdlcd/model_inputs.cpp +++ b/radio/src/gui/common/stdlcd/model_inputs.cpp @@ -141,6 +141,12 @@ void deleteExpo(uint8_t idx) storageDirty(EE_MODEL); } +void onDeleteExpoConfirm(const char * result) +{ + if (result == STR_OK) + deleteExpo(s_currIdx); +} + void onExposMenu(const char * result) { uint8_t chn = expoAddress(s_currIdx)->chn + 1; @@ -163,7 +169,7 @@ void onExposMenu(const char * result) s_copySrcRow = menuVerticalPosition; } else if (result == STR_DELETE) { - deleteExpo(s_currIdx); + POPUP_CONFIRMATION(STR_DELETE_INPUT_LINE, onDeleteExpoConfirm); } } diff --git a/radio/src/gui/common/stdlcd/model_mixes.cpp b/radio/src/gui/common/stdlcd/model_mixes.cpp index 8d0ee2bc1..019c7dbb8 100644 --- a/radio/src/gui/common/stdlcd/model_mixes.cpp +++ b/radio/src/gui/common/stdlcd/model_mixes.cpp @@ -37,6 +37,12 @@ bool reachMixesLimit() return false; } +void onDeleteMixConfirm(const char * result) +{ + if (result == STR_OK) + deleteMix(s_currIdx); +} + void onMixesMenu(const char * result) { uint8_t chn = mixAddress(s_currIdx)->destCh + 1; @@ -59,7 +65,7 @@ void onMixesMenu(const char * result) s_copySrcRow = menuVerticalPosition; } else if (result == STR_DELETE) { - deleteMix(s_currIdx); + POPUP_CONFIRMATION(STR_DELETE_MIX_LINE, onDeleteMixConfirm); } } diff --git a/radio/src/translations/i18n/cn.h b/radio/src/translations/i18n/cn.h index 6d7d9c47e..ce3077e4b 100644 --- a/radio/src/translations/i18n/cn.h +++ b/radio/src/translations/i18n/cn.h @@ -743,6 +743,8 @@ #define TR_DELETE_MODEL "删除模型" #define TR_RESTORE_MODEL "恢复模型" #define TR_DELETE_ERROR "删除失败" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR TR("存储卡错误", "存储卡错误") #define TR_SDCARD "存储卡" #define TR_NO_FILES_ON_SD "存储卡中没有文件!" diff --git a/radio/src/translations/i18n/cz.h b/radio/src/translations/i18n/cz.h index 6e5f057c5..ddc7511fd 100644 --- a/radio/src/translations/i18n/cz.h +++ b/radio/src/translations/i18n/cz.h @@ -742,6 +742,8 @@ #define TR_DELETE_MODEL "Smazat model" #define TR_RESTORE_MODEL "Obnov model z SD karty" #define TR_DELETE_ERROR "Nelze odstranit" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR "Chyba SD karty" #define TR_SDCARD "SD karta" #define TR_NO_FILES_ON_SD "Žádné soubory na SD kartě!" diff --git a/radio/src/translations/i18n/da.h b/radio/src/translations/i18n/da.h index 8e1a58730..7910a5586 100644 --- a/radio/src/translations/i18n/da.h +++ b/radio/src/translations/i18n/da.h @@ -748,6 +748,8 @@ #define TR_DELETE_MODEL "Slet model" #define TR_RESTORE_MODEL "Genskab model" #define TR_DELETE_ERROR "Slet fejl" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR TR("SD fejl", "SD kort fejl") #define TR_SDCARD "SD kort" #define TR_NO_FILES_ON_SD "Ingen filer på SD!" diff --git a/radio/src/translations/i18n/de.h b/radio/src/translations/i18n/de.h index b758737eb..a60fd11d0 100644 --- a/radio/src/translations/i18n/de.h +++ b/radio/src/translations/i18n/de.h @@ -738,6 +738,8 @@ #define TR_DELETE_MODEL "Lösche Modell" // TODO merged into DELETEMODEL? #define TR_RESTORE_MODEL TR("Modell wiederher.", "Modell wiederherstellen") #define TR_DELETE_ERROR "Fehler beim\nLöschen" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR "SD-Kartenfehler" #define TR_SDCARD "SD Card" #define TR_NO_FILES_ON_SD "Keine Dateien auf SD!" diff --git a/radio/src/translations/i18n/en.h b/radio/src/translations/i18n/en.h index f7a28fa3b..c3a40ee4d 100644 --- a/radio/src/translations/i18n/en.h +++ b/radio/src/translations/i18n/en.h @@ -744,6 +744,8 @@ #define TR_DELETE_MODEL "Delete model" #define TR_RESTORE_MODEL "Restore model" #define TR_DELETE_ERROR "Delete error" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR TR("SD error", "SD card error") #define TR_SDCARD "SD Card" #define TR_NO_FILES_ON_SD "No files on SD!" diff --git a/radio/src/translations/i18n/es.h b/radio/src/translations/i18n/es.h index fb3408ea9..762504b5b 100644 --- a/radio/src/translations/i18n/es.h +++ b/radio/src/translations/i18n/es.h @@ -738,6 +738,8 @@ #define TR_DELETE_MODEL "Borrar modelo" #define TR_RESTORE_MODEL "Restaurar modelo" #define TR_DELETE_ERROR "Error de borrado" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR "Error SDCARD" #define TR_SDCARD "SD Card" #define TR_NO_FILES_ON_SD "No files on SD!" diff --git a/radio/src/translations/i18n/fi.h b/radio/src/translations/i18n/fi.h index cbd2e4fb7..396c9d1f9 100644 --- a/radio/src/translations/i18n/fi.h +++ b/radio/src/translations/i18n/fi.h @@ -738,6 +738,8 @@ #define TR_DELETE_MODEL "Delete Model" #define TR_RESTORE_MODEL "Restore Model" #define TR_DELETE_ERROR "Delete error" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR "SDCARD Error" #define TR_SDCARD "SD Card" #define TR_NO_FILES_ON_SD "No files on SD!" diff --git a/radio/src/translations/i18n/fr.h b/radio/src/translations/i18n/fr.h index ddb6e7256..8e67cf52a 100644 --- a/radio/src/translations/i18n/fr.h +++ b/radio/src/translations/i18n/fr.h @@ -742,6 +742,8 @@ #define TR_DELETE_MODEL "Supprimer Modèle" #define TR_RESTORE_MODEL "Restaurer Modèle" #define TR_DELETE_ERROR "Effacement impossible" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR "Erreur carte SD" #define TR_SDCARD "SD Card" #define TR_NO_FILES_ON_SD "Pas de fichiers sur SD!" diff --git a/radio/src/translations/i18n/he.h b/radio/src/translations/i18n/he.h index bb89b3de9..8de11942b 100644 --- a/radio/src/translations/i18n/he.h +++ b/radio/src/translations/i18n/he.h @@ -746,6 +746,8 @@ #define TR_DELETE_MODEL "מחיקת מודל" #define TR_RESTORE_MODEL "שיחזור מודל" #define TR_DELETE_ERROR "שיגאת מחיקה" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR TR("SD תקלת", "תיקיות כרטיס SD") #define TR_SDCARD "SD כרטיס" #define TR_NO_FILES_ON_SD "!SD אין קצבים על" diff --git a/radio/src/translations/i18n/it.h b/radio/src/translations/i18n/it.h index d27f93bba..8ab960989 100644 --- a/radio/src/translations/i18n/it.h +++ b/radio/src/translations/i18n/it.h @@ -743,6 +743,8 @@ #define TR_DELETE_MODEL TR("Elim. Modello", "Elimina Modello") #define TR_RESTORE_MODEL TR("Ripr. Modello", "Ripristina Modello") #define TR_DELETE_ERROR "Errore cancell." +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR TR("Errore SD", "Errore SDCard") #define TR_SDCARD "SD Card" #define TR_NO_FILES_ON_SD "SD senza file!" diff --git a/radio/src/translations/i18n/jp.h b/radio/src/translations/i18n/jp.h index c49c9b210..75625685d 100644 --- a/radio/src/translations/i18n/jp.h +++ b/radio/src/translations/i18n/jp.h @@ -742,6 +742,8 @@ #define TR_DELETE_MODEL "モデル削除" #define TR_RESTORE_MODEL "モデル復元" #define TR_DELETE_ERROR "削除エラー" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR TR("SD error", "SDカードエラー") #define TR_SDCARD "SDカード" #define TR_NO_FILES_ON_SD "SDにファイルがありません!!" diff --git a/radio/src/translations/i18n/ko.h b/radio/src/translations/i18n/ko.h index 314d7acb6..008cfd2b9 100644 --- a/radio/src/translations/i18n/ko.h +++ b/radio/src/translations/i18n/ko.h @@ -772,7 +772,8 @@ #define TR_DELETE_MODEL "모델 삭제" #define TR_RESTORE_MODEL "모델 복원" #define TR_DELETE_ERROR "삭제 오류" - +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR TR("SD 오류", "SD카드 오류") #define TR_SDCARD "SD 카드" #define TR_NO_FILES_ON_SD "SD 카드에 파일 없음!" diff --git a/radio/src/translations/i18n/nl.h b/radio/src/translations/i18n/nl.h index ba3fd08cb..659ea429b 100644 --- a/radio/src/translations/i18n/nl.h +++ b/radio/src/translations/i18n/nl.h @@ -740,6 +740,8 @@ #define TR_DELETE_MODEL "Wis Model" #define TR_RESTORE_MODEL "Model Terugzetten" #define TR_DELETE_ERROR "Fout bij verwijderen" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR "SD-Kaart fout" #define TR_SDCARD "SD Card" #define TR_NO_FILES_ON_SD "No files on SD!" diff --git a/radio/src/translations/i18n/pl.h b/radio/src/translations/i18n/pl.h index 23a25b3f8..fae3216c2 100644 --- a/radio/src/translations/i18n/pl.h +++ b/radio/src/translations/i18n/pl.h @@ -737,6 +737,8 @@ #define TR_DELETE_MODEL "Skasuj model" #define TR_RESTORE_MODEL "Odtwórz model" #define TR_DELETE_ERROR "Błąd kasowania" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR "Błąd karty SD" #define TR_SDCARD "Karta SD" #define TR_NO_FILES_ON_SD "Brak plików na SD!" diff --git a/radio/src/translations/i18n/pt.h b/radio/src/translations/i18n/pt.h index 90cd631e0..3d1970aeb 100644 --- a/radio/src/translations/i18n/pt.h +++ b/radio/src/translations/i18n/pt.h @@ -743,6 +743,8 @@ #define TR_DELETE_MODEL "Apagar Modelo" #define TR_RESTORE_MODEL "Restaura Modelo" #define TR_DELETE_ERROR "Erro ao apagar" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR TR("Erro SD", "Cartao SD erro") #define TR_SDCARD "Cartão SD" #define TR_NO_FILES_ON_SD "Sem aquiv. no SD!" diff --git a/radio/src/translations/i18n/ru.h b/radio/src/translations/i18n/ru.h index a127e736e..694ab2536 100644 --- a/radio/src/translations/i18n/ru.h +++ b/radio/src/translations/i18n/ru.h @@ -745,6 +745,8 @@ #define TR_DELETE_MODEL "Удалить модель" #define TR_RESTORE_MODEL "Восстан модель" #define TR_DELETE_ERROR "Удалить ошибку" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR TR("Ошибка SD карты", "Ошибка SD карты") #define TR_SDCARD "SD карта" #define TR_NO_FILES_ON_SD "Нет данных на SD карте!" diff --git a/radio/src/translations/i18n/se.h b/radio/src/translations/i18n/se.h index 8566030bd..6ff8d2a2a 100644 --- a/radio/src/translations/i18n/se.h +++ b/radio/src/translations/i18n/se.h @@ -743,6 +743,8 @@ #define TR_DELETE_MODEL "Radera modell" #define TR_RESTORE_MODEL "Återställ modell" #define TR_DELETE_ERROR "Raderingsfel" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR "SD-kortfel" #define TR_SDCARD "SD-kort" #define TR_NO_FILES_ON_SD "Inga filer på SD!" diff --git a/radio/src/translations/i18n/tw.h b/radio/src/translations/i18n/tw.h index 17f72aa32..41131da53 100644 --- a/radio/src/translations/i18n/tw.h +++ b/radio/src/translations/i18n/tw.h @@ -740,6 +740,8 @@ #define TR_DELETE_MODEL "刪除模型" #define TR_RESTORE_MODEL "恢復模型" #define TR_DELETE_ERROR "刪除失敗" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR TR("存儲卡錯誤", "存儲卡錯誤") #define TR_SDCARD "存儲卡" #define TR_NO_FILES_ON_SD "存儲卡中沒有文件!" diff --git a/radio/src/translations/i18n/ua.h b/radio/src/translations/i18n/ua.h index 9e75e6e7e..1b25b5b75 100644 --- a/radio/src/translations/i18n/ua.h +++ b/radio/src/translations/i18n/ua.h @@ -744,6 +744,8 @@ #define TR_DELETE_MODEL "Видалити модель" #define TR_RESTORE_MODEL "Відновити модель" #define TR_DELETE_ERROR "Видалити помилку" +#define TR_DELETE_INPUT_LINE "Delete input line" +#define TR_DELETE_MIX_LINE "Delete mix line" #define TR_SDCARD_ERROR TR("помилка SD", "помилка SD карти") #define TR_SDCARD "SD Карта" #define TR_NO_FILES_ON_SD "Немає файлів на SD!" diff --git a/radio/src/translations/sim_string_list.h b/radio/src/translations/sim_string_list.h index 28afe67d5..d986c338b 100644 --- a/radio/src/translations/sim_string_list.h +++ b/radio/src/translations/sim_string_list.h @@ -505,6 +505,8 @@ #define STR_DELETE_ERROR currentLangStrings->STR_DELETE_ERROR #define STR_DELETE_FILE currentLangStrings->STR_DELETE_FILE #define STR_DELETE_MODEL currentLangStrings->STR_DELETE_MODEL +#define STR_DELETE_INPUT_LINE currentLangStrings->STR_DELETE_INPUT_LINE +#define STR_DELETE_MIX_LINE currentLangStrings->STR_DELETE_MIX_LINE #define STR_DELETE currentLangStrings->STR_DELETE #define STR_DELETEMODEL currentLangStrings->STR_DELETEMODEL #define STR_DEVICE_DATA_REFUSED currentLangStrings->STR_DEVICE_DATA_REFUSED diff --git a/radio/src/translations/string_list.h b/radio/src/translations/string_list.h index b84e43a48..5bbbc586e 100644 --- a/radio/src/translations/string_list.h +++ b/radio/src/translations/string_list.h @@ -504,6 +504,8 @@ STR(DELETE_ALL_SENSORS) STR(DELETE_ERROR) STR(DELETE_FILE) STR(DELETE_MODEL) +STR(DELETE_INPUT_LINE) +STR(DELETE_MIX_LINE) STR(DELETE) STR(DELETEMODEL) STR(DEVICE_DATA_REFUSED)