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