From 0ae7c8a723f32c46231f7edb0d3b14e51ee34484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Mon, 23 Apr 2018 17:16:26 +0200 Subject: [PATCH] [xnt] Insert the right XNT char. Change-Id: Ibc91a2ece310313fb368a68483c5a1b6fe14aad2 --- apps/shared/expression_field_delegate_app.cpp | 15 +++++++++++++++ apps/shared/expression_field_delegate_app.h | 1 + escher/include/escher/expression_layout_field.h | 1 + escher/src/expression_layout_field.cpp | 8 ++++---- poincare/src/layout/expression_layout.cpp | 3 ++- poincare/src/layout/integral_layout.h | 1 + poincare/src/layout/sequence_layout.cpp | 4 ---- poincare/src/layout/sequence_layout.h | 2 +- 8 files changed, 25 insertions(+), 10 deletions(-) diff --git a/apps/shared/expression_field_delegate_app.cpp b/apps/shared/expression_field_delegate_app.cpp index d3474691a..1854ffbe7 100644 --- a/apps/shared/expression_field_delegate_app.cpp +++ b/apps/shared/expression_field_delegate_app.cpp @@ -12,6 +12,14 @@ ExpressionFieldDelegateApp::ExpressionFieldDelegateApp(Container * container, Sn { } +char ExpressionFieldDelegateApp::privateXNT(ExpressionLayoutField * expressionLayoutField) { + char xntCharFromLayout = expressionLayoutField->XNTChar(); + if (xntCharFromLayout != Ion::Charset::Empty) { + return xntCharFromLayout; + } + return XNT()[0]; +} + bool ExpressionFieldDelegateApp::expressionLayoutFieldShouldFinishEditing(ExpressionLayoutField * expressionLayoutField, Ion::Events::Event event) { return event == Ion::Events::OK || event == Ion::Events::EXE; } @@ -44,6 +52,13 @@ bool ExpressionFieldDelegateApp::expressionLayoutFieldDidReceiveEvent(Expression expressionLayoutField->app()->displayModalViewController(variableBoxController, 0.f, 0.f, Metric::PopUpTopMargin, Metric::PopUpLeftMargin, 0, Metric::PopUpRightMargin); return true; } + if (event == Ion::Events::XNT) { + if (!expressionLayoutField->isEditing()) { + expressionLayoutField->setEditing(true); + } + const char xnt[2] = {privateXNT(expressionLayoutField), 0}; + return expressionLayoutField->handleEventWithText(xnt); + } return false; } diff --git a/apps/shared/expression_field_delegate_app.h b/apps/shared/expression_field_delegate_app.h index 4e8b0e2bc..264492a87 100644 --- a/apps/shared/expression_field_delegate_app.h +++ b/apps/shared/expression_field_delegate_app.h @@ -13,6 +13,7 @@ public: virtual bool expressionLayoutFieldDidReceiveEvent(ExpressionLayoutField * expressionLayoutField, Ion::Events::Event event) override; Toolbox * toolboxForExpressionLayoutField(ExpressionLayoutField * expressionLayoutField) override; protected: + char privateXNT(ExpressionLayoutField * expressionLayoutField); ExpressionFieldDelegateApp(Container * container, Snapshot * snapshot, ViewController * rootViewController); }; diff --git a/escher/include/escher/expression_layout_field.h b/escher/include/escher/expression_layout_field.h index 48e01d365..ab86ef184 100644 --- a/escher/include/escher/expression_layout_field.h +++ b/escher/include/escher/expression_layout_field.h @@ -22,6 +22,7 @@ public: void writeTextInBuffer(char * buffer, int bufferLength); bool handleEventWithText(const char * text, bool indentation = false); Poincare::ExpressionLayout * expressionLayout(); + char XNTChar(); /* Responder */ Toolbox * toolbox() override; diff --git a/escher/src/expression_layout_field.cpp b/escher/src/expression_layout_field.cpp index e6d6f5e87..48a7543cb 100644 --- a/escher/src/expression_layout_field.cpp +++ b/escher/src/expression_layout_field.cpp @@ -139,10 +139,6 @@ bool ExpressionLayoutField::privateHandleEvent(Ion::Events::Event event) { m_contentView.cursor()->addFractionLayoutAndCollapseSiblings(); return true; } - if (event == Ion::Events::XNT) { - m_contentView.cursor()->addXNTCharLayout(); - return true; - } if (event == Ion::Events::Exp) { m_contentView.cursor()->addEmptyExponentialLayout(); return true; @@ -297,3 +293,7 @@ bool ExpressionLayoutField::handleEventWithText(const char * text, bool indentat Poincare::ExpressionLayout * ExpressionLayoutField::expressionLayout() { return m_contentView.expressionView()->expressionLayout(); } + +char ExpressionLayoutField::XNTChar() { + return m_contentView.cursor()->pointedExpressionLayout()->XNTChar(); +} diff --git a/poincare/src/layout/expression_layout.cpp b/poincare/src/layout/expression_layout.cpp index abf881acd..45926669d 100644 --- a/poincare/src/layout/expression_layout.cpp +++ b/poincare/src/layout/expression_layout.cpp @@ -6,6 +6,7 @@ #include #include #include +#include namespace Poincare { @@ -236,7 +237,7 @@ void ExpressionLayout::deleteBeforeCursor(ExpressionLayoutCursor * cursor) { char ExpressionLayout::XNTChar() const { if (m_parent == nullptr) { - return 'x'; + return Ion::Charset::Empty; } return m_parent->XNTChar(); } diff --git a/poincare/src/layout/integral_layout.h b/poincare/src/layout/integral_layout.h index 1c1b8efd3..ca2333dca 100644 --- a/poincare/src/layout/integral_layout.h +++ b/poincare/src/layout/integral_layout.h @@ -27,6 +27,7 @@ public: /* Other */ ExpressionLayout * layoutToPointWhenInserting() override; + char XNTChar() const override { return 'x'; } protected: void render(KDContext * ctx, KDPoint p, KDColor expressionColor, KDColor backgroundColor) override; KDSize computeSize() override; diff --git a/poincare/src/layout/sequence_layout.cpp b/poincare/src/layout/sequence_layout.cpp index 53d2df118..0f6bc85eb 100644 --- a/poincare/src/layout/sequence_layout.cpp +++ b/poincare/src/layout/sequence_layout.cpp @@ -118,10 +118,6 @@ ExpressionLayout * SequenceLayout::layoutToPointWhenInserting() { return lowerBoundLayout(); } -char SequenceLayout::XNTChar() const { - return 'n'; -} - int SequenceLayout::writeDerivedClassInBuffer(const char * operatorName, char * buffer, int bufferSize, int numberOfSignificantDigits) const { assert(operatorName != nullptr); if (bufferSize == 0) { diff --git a/poincare/src/layout/sequence_layout.h b/poincare/src/layout/sequence_layout.h index 934d1378a..327e97d49 100644 --- a/poincare/src/layout/sequence_layout.h +++ b/poincare/src/layout/sequence_layout.h @@ -16,7 +16,7 @@ public: ExpressionLayoutCursor cursorAbove(ExpressionLayoutCursor * cursor, bool * shouldRecomputeLayout, bool equivalentPositionVisited = false) override; ExpressionLayoutCursor cursorUnder(ExpressionLayoutCursor * cursor, bool * shouldRecomputeLayout, bool equivalentPositionVisited = false) override; ExpressionLayout * layoutToPointWhenInserting() override; - char XNTChar() const override; + char XNTChar() const override { return 'n'; } protected: constexpr static KDCoordinate k_boundHeightMargin = 2; constexpr static KDCoordinate k_argumentWidthMargin = 2;