feat(firmware): add confirmation popup when deleting input or mix lines (#7111)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user