From 5259b3ab940d1ae44a420c6ea72447d0080f0d02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Fri, 19 May 2017 14:52:17 +0200 Subject: [PATCH] [apps/regression] When predicting regression, select the line instead of dots Change-Id: Ia86c06fa64af8aec68ea9b53ba8534e58be1b64b --- apps/regression/go_to_parameter_controller.cpp | 8 ++++++-- apps/regression/go_to_parameter_controller.h | 5 ++++- apps/regression/graph_controller.cpp | 6 +++++- apps/regression/graph_controller.h | 1 + apps/regression/prediction_parameter_controller.cpp | 4 ++-- apps/regression/prediction_parameter_controller.h | 4 +++- 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/apps/regression/go_to_parameter_controller.cpp b/apps/regression/go_to_parameter_controller.cpp index ee798ae90..36956f7be 100644 --- a/apps/regression/go_to_parameter_controller.cpp +++ b/apps/regression/go_to_parameter_controller.cpp @@ -1,4 +1,5 @@ #include "go_to_parameter_controller.h" +#include "graph_controller.h" #include "../apps_container.h" #include #include @@ -8,10 +9,11 @@ using namespace Poincare; namespace Regression { -GoToParameterController::GoToParameterController(Responder * parentResponder, Store * store, CurveViewCursor * cursor) : +GoToParameterController::GoToParameterController(Responder * parentResponder, Store * store, CurveViewCursor * cursor, GraphController * graphController) : Shared::GoToParameterController(parentResponder, store, cursor, I18n::Message::X), m_store(store), - m_xPrediction(true) + m_xPrediction(true), + m_graphController(graphController) { } @@ -50,12 +52,14 @@ bool GoToParameterController::setParameterAtIndex(int parameterIndex, float f) { } if (isnan(x)) { if (m_store->slope() < FLT_EPSILON && f == m_store->yIntercept()) { + m_graphController->selectRegressionCurve(); m_cursor->moveTo(m_cursor->x(), f); return true; } app()->displayWarning(I18n::Message::ValueNotReachedByRegression); return false; } + m_graphController->selectRegressionCurve(); if (m_xPrediction) { m_cursor->moveTo(f, x); } else { diff --git a/apps/regression/go_to_parameter_controller.h b/apps/regression/go_to_parameter_controller.h index 6e20bcbb6..755911029 100644 --- a/apps/regression/go_to_parameter_controller.h +++ b/apps/regression/go_to_parameter_controller.h @@ -7,9 +7,11 @@ namespace Regression { +class GraphController; + class GoToParameterController : public Shared::GoToParameterController { public: - GoToParameterController(Responder * parentResponder, Store * store, Shared::CurveViewCursor * cursor); + GoToParameterController(Responder * parentResponder, Store * store, Shared::CurveViewCursor * cursor, GraphController * graphController); void setXPrediction(bool xPrediction); const char * title() override; void willDisplayCellForIndex(HighlightCell * cell, int index) override; @@ -18,6 +20,7 @@ private: bool setParameterAtIndex(int parameterIndex, float f) override; Store * m_store; bool m_xPrediction; + GraphController * m_graphController; }; } diff --git a/apps/regression/graph_controller.cpp b/apps/regression/graph_controller.cpp index 3f1c5f0fc..3e888cad6 100644 --- a/apps/regression/graph_controller.cpp +++ b/apps/regression/graph_controller.cpp @@ -12,7 +12,7 @@ GraphController::GraphController(Responder * parentResponder, ButtonRowControlle m_view(store, m_cursor, &m_bannerView, &m_cursorView), m_store(store), m_initialisationParameterController(this, m_store), - m_predictionParameterController(this, m_store, m_cursor), + m_predictionParameterController(this, m_store, m_cursor, this), m_selectedDotIndex(-1) { m_store->setCursor(m_cursor); @@ -36,6 +36,10 @@ I18n::Message GraphController::emptyMessage() { return I18n::Message::NoEnoughDataForRegression; } +void GraphController::selectRegressionCurve() { + m_selectedDotIndex = -1; +} + BannerView * GraphController::bannerView() { return &m_bannerView; } diff --git a/apps/regression/graph_controller.h b/apps/regression/graph_controller.h index d79daedfe..5d85e7952 100644 --- a/apps/regression/graph_controller.h +++ b/apps/regression/graph_controller.h @@ -19,6 +19,7 @@ public: ViewController * initialisationParameterController() override; bool isEmpty() const override; I18n::Message emptyMessage() override; + void selectRegressionCurve(); private: constexpr static float k_cursorTopMarginRatio = 0.07f; // (cursorHeight/2)/graphViewHeight constexpr static float k_cursorRightMarginRatio = 0.04f; // (cursorWidth/2)/graphViewWidth diff --git a/apps/regression/prediction_parameter_controller.cpp b/apps/regression/prediction_parameter_controller.cpp index 0da9afbb1..42845fa5b 100644 --- a/apps/regression/prediction_parameter_controller.cpp +++ b/apps/regression/prediction_parameter_controller.cpp @@ -5,11 +5,11 @@ using namespace Shared; namespace Regression { -PredictionParameterController::PredictionParameterController(Responder * parentResponder, Store * store, CurveViewCursor * cursor) : +PredictionParameterController::PredictionParameterController(Responder * parentResponder, Store * store, CurveViewCursor * cursor, GraphController * graphController) : ViewController(parentResponder), m_selectableTableView(this, this, 0, 1, Metric::CommonTopMargin, Metric::CommonRightMargin, Metric::CommonBottomMargin, Metric::CommonLeftMargin, this), - m_goToParameterController(this, store, cursor) + m_goToParameterController(this, store, cursor, graphController) { } diff --git a/apps/regression/prediction_parameter_controller.h b/apps/regression/prediction_parameter_controller.h index ed4423590..204a23ce7 100644 --- a/apps/regression/prediction_parameter_controller.h +++ b/apps/regression/prediction_parameter_controller.h @@ -8,9 +8,11 @@ namespace Regression { +class GraphController; + class PredictionParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource { public: - PredictionParameterController(Responder * parentResponder, Store * store, Shared::CurveViewCursor * cursor); + PredictionParameterController(Responder * parentResponder, Store * store, Shared::CurveViewCursor * cursor, GraphController * graphController); View * view() override; const char * title() override; bool handleEvent(Ion::Events::Event event) override;