From 150a5bfa5ace73b158c3a02f2d773cf38d451cf0 Mon Sep 17 00:00:00 2001 From: Hugo Saint-Vignes Date: Fri, 9 Oct 2020 15:58:46 +0200 Subject: [PATCH] [apps/shared] Add discard confirmation on table intervals Change-Id: Id152577c570febf06b4d829fd2723c2a30c3ccd9 --- apps/shared/interval.cpp | 4 ++++ apps/shared/interval.h | 1 + apps/shared/interval_parameter_controller.cpp | 12 +++++++++++- apps/shared/interval_parameter_controller.h | 2 ++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/apps/shared/interval.cpp b/apps/shared/interval.cpp index 1fccb9e81..6b5151308 100644 --- a/apps/shared/interval.cpp +++ b/apps/shared/interval.cpp @@ -23,6 +23,10 @@ void Interval::deleteElementAtIndex(int index) { m_numberOfElements--; } +bool Interval::hasSameParameters(IntervalParameters parameters) { + return (m_parameters.start() == parameters.start() && m_parameters.end() == parameters.end() && m_parameters.step() == parameters.step()); +} + double Interval::element(int i) { assert(i >= 0 && i < numberOfElements()); computeElements(); diff --git a/apps/shared/interval.h b/apps/shared/interval.h index 13e3e2cf4..bf7c97925 100644 --- a/apps/shared/interval.h +++ b/apps/shared/interval.h @@ -23,6 +23,7 @@ public: double m_end; double m_step; }; + bool hasSameParameters(IntervalParameters parameters); double element(int i); IntervalParameters * parameters() { return &m_parameters; } void setParameters(IntervalParameters parameters) { m_parameters = parameters; } diff --git a/apps/shared/interval_parameter_controller.cpp b/apps/shared/interval_parameter_controller.cpp index 2404f4604..11256bfd4 100644 --- a/apps/shared/interval_parameter_controller.cpp +++ b/apps/shared/interval_parameter_controller.cpp @@ -13,7 +13,12 @@ IntervalParameterController::IntervalParameterController(Responder * parentRespo m_intervalCells{}, m_title(I18n::Message::IntervalSet), m_startMessage(I18n::Message::XStart), - m_endMessage(I18n::Message::XEnd) + m_endMessage(I18n::Message::XEnd), + m_confirmPopUpController(Invocation([](void * context, void * sender) { + Container::activeApp()->dismissModalViewController(); + ((IntervalParameterController *)context)->stackController()->pop(); + return true; + }, this)) { for (int i = 0; i < k_totalNumberOfCell; i++) { m_intervalCells[i].setParentResponder(&m_selectableTableView); @@ -87,6 +92,11 @@ bool IntervalParameterController::handleEvent(Ion::Events::Event event) { stackController()->pop(); return true; } + if (event == Ion::Events::Back && !m_interval->hasSameParameters(*SharedTempIntervalParameters())) { + // 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; } diff --git a/apps/shared/interval_parameter_controller.h b/apps/shared/interval_parameter_controller.h index 21c689a3a..0821f033f 100644 --- a/apps/shared/interval_parameter_controller.h +++ b/apps/shared/interval_parameter_controller.h @@ -5,6 +5,7 @@ #include "interval.h" #include "float_parameter_controller.h" #include +#include "discard_pop_up_controller.h" namespace Shared { @@ -33,6 +34,7 @@ private: I18n::Message m_title; I18n::Message m_startMessage; I18n::Message m_endMessage; + DiscardPopUpController m_confirmPopUpController; }; }