From 82ce6d0240f96950b3e96c1599ac9821a6a0d485 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Fri, 14 Oct 2022 04:01:18 +0200 Subject: [PATCH] fix(color): copy/paste inputs/mixers (#2545) Fixes #2541 --- radio/src/gui/colorlcd/model_inputs.cpp | 47 ++++++++++++----------- radio/src/gui/colorlcd/model_mixes.cpp | 51 +++++++++++++------------ 2 files changed, 51 insertions(+), 47 deletions(-) diff --git a/radio/src/gui/colorlcd/model_inputs.cpp b/radio/src/gui/colorlcd/model_inputs.cpp index 5bfe283bf..282287f61 100644 --- a/radio/src/gui/colorlcd/model_inputs.cpp +++ b/radio/src/gui/colorlcd/model_inputs.cpp @@ -253,44 +253,38 @@ InputMixButton* ModelInputsPage::createLineButton(InputMixGroup *group, menu->addLine(STR_EDIT, [=]() { uint8_t idx = button->getIndex(); editInput(input, idx); - _copyMode = 0; }); if (!reachExposLimit()) { - menu->addLine(STR_INSERT_BEFORE, [=]() { - uint8_t idx = button->getIndex(); - insertInput(input, idx); - _copyMode = 0; - }); - menu->addLine(STR_INSERT_AFTER, [=]() { - uint8_t idx = button->getIndex(); - insertInput(input, idx + 1); - _copyMode = 0; - }); - menu->addLine(STR_COPY, [=]() { - _copyMode = COPY_MODE; - _copySrc = button; - }); - if (_copyMode != 0) { + if (this->_copyMode != 0) { menu->addLine(STR_PASTE_BEFORE, [=]() { uint8_t idx = button->getIndex(); pasteInputBefore(idx); - _copyMode = 0; }); menu->addLine(STR_PASTE_AFTER, [=]() { uint8_t idx = button->getIndex(); pasteInputAfter(idx); - _copyMode = 0; }); } + menu->addLine(STR_INSERT_BEFORE, [=]() { + uint8_t idx = button->getIndex(); + insertInput(input, idx); + }); + menu->addLine(STR_INSERT_AFTER, [=]() { + uint8_t idx = button->getIndex(); + insertInput(input, idx + 1); + }); + menu->addLine(STR_COPY, [=]() { + this->_copyMode = COPY_MODE; + this->_copySrc = button; + }); + menu->addLine(STR_MOVE, [=]() { + this->_copyMode = MOVE_MODE; + this->_copySrc = button; + }); } - menu->addLine(STR_MOVE, [=]() { - _copyMode = MOVE_MODE; - _copySrc = button; - }); menu->addLine(STR_DELETE, [=]() { uint8_t idx = button->getIndex(); deleteInput(idx); - _copyMode = 0; }); return 0; }); @@ -356,6 +350,8 @@ void ModelInputsPage::addLineButton(mixsrc_t src, uint8_t index) void ModelInputsPage::editInput(uint8_t input, uint8_t index) { + _copyMode = 0; + auto group = getGroupBySrc(MIXSRC_FIRST_INPUT + input); if (!group) return; @@ -380,6 +376,8 @@ void ModelInputsPage::insertInput(uint8_t input, uint8_t index) void ModelInputsPage::deleteInput(uint8_t index) { + _copyMode = 0; + auto group = getGroupByIndex(index); if (!group) return; @@ -408,8 +406,11 @@ void ModelInputsPage::pasteInput(uint8_t dst_idx, uint8_t input) addLineButton(dst_idx); if (_copyMode == MOVE_MODE) { + src_idx = _copySrc->getIndex(); deleteInput(src_idx); } + + _copyMode = 0; } static int _inputChnFromIndex(uint8_t index) diff --git a/radio/src/gui/colorlcd/model_mixes.cpp b/radio/src/gui/colorlcd/model_mixes.cpp index 6a87e15d3..8e67defc1 100644 --- a/radio/src/gui/colorlcd/model_mixes.cpp +++ b/radio/src/gui/colorlcd/model_mixes.cpp @@ -342,44 +342,38 @@ InputMixButton* ModelMixesPage::createLineButton(InputMixGroup *group, uint8_t i menu->addLine(STR_EDIT, [=]() { uint8_t idx = button->getIndex(); editMix(ch, idx); - _copyMode = 0; }); if (!reachMixesLimit()) { - menu->addLine(STR_INSERT_BEFORE, [=]() { - uint8_t idx = button->getIndex(); - insertMix(ch, idx); - _copyMode = 0; - }); - menu->addLine(STR_INSERT_AFTER, [=]() { - uint8_t idx = button->getIndex(); - insertMix(ch, idx + 1); - _copyMode = 0; - }); - menu->addLine(STR_COPY, [=]() { - _copyMode = COPY_MODE; - _copySrc = button; - }); - if (_copyMode != 0) { + if (this->_copyMode != 0) { menu->addLine(STR_PASTE_BEFORE, [=]() { uint8_t idx = button->getIndex(); pasteMixBefore(idx); - _copyMode = 0; }); menu->addLine(STR_PASTE_AFTER, [=]() { uint8_t idx = button->getIndex(); pasteMixAfter(idx); - _copyMode = 0; }); } + menu->addLine(STR_INSERT_BEFORE, [=]() { + uint8_t idx = button->getIndex(); + insertMix(ch, idx); + }); + menu->addLine(STR_INSERT_AFTER, [=]() { + uint8_t idx = button->getIndex(); + insertMix(ch, idx + 1); + }); + menu->addLine(STR_COPY, [=]() { + this->_copyMode = COPY_MODE; + this->_copySrc = button; + }); + menu->addLine(STR_MOVE, [=]() { + this->_copyMode = MOVE_MODE; + this->_copySrc = button; + }); } - menu->addLine(STR_MOVE, [=]() { - _copyMode = MOVE_MODE; - _copySrc = button; - }); menu->addLine(STR_DELETE, [=]() { uint8_t idx = button->getIndex(); deleteMix(idx); - _copyMode = 0; }); return 0; }); @@ -429,6 +423,8 @@ void ModelMixesPage::newMix() void ModelMixesPage::editMix(uint8_t channel, uint8_t index) { + _copyMode = 0; + auto line = getLineByIndex(index); if (!line) return; @@ -446,6 +442,8 @@ void ModelMixesPage::editMix(uint8_t channel, uint8_t index) void ModelMixesPage::insertMix(uint8_t channel, uint8_t index) { + _copyMode = 0; + ::insertMix(index, channel); addLineButton(MIXSRC_CH1 + channel, index); editMix(channel, index); @@ -453,6 +451,8 @@ void ModelMixesPage::insertMix(uint8_t channel, uint8_t index) void ModelMixesPage::deleteMix(uint8_t index) { + _copyMode = 0; + auto group = getGroupByIndex(index); if (!group) return; @@ -481,8 +481,11 @@ void ModelMixesPage::pasteMix(uint8_t dst_idx, uint8_t channel) addLineButton(dst_idx); if (_copyMode == MOVE_MODE) { - deleteInput(src_idx); + src_idx = _copySrc->getIndex(); + deleteMix(src_idx); } + + _copyMode = 0; } static int _mixChnFromIndex(uint8_t index)