feat(firmware): add confirmation popup when deleting input or mix lines (#7111)

This commit is contained in:
philmoz
2026-02-20 13:48:26 +10:00
committed by GitHub
parent fe942df5f8
commit bcb154c0e2
27 changed files with 114 additions and 23 deletions
@@ -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(
@@ -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);
+22 -10
View File
@@ -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)
+22 -10
View File
@@ -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)
+7 -1
View File
@@ -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);
}
}
+7 -1
View File
@@ -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);
}
}
+2
View File
@@ -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 "存储卡中没有文件!"
+2
View File
@@ -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ě!"
+2
View File
@@ -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!"
+2
View File
@@ -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!"
+2
View File
@@ -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!"
+2
View File
@@ -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!"
+2
View File
@@ -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!"
+2
View File
@@ -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!"
+2
View File
@@ -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 אין קצבים על"
+2
View File
@@ -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!"
+2
View File
@@ -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にファイルがありません!!"
+2 -1
View File
@@ -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 카드에 파일 없음!"
+2
View File
@@ -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!"
+2
View File
@@ -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!"
+2
View File
@@ -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!"
+2
View File
@@ -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 карте!"
+2
View File
@@ -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!"
+2
View File
@@ -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 "存儲卡中沒有文件!"
+2
View File
@@ -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!"
+2
View File
@@ -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
+2
View File
@@ -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)