From bc38d3db4b361c4189d3d063efb0308504c97d94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Thu, 29 Dec 2016 12:10:20 +0100 Subject: [PATCH] [escher] When using input view controller, init the text content to the previous text edited Change-Id: Id201196f38e8f2b6cd909c7e52708f2e84ab8a47 --- apps/graph/list/list_controller.cpp | 8 +++++++- escher/include/escher/input_view_controller.h | 2 +- escher/src/input_view_controller.cpp | 6 +++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/apps/graph/list/list_controller.cpp b/apps/graph/list/list_controller.cpp index 3b0a811af..ea15b1446 100644 --- a/apps/graph/list/list_controller.cpp +++ b/apps/graph/list/list_controller.cpp @@ -120,9 +120,15 @@ void ListController::configureFunction(Function * function) { } void ListController::editExpression(FunctionExpressionView * functionCell, Ion::Events::Event event) { + char * initialText = nullptr; + char initialTextContent[255]; + if (event == Ion::Events::OK) { + strlcpy(initialTextContent, functionCell->function()->text(), sizeof(initialTextContent)); + initialText = initialTextContent; + } App * myApp = (App *)app(); InputViewController * inputController = myApp->inputViewController(); - inputController->edit(this, event, functionCell, + inputController->edit(this, event, functionCell, initialText, [](void * context, void * sender){ FunctionExpressionView * myCell = (FunctionExpressionView *) context; Function * myFunction = myCell->function(); diff --git a/escher/include/escher/input_view_controller.h b/escher/include/escher/input_view_controller.h index 366cdc2e4..7db47374b 100644 --- a/escher/include/escher/input_view_controller.h +++ b/escher/include/escher/input_view_controller.h @@ -10,7 +10,7 @@ class InputViewController : public ModalViewController, TextFieldDelegate { public: InputViewController(Responder * parentResponder, ViewController * child, TextFieldDelegate * textFieldDelegate); const char * title() const override; - void edit(Responder * caller, Ion::Events::Event event, void * context, Invocation::Action successAction, Invocation::Action failureAction); + void edit(Responder * caller, Ion::Events::Event event, void * context, const char * initialText, Invocation::Action successAction, Invocation::Action failureAction); const char * textBody(); bool textFieldDidReceiveEvent(TextField * textField, Ion::Events::Event event) override; bool textFieldDidFinishEditing(TextField * textField, const char * text) override; diff --git a/escher/src/input_view_controller.cpp b/escher/src/input_view_controller.cpp index 0258010ed..efe57a296 100644 --- a/escher/src/input_view_controller.cpp +++ b/escher/src/input_view_controller.cpp @@ -38,10 +38,14 @@ const char * InputViewController::textBody() { return m_textFieldController.textField()->text(); } -void InputViewController::edit(Responder * caller, Ion::Events::Event event, void * context, Invocation::Action successAction, Invocation::Action failureAction) { +void InputViewController::edit(Responder * caller, Ion::Events::Event event, void * context, const char * initialText, Invocation::Action successAction, Invocation::Action failureAction) { m_successAction = Invocation(successAction, context); m_failureAction = Invocation(failureAction, context); m_textFieldController.textField()->handleEvent(event); + if (initialText != nullptr) { + m_textFieldController.textField()->insertTextAtLocation(initialText, 0); + m_textFieldController.textField()->setCursorLocation(strlen(initialText)); + } displayModalViewController(&m_textFieldController, 1.0f, 1.0f); }