From 53556ffacff9639af61b02c2248d76c010defe66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Tue, 16 Jan 2018 15:17:42 +0100 Subject: [PATCH] [apps/calculation] Handle "ans" event in EditableExpressionView. Change-Id: I7761f36b5a94bb5c8190cd5b238542280666c256 --- apps/calculation/Makefile | 1 + .../edit_expression_controller.cpp | 2 +- apps/calculation/edit_expression_controller.h | 9 +++--- apps/calculation/editable_expression_view.cpp | 29 +++++++++++++++++++ apps/calculation/editable_expression_view.h | 16 ++++++++++ .../include/escher/editable_expression_view.h | 5 ++-- 6 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 apps/calculation/editable_expression_view.cpp create mode 100644 apps/calculation/editable_expression_view.h diff --git a/apps/calculation/Makefile b/apps/calculation/Makefile index c25380236..420391945 100644 --- a/apps/calculation/Makefile +++ b/apps/calculation/Makefile @@ -5,6 +5,7 @@ app_objs += $(addprefix apps/calculation/,\ app.o\ calculation.o\ calculation_store.o\ + editable_expression_view.o\ edit_expression_controller.o\ history_view_cell.o\ history_controller.o\ diff --git a/apps/calculation/edit_expression_controller.cpp b/apps/calculation/edit_expression_controller.cpp index 90d8cd36d..44b118046 100644 --- a/apps/calculation/edit_expression_controller.cpp +++ b/apps/calculation/edit_expression_controller.cpp @@ -175,7 +175,7 @@ bool EditExpressionController::editableExpressionViewDidAbortEditing(::EditableE return false; } -void EditExpressionController::editableExpressionViewDidChangeSize(EditableExpressionView * editableExpressionView) { +void EditExpressionController::editableExpressionViewDidChangeSize(::EditableExpressionView * editableExpressionView) { assert(editableExpressionView == ((ContentView *)view())->editableExpressionView()); reloadView(); } diff --git a/apps/calculation/edit_expression_controller.h b/apps/calculation/edit_expression_controller.h index b9c8f4514..bf26f73e8 100644 --- a/apps/calculation/edit_expression_controller.h +++ b/apps/calculation/edit_expression_controller.h @@ -2,6 +2,7 @@ #define CALCULATION_EDIT_EXPRESSION_CONTROLLER_H #include +#include "editable_expression_view.h" #include "../shared/text_field_delegate.h" #include "../shared/editable_expression_view_delegate.h" #include "history_controller.h" @@ -27,10 +28,10 @@ public: bool textFieldDidAbortEditing(::TextField * textField, const char * text) override; /* EditableExpressionViewDelegate */ - bool editableExpressionViewDidReceiveEvent(EditableExpressionView * editableExpressionView, Ion::Events::Event event) override; - bool editableExpressionViewDidFinishEditing(EditableExpressionView * editableExpressionView, const char * text, Ion::Events::Event event) override; - bool editableExpressionViewDidAbortEditing(EditableExpressionView * editableExpressionView, const char * text) override; - void editableExpressionViewDidChangeSize(EditableExpressionView * editableExpressionView) override; + bool editableExpressionViewDidReceiveEvent(::EditableExpressionView * editableExpressionView, Ion::Events::Event event) override; + bool editableExpressionViewDidFinishEditing(::EditableExpressionView * editableExpressionView, const char * text, Ion::Events::Event event) override; + bool editableExpressionViewDidAbortEditing(::EditableExpressionView * editableExpressionView, const char * text) override; + void editableExpressionViewDidChangeSize(::EditableExpressionView * editableExpressionView) override; private: class ContentView : public View { diff --git a/apps/calculation/editable_expression_view.cpp b/apps/calculation/editable_expression_view.cpp new file mode 100644 index 000000000..fd1d30e8a --- /dev/null +++ b/apps/calculation/editable_expression_view.cpp @@ -0,0 +1,29 @@ +#include "editable_expression_view.h" + +namespace Calculation { + +bool EditableExpressionView::privateHandleEvent(Ion::Events::Event event) { + if (event == Ion::Events::Back) { + return false; + } + if (event == Ion::Events::Ans) { + m_expressionViewWithCursor.cursor()->insertText("ans"); + return true; + } + Poincare::ExpressionLayout * layout = m_expressionViewWithCursor.expressionView()->expressionLayout(); + bool layoutIsEmpty = layout->isEmpty() + || (layout->isHorizontal() + && layout->numberOfChildren() == 0); + if (isEditing() && layoutIsEmpty && + (event == Ion::Events::Multiplication || + event == Ion::Events::Plus || + event == Ion::Events::Power || + event == Ion::Events::Square || + event == Ion::Events::Division || + event == Ion::Events::Sto)) { + m_expressionViewWithCursor.cursor()->insertText("ans"); + } + return(::EditableExpressionView::privateHandleEvent(event)); +} + +} diff --git a/apps/calculation/editable_expression_view.h b/apps/calculation/editable_expression_view.h new file mode 100644 index 000000000..204328434 --- /dev/null +++ b/apps/calculation/editable_expression_view.h @@ -0,0 +1,16 @@ +#ifndef CALCULATION_EDITABLE_EXPRESSION_VIEW_H +#define CALCULATION_EDITABLE_EXPRESSION_VIEW_H + +#include + +namespace Calculation { + +class EditableExpressionView : public ::EditableExpressionView { + using ::EditableExpressionView::EditableExpressionView; +protected: + bool privateHandleEvent(Ion::Events::Event event) override; +}; + +} + +#endif diff --git a/escher/include/escher/editable_expression_view.h b/escher/include/escher/editable_expression_view.h index 8041440ce..456535f0a 100644 --- a/escher/include/escher/editable_expression_view.h +++ b/escher/include/escher/editable_expression_view.h @@ -28,9 +28,10 @@ public: /* View */ KDSize minimalSizeForOptimalDisplay() const override; -private: - bool privateHandleEvent(Ion::Events::Event event); +protected: + virtual bool privateHandleEvent(Ion::Events::Event event); ExpressionViewWithCursor m_expressionViewWithCursor; +private: EditableExpressionViewDelegate * m_delegate; };