[apps/calculation] Handle "ans" event in EditableExpressionView.

Change-Id: I7761f36b5a94bb5c8190cd5b238542280666c256
This commit is contained in:
Léa Saviot
2018-01-16 15:17:42 +01:00
parent 91c05b3bb7
commit 53556ffacf
6 changed files with 55 additions and 7 deletions

View File

@@ -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\

View File

@@ -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();
}

View File

@@ -2,6 +2,7 @@
#define CALCULATION_EDIT_EXPRESSION_CONTROLLER_H
#include <escher.h>
#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 {

View File

@@ -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));
}
}

View File

@@ -0,0 +1,16 @@
#ifndef CALCULATION_EDITABLE_EXPRESSION_VIEW_H
#define CALCULATION_EDITABLE_EXPRESSION_VIEW_H
#include <escher.h>
namespace Calculation {
class EditableExpressionView : public ::EditableExpressionView {
using ::EditableExpressionView::EditableExpressionView;
protected:
bool privateHandleEvent(Ion::Events::Event event) override;
};
}
#endif

View File

@@ -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;
};