[apps/shared/editable_cell_table_view_controller] Factor textFieldDidFinishEditing

This commit is contained in:
Ruben Dashyan
2019-08-22 10:30:43 +02:00
parent d8cac0e95f
commit 2e5ded2aa9
4 changed files with 15 additions and 29 deletions

View File

@@ -28,20 +28,31 @@ bool EditableCellTableViewController::textFieldDidFinishEditing(TextField * text
if (textFieldDelegateApp()->hasUndefinedValue(text, floatBody)) {
return false;
}
// Save attributes for later use
int column = selectedColumn();
int previousRow = selectedRow();
int previousNumberOfElementsInColumn = numberOfElementsInColumn(column);
if (!setDataAtLocation(floatBody, selectedColumn(), selectedRow())) {
Container::activeApp()->displayWarning(I18n::Message::ForbiddenValue);
return false;
}
/* At this point, a new cell is selected depending on the event, before the
* data is reloaded, which means that the right cell is selected but the data
* may be incorrect. The data is reloaded afterwards by the
* textFieldDidFinishEditing methods of the derived classes StoreController
* and ValuesController. */
* may be incorrect. The data is reloaded afterwards. */
if (event == Ion::Events::EXE || event == Ion::Events::OK) {
selectableTableView()->selectCellAtLocation(selectedColumn(), selectedRow()+1);
} else {
selectableTableView()->handleEvent(event);
}
if (previousNumberOfElementsInColumn != numberOfElementsInColumn(column)) {
// Reload the whole table, if a value was appended.
selectableTableView()->reloadData();
} else {
// Reload the row, if an existing value was edited.
for (int i = 0; i < numberOfColumns(); i++) {
selectableTableView()->reloadCellAtLocation(i, previousRow);
}
}
return true;
}