From 0a3692cfacda8eba35d6cc7bfb54ab107d444f9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Fri, 24 Mar 2017 17:33:25 +0100 Subject: [PATCH] [apps/shared] Do not reset the textfield is the data has not been updated (syntax, math error) Change-Id: I53301c2bdf59e03d0c2bcdb56b0da4d86d83bb5e --- apps/calculation/edit_expression_controller.h | 2 +- apps/probability/parameters_controller.cpp | 8 +++++--- apps/regression/go_to_parameter_controller.cpp | 1 - apps/shared/float_parameter_controller.cpp | 5 +---- apps/shared/float_parameter_controller.h | 1 - apps/shared/range_parameter_controller.cpp | 8 +++++--- escher/src/text_field.cpp | 12 ++++++++---- 7 files changed, 20 insertions(+), 17 deletions(-) diff --git a/apps/calculation/edit_expression_controller.h b/apps/calculation/edit_expression_controller.h index f9276cdcc..aa4135288 100644 --- a/apps/calculation/edit_expression_controller.h +++ b/apps/calculation/edit_expression_controller.h @@ -2,10 +2,10 @@ #define CALCULATION_EDIT_EXPRESSION_CONTROLLER_H #include +#include "../shared/text_field_delegate.h" #include "history_controller.h" #include "calculation_store.h" #include "text_field.h" -#include "../shared/text_field_delegate.h" namespace Calculation { class HistoryController; diff --git a/apps/probability/parameters_controller.cpp b/apps/probability/parameters_controller.cpp index 089bf0cb9..438f63988 100644 --- a/apps/probability/parameters_controller.cpp +++ b/apps/probability/parameters_controller.cpp @@ -151,9 +151,11 @@ bool ParametersController::setParameterAtIndex(int parameterIndex, float f) { } bool ParametersController::textFieldDidFinishEditing(TextField * textField, const char * text) { - FloatParameterController::textFieldDidFinishEditing(textField, text); - m_selectableTableView.reloadData(); - return true; + if (FloatParameterController::textFieldDidFinishEditing(textField, text)) { + m_selectableTableView.reloadData(); + return true; + } + return false; } void ParametersController::buttonAction() { diff --git a/apps/regression/go_to_parameter_controller.cpp b/apps/regression/go_to_parameter_controller.cpp index 0e851622f..f0d45e799 100644 --- a/apps/regression/go_to_parameter_controller.cpp +++ b/apps/regression/go_to_parameter_controller.cpp @@ -111,7 +111,6 @@ bool GoToParameterController::textFieldDidFinishEditing(TextField * textField, c void GoToParameterController::viewWillAppear() { m_previousParameter = parameterAtIndex(0); - m_selectableTableView.reloadData(); } void GoToParameterController::buttonAction() { diff --git a/apps/shared/float_parameter_controller.cpp b/apps/shared/float_parameter_controller.cpp index e60ead322..5df6505b7 100644 --- a/apps/shared/float_parameter_controller.cpp +++ b/apps/shared/float_parameter_controller.cpp @@ -24,14 +24,11 @@ View * FloatParameterController::view() { } void FloatParameterController::didBecomeFirstResponder() { + m_selectableTableView.reloadData(); m_selectableTableView.selectCellAtLocation(0, 0); app()->setFirstResponder(&m_selectableTableView); } -void FloatParameterController::viewWillAppear() { - m_selectableTableView.reloadData(); -} - bool FloatParameterController::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::Back) { for (int i = 0; i < numberOfRows()-1; i++) { diff --git a/apps/shared/float_parameter_controller.h b/apps/shared/float_parameter_controller.h index 5d2bf5955..25f2e4139 100644 --- a/apps/shared/float_parameter_controller.h +++ b/apps/shared/float_parameter_controller.h @@ -14,7 +14,6 @@ class FloatParameterController : public ViewController, public ListViewDataSourc public: FloatParameterController(Responder * parentResponder, I18n::Message okButtonText = I18n::Message::Ok); View * view() override; - void viewWillAppear() override; void didBecomeFirstResponder() override; bool handleEvent(Ion::Events::Event event) override; diff --git a/apps/shared/range_parameter_controller.cpp b/apps/shared/range_parameter_controller.cpp index 488e944e6..5222bdcec 100644 --- a/apps/shared/range_parameter_controller.cpp +++ b/apps/shared/range_parameter_controller.cpp @@ -62,9 +62,11 @@ void RangeParameterController::willDisplayCellForIndex(HighlightCell * cell, int } bool RangeParameterController::textFieldDidFinishEditing(TextField * textField, const char * text) { - FloatParameterController::textFieldDidFinishEditing(textField, text); - m_selectableTableView.reloadData(); - return true; + if (FloatParameterController::textFieldDidFinishEditing(textField, text)) { + m_selectableTableView.reloadData(); + return true; + } + return false; } void RangeParameterController::tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY) { diff --git a/escher/src/text_field.cpp b/escher/src/text_field.cpp index c720783f1..1f91561ff 100644 --- a/escher/src/text_field.cpp +++ b/escher/src/text_field.cpp @@ -277,6 +277,8 @@ bool TextField::handleEvent(Ion::Events::Event event) { } if (event == Ion::Events::OK || event == Ion::Events::EXE) { if (isEditing()) { + char bufferText[ContentView::k_maxBufferSize]; + strlcpy(bufferText, m_contentView.textBuffer(), ContentView::k_maxBufferSize); strlcpy(m_contentView.textBuffer(), m_contentView.draftTextBuffer(), m_contentView.bufferSize()); int cursorLoc = cursorLocation(); setEditing(false); @@ -284,11 +286,13 @@ bool TextField::handleEvent(Ion::Events::Event event) { reloadScroll(); return true; } - char buffer[ContentView::k_maxBufferSize]; - strlcpy(buffer, m_contentView.textBuffer(), ContentView::k_maxBufferSize); - setText(""); + /* if the text was refused (textFieldDidFinishEditing returned false, we + * reset the textfield in the same state as before */ + char bufferDraft[ContentView::k_maxBufferSize]; + strlcpy(bufferDraft, m_contentView.textBuffer(), ContentView::k_maxBufferSize); + setText(bufferText); setEditing(true); - setText(buffer); + setText(bufferDraft); setCursorLocation(cursorLoc); return true; }