diff --git a/radio/src/thirdparty/libopenui/src/form.cpp b/radio/src/thirdparty/libopenui/src/form.cpp index cff139eae..4e49eaced 100644 --- a/radio/src/thirdparty/libopenui/src/form.cpp +++ b/radio/src/thirdparty/libopenui/src/form.cpp @@ -103,6 +103,27 @@ void FormField::paint(BitmapBuffer * dc) } } +void FormGroup::removeField(FormField * field) +{ + FormField* prev = field->getPreviousField(); + FormField* next = field->getNextField(); + + if (prev) { prev->setNextField(next); } + if (next) { next->setPreviousField(prev); } + + if (first == field) { + if (prev && (prev != field)) first = prev; + else if (next && (next != field)) first = next; + else first = nullptr; + } + + if (last == field) { + if (next && (next != field)) last = next; + else if (prev && (prev != field)) last = prev; + else last = nullptr; + } +} + void FormGroup::addField(FormField * field, bool front) { if (field->getWindowFlags() & FORM_DETACHED) diff --git a/radio/src/thirdparty/libopenui/src/form.h b/radio/src/thirdparty/libopenui/src/form.h index 8bbf4e517..5faceea0c 100644 --- a/radio/src/thirdparty/libopenui/src/form.h +++ b/radio/src/thirdparty/libopenui/src/form.h @@ -133,7 +133,9 @@ class FormGroup: public FormField void setFocus(uint8_t flag = SET_FOCUS_DEFAULT, Window * from = nullptr) override; - virtual void addField(FormField * field, bool front = false); // NOLINT(google-default-arguments) + virtual void addField(FormField * field, bool front = false); + + virtual void removeField(FormField * field); void setFirstField(FormField * field) {