diff --git a/apps/calculation/edit_expression_controller.cpp b/apps/calculation/edit_expression_controller.cpp index 625d25d51..3bc7054b9 100644 --- a/apps/calculation/edit_expression_controller.cpp +++ b/apps/calculation/edit_expression_controller.cpp @@ -85,10 +85,16 @@ const char * EditExpressionController::textBody() { } void EditExpressionController::insertTextBody(const char * text) { - TextField * tf = ((ContentView *)view())->textField(); - tf->setEditing(true, false); - tf->insertTextAtLocation(text, tf->cursorLocation()); - tf->setCursorLocation(tf->cursorLocation() + strlen(text)); + if (((ContentView *)view())->editionIsInTextField()) { + TextField * tf = ((ContentView *)view())->textField(); + tf->setEditing(true, false); + tf->insertTextAtLocation(text, tf->cursorLocation()); + tf->setCursorLocation(tf->cursorLocation() + strlen(text)); + return; + } + EditableExpressionView * editableExpressionView = ((ContentView *)view())->editableExpressionView(); + editableExpressionView->setEditing(true); + editableExpressionView->insertLayoutFromTextAtCursor(text); } bool EditExpressionController::handleEvent(Ion::Events::Event event) { diff --git a/apps/variable_box_controller.cpp b/apps/variable_box_controller.cpp index 44be6b710..3f14cc49c 100644 --- a/apps/variable_box_controller.cpp +++ b/apps/variable_box_controller.cpp @@ -293,7 +293,7 @@ void VariableBoxController::ContentViewController::insertTextInEditableExpressio if (!editableExpressionView->isEditing()) { editableExpressionView->setEditing(true); } - editableExpressionView->insertTextAtCursor(textToInsert); + editableExpressionView->insertLayoutFromTextAtCursor(textToInsert); } VariableBoxController::VariableBoxController(GlobalContext * context) : diff --git a/escher/include/escher/editable_expression_view.h b/escher/include/escher/editable_expression_view.h index b6473af4a..f4cf92423 100644 --- a/escher/include/escher/editable_expression_view.h +++ b/escher/include/escher/editable_expression_view.h @@ -22,11 +22,8 @@ public: bool editableExpressionViewShouldFinishEditing(Ion::Events::Event event); - /* Callback for MathToolbox */ void insertLayoutAtCursor(Poincare::ExpressionLayout * layout, Poincare::ExpressionLayout * pointedLayout); - - /* Callback for VariableBoxController */ - void insertTextAtCursor(const char * text); + void insertLayoutFromTextAtCursor(const char * text); /* View */ KDSize minimalSizeForOptimalDisplay() const override; diff --git a/escher/src/editable_expression_view.cpp b/escher/src/editable_expression_view.cpp index 8f0ccb5c7..d23cf1097 100644 --- a/escher/src/editable_expression_view.cpp +++ b/escher/src/editable_expression_view.cpp @@ -163,7 +163,15 @@ void EditableExpressionView::insertLayoutAtCursor(Poincare::ExpressionLayout * l } } -void EditableExpressionView::insertTextAtCursor(const char * text) { +void EditableExpressionView::insertLayoutFromTextAtCursor(const char * text) { + Poincare::Expression * expression = Poincare::Expression::parse(text); + if (expression != nullptr) { + Poincare::ExpressionLayout * layout = expression->createLayout(); + delete expression; + insertLayoutAtCursor(layout, layout); + reload(); + return; + } m_expressionViewWithCursor.cursor()->insertText(text); reload(); }