mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-18 21:30:38 +01:00
[apps/shared] Factorize Store/ValuesController::textFieldDidFinishEditing
This commit is contained in:
committed by
Émilie Feral
parent
a400a5024b
commit
5e5e07e963
@@ -31,18 +31,15 @@ bool EditableCellTableViewController::textFieldDidFinishEditing(TextField * text
|
||||
app()->displayWarning(I18n::Message::UndefinedValue);
|
||||
return false;
|
||||
}
|
||||
int nbOfRows = numberOfRows();
|
||||
int nbOfColumns = numberOfColumns();
|
||||
if (!setDataAtLocation(floatBody, selectedColumn(), selectedRow())) {
|
||||
app()->displayWarning(I18n::Message::ForbiddenValue);
|
||||
return false;
|
||||
}
|
||||
for (int j = 0; j < numberOfColumns(); j++) {
|
||||
selectableTableView()->reloadCellAtLocation(j, selectedRow());
|
||||
}
|
||||
if (nbOfRows != numberOfRows() || nbOfColumns != numberOfColumns()) {
|
||||
selectableTableView()->reloadData();
|
||||
}
|
||||
/* 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. */
|
||||
if (event == Ion::Events::EXE || event == Ion::Events::OK) {
|
||||
selectableTableView()->selectCellAtLocation(selectedColumn(), selectedRow()+1);
|
||||
} else {
|
||||
|
||||
@@ -95,25 +95,13 @@ bool StoreController::textFieldDidFinishEditing(TextField * textField, const cha
|
||||
}
|
||||
return true;
|
||||
}
|
||||
AppsContainer * appsContainer = ((TextFieldDelegateApp *)app())->container();
|
||||
Context * globalContext = appsContainer->globalContext();
|
||||
double floatBody = PoincareHelpers::ApproximateToScalar<double>(text, *globalContext);
|
||||
if (std::isnan(floatBody) || std::isinf(floatBody)) {
|
||||
app()->displayWarning(I18n::Message::UndefinedValue);
|
||||
return false;
|
||||
bool didFinishEditing = EditableCellTableViewController::textFieldDidFinishEditing(textField, text, event);
|
||||
if (didFinishEditing) {
|
||||
// FIXME Find out if redrawing errors can be suppressed without always reloading all the data
|
||||
// See Shared::ValuesController::textFieldDidFinishEditing
|
||||
selectableTableView()->reloadData();
|
||||
}
|
||||
if (!setDataAtLocation(floatBody, selectedColumn(), selectedRow())) {
|
||||
app()->displayWarning(I18n::Message::ForbiddenValue);
|
||||
return false;
|
||||
}
|
||||
// FIXME Find out if redrawing errors can be suppressed without always reloading all the data
|
||||
selectableTableView()->reloadData();
|
||||
if (event == Ion::Events::EXE || event == Ion::Events::OK) {
|
||||
selectableTableView()->selectCellAtLocation(selectedColumn(), selectedRow()+1);
|
||||
} else {
|
||||
selectableTableView()->handleEvent(event);
|
||||
}
|
||||
return true;
|
||||
return didFinishEditing;
|
||||
}
|
||||
|
||||
bool StoreController::textFieldDidAbortEditing(TextField * textField) {
|
||||
|
||||
@@ -41,6 +41,24 @@ ValuesController::ValuesController(Responder * parentResponder, InputEventHandle
|
||||
}
|
||||
}
|
||||
|
||||
bool ValuesController::textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) {
|
||||
int row = selectedRow();
|
||||
int nbOfRows = numberOfRows();
|
||||
bool didFinishEditing = EditableCellTableViewController::textFieldDidFinishEditing(textField, text, event);
|
||||
if (didFinishEditing) {
|
||||
if (nbOfRows != numberOfRows()) {
|
||||
// Reload the whole table, if a value is appended.
|
||||
selectableTableView()->reloadData();
|
||||
} else {
|
||||
// Reload the row, if an existing value is edited.
|
||||
for (int i = 0; i < numberOfColumns(); i++) {
|
||||
selectableTableView()->reloadCellAtLocation(i, row);
|
||||
}
|
||||
}
|
||||
}
|
||||
return didFinishEditing;
|
||||
}
|
||||
|
||||
const char * ValuesController::title() {
|
||||
return I18n::translate(I18n::Message::ValuesTab);
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ namespace Shared {
|
||||
class ValuesController : public EditableCellTableViewController, public ButtonRowDelegate, public AlternateEmptyViewDefaultDelegate {
|
||||
public:
|
||||
ValuesController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, I18n::Message parameterTitle, IntervalParameterController * intervalParameterController, Interval * interval);
|
||||
bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override;
|
||||
const char * title() override;
|
||||
Interval * interval();
|
||||
int numberOfColumns() override;
|
||||
|
||||
Reference in New Issue
Block a user