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);
}
}