[FormGroup] added removeField() to properly remove fields

This commit is contained in:
Raphael Coeffic
2021-06-19 12:00:52 +02:00
parent d4c23446e5
commit 8a6d288cf6
2 changed files with 24 additions and 1 deletions
+21
View File
@@ -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)
+3 -1
View File
@@ -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)
{