mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[apps/shared/editable_cell_table_view_controller] Factor textFieldDidFinishEditing
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user