From 3705ce4f9254a429fa5ab91139a892bfc379c810 Mon Sep 17 00:00:00 2001 From: Hugo Saint-Vignes Date: Fri, 9 Oct 2020 16:00:26 +0200 Subject: [PATCH] [apps/graph] Add discard confirmation on domain parameters Change-Id: I61043aa195f10038bbcfb6c091f08e684db20849 --- .../list/domain_parameter_controller.cpp | 22 ++++++++++++++----- apps/graph/list/domain_parameter_controller.h | 4 ++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/apps/graph/list/domain_parameter_controller.cpp b/apps/graph/list/domain_parameter_controller.cpp index b4c70627c..25a927704 100644 --- a/apps/graph/list/domain_parameter_controller.cpp +++ b/apps/graph/list/domain_parameter_controller.cpp @@ -11,7 +11,12 @@ DomainParameterController::DomainParameterController(Responder * parentResponder FloatParameterController(parentResponder), m_domainCells{}, m_record(), - m_tempDomain() + m_tempDomain(), + m_confirmPopUpController(Invocation([](void * context, void * sender) { + Container::activeApp()->dismissModalViewController(); + ((DomainParameterController *)context)->stackController()->pop(); + return true; + }, this)) { for (int i = 0; i < k_totalNumberOfCell; i++) { m_domainCells[i].setParentResponder(&m_selectableTableView); @@ -65,6 +70,11 @@ bool DomainParameterController::handleEvent(Ion::Events::Event event) { stackController()->pop(); return true; } + if (event == Ion::Events::Back && !equalTempParameters()) { + // Open pop-up to confirm discarding values + Container::activeApp()->displayModalViewController(&m_confirmPopUpController, 0.f, 0.f, Metric::ExamPopUpTopMargin, Metric::PopUpRightMargin, Metric::ExamPopUpBottomMargin, Metric::PopUpLeftMargin); + return true; + } return false; } @@ -80,8 +90,7 @@ void DomainParameterController::extractParameters() { * parameters are valid (tMax>tMin), and final tMin value is already set. * Same happens in confirmParameters when setting function's parameters from * valid m_tempDomain parameters. */ - assert(function()->tMin() == m_tempDomain.min()); - assert(function()->tMax() == m_tempDomain.max()); + assert(equalTempParameters()); } bool DomainParameterController::setParameterAtIndex(int parameterIndex, float f) { @@ -95,8 +104,11 @@ void DomainParameterController::confirmParameters() { function()->setTMin(parameterAtIndex(0)); function()->setTMax(parameterAtIndex(1)); // See comment on Range1D initialization in extractParameters - assert(function()->tMin() == m_tempDomain.min()); - assert(function()->tMax() == m_tempDomain.max()); + assert(equalTempParameters()); +} + +bool DomainParameterController::equalTempParameters() { + return function()->tMin() == m_tempDomain.min() && function()->tMax() == m_tempDomain.max(); } void DomainParameterController::buttonAction() { diff --git a/apps/graph/list/domain_parameter_controller.h b/apps/graph/list/domain_parameter_controller.h index 5efe1c193..00f876c0e 100644 --- a/apps/graph/list/domain_parameter_controller.h +++ b/apps/graph/list/domain_parameter_controller.h @@ -7,6 +7,7 @@ #include "../../shared/expiring_pointer.h" #include "../../shared/float_parameter_controller.h" #include "../../shared/range_1D.h" +#include "../../shared/discard_pop_up_controller.h" namespace Graph { @@ -38,9 +39,12 @@ private: void confirmParameters(); // Extracts parameters from function, setting m_tempDomain parameters. void extractParameters(); + // Return true if temporary parameters and function parameters are equal. + bool equalTempParameters(); MessageTableCellWithEditableText m_domainCells[k_totalNumberOfCell]; Ion::Storage::Record m_record; Shared::Range1D m_tempDomain; + Shared::DiscardPopUpController m_confirmPopUpController; }; }