From 32d48fb94b56db72196b3f5eddfb13cf4e0f0241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Wed, 10 May 2017 13:24:47 +0200 Subject: [PATCH] [apps/sequence][apps/graph] fix behaviour when deleting functions Change-Id: Ieccc85887fa0077446aaf57fee105b7fd2f3bff9 --- apps/sequence/sequence.cpp | 11 +++++++++++ apps/sequence/sequence.h | 1 + apps/shared/function.cpp | 4 ++++ apps/shared/function.h | 1 + apps/shared/list_controller.cpp | 2 +- 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/apps/sequence/sequence.cpp b/apps/sequence/sequence.cpp index d5f6cd2af..00805da3f 100644 --- a/apps/sequence/sequence.cpp +++ b/apps/sequence/sequence.cpp @@ -223,6 +223,17 @@ bool Sequence::isDefined() { } } +bool Sequence::isEmpty() { + switch (m_type) { + case Type::Explicite: + return Function::isEmpty(); + case Type::SingleRecurrence: + return Function::isEmpty() && strlen(m_firstInitialConditionText) == 0; + default: + return Function::isEmpty() && strlen(m_firstInitialConditionText) == 0 && strlen(m_secondInitialConditionText) == 0; + } +} + float Sequence::evaluateAtAbscissa(float x, Poincare::Context * context) const { float n = roundf(x); switch (m_type) { diff --git a/apps/sequence/sequence.h b/apps/sequence/sequence.h index e69b92b46..6b39f836c 100644 --- a/apps/sequence/sequence.h +++ b/apps/sequence/sequence.h @@ -35,6 +35,7 @@ public: Poincare::ExpressionLayout * firstInitialConditionName(); Poincare::ExpressionLayout * secondInitialConditionName(); bool isDefined() override; + bool isEmpty() override; float evaluateAtAbscissa(float x, Poincare::Context * context) const override; float sumOfTermsBetweenAbscissa(float start, float end, Poincare::Context * context); private: diff --git a/apps/shared/function.cpp b/apps/shared/function.cpp index 6b84b1114..e5251f83d 100644 --- a/apps/shared/function.cpp +++ b/apps/shared/function.cpp @@ -83,6 +83,10 @@ void Function::setActive(bool active) { m_active = active; } +bool Function::isEmpty() { + return strlen(m_text) == 0; +} + float Function::evaluateAtAbscissa(float x, Poincare::Context * context) const { Poincare::VariableContext variableContext = Poincare::VariableContext(symbol(), context); Poincare::Symbol xSymbol = Poincare::Symbol(symbol()); diff --git a/apps/shared/function.h b/apps/shared/function.h index c7b6e0a37..67abb12b0 100644 --- a/apps/shared/function.h +++ b/apps/shared/function.h @@ -23,6 +23,7 @@ public: virtual bool isDefined(); bool isActive(); void setActive(bool active); + virtual bool isEmpty(); virtual void setContent(const char * c); void setColor(KDColor m_color); virtual float evaluateAtAbscissa(float x, Poincare::Context * context) const; diff --git a/apps/shared/list_controller.cpp b/apps/shared/list_controller.cpp index 4aa13bf03..e5af7d275 100644 --- a/apps/shared/list_controller.cpp +++ b/apps/shared/list_controller.cpp @@ -208,7 +208,7 @@ bool ListController::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::Backspace && selectedRow() >= 0 && (selectedRow() < numberOfRows() - 1 || m_functionStore->numberOfFunctions() == m_functionStore->maxNumberOfFunctions())) { Shared::Function * function = m_functionStore->functionAtIndex(functionIndexForRow(selectedRow())); - if (selectedColumn() == 1) { + if (selectedColumn() == 1 && !function->isEmpty()) { reinitExpression(function); } else { removeFunctionRow(function);