mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-18 16:27:34 +01:00
The graph range used to be reset to default whenever all functions were modified. As we no longer want to reset the range without the user's input, we do not need to track whether the functions changed at all. /!\ As of this commit, there is no longer a way to restore the default zoom, until a new automatic zoom button is added. Change-Id: Ie74e8fd61e13055fa6ce2b2d1e883182d4ecffce
73 lines
2.8 KiB
C++
73 lines
2.8 KiB
C++
#ifndef REGRESSION_GRAPH_CONTROLLER_H
|
|
#define REGRESSION_GRAPH_CONTROLLER_H
|
|
|
|
#include "banner_view.h"
|
|
#include "store.h"
|
|
#include "graph_options_controller.h"
|
|
#include "graph_view.h"
|
|
#include "../shared/interactive_curve_view_controller.h"
|
|
#include "../shared/curve_view_cursor.h"
|
|
#include "../shared/cursor_view.h"
|
|
#include "../shared/round_cursor_view.h"
|
|
|
|
namespace Regression {
|
|
|
|
class GraphController : public Shared::InteractiveCurveViewController {
|
|
|
|
public:
|
|
GraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, Store * store, Shared::CurveViewCursor * cursor, uint32_t * rangeVersion, int * selectedDotIndex, int * selectedSeriesIndex);
|
|
bool isEmpty() const override;
|
|
I18n::Message emptyMessage() override;
|
|
void viewWillAppear() override;
|
|
void selectRegressionCurve() { *m_selectedDotIndex = -1; }
|
|
int selectedSeriesIndex() const { return *m_selectedSeriesIndex; }
|
|
|
|
// moveCursorHorizontally and Vertically are public to be used in tests
|
|
bool moveCursorHorizontally(int direction, int scrollSpeed = 1) override;
|
|
bool moveCursorVertically(int direction) override;
|
|
|
|
private:
|
|
constexpr static int k_maxLegendLength = 16;
|
|
constexpr static int k_maxNumberOfCharacters = 50;
|
|
|
|
Poincare::Context * globalContext();
|
|
|
|
// SimpleInteractiveCurveViewController
|
|
void reloadBannerView() override;
|
|
Shared::InteractiveCurveViewRange * interactiveCurveViewRange() override;
|
|
Shared::CurveView * curveView() override;
|
|
bool handleEnter() override;
|
|
|
|
// InteractiveCurveViewController
|
|
void initCursorParameters() override;
|
|
uint32_t rangeVersion() override;
|
|
int selectedCurveIndex() const override { return *m_selectedSeriesIndex; }
|
|
bool closestCurveIndexIsSuitable(int newIndex, int currentIndex) const override;
|
|
Poincare::Coordinate2D<double> xyValues(int curveIndex, double x, Poincare::Context * context) const override;
|
|
double yValue(int curveIndex, double x, Poincare::Context * context) const;
|
|
bool suitableYValue(double y) const override;
|
|
int numberOfCurves() const override;
|
|
int estimatedBannerNumberOfLines() const override;
|
|
|
|
// InteractiveCurveViewRangeDelegate
|
|
Shared::InteractiveCurveViewRangeDelegate::Range computeYRange(Shared::InteractiveCurveViewRange * interactiveCurveViewRange) override;
|
|
|
|
void setRoundCrossCursorView();
|
|
Shared::CursorView m_crossCursorView;
|
|
Shared::RoundCursorView m_roundCursorView;
|
|
BannerView m_bannerView;
|
|
GraphView m_view;
|
|
Store * m_store;
|
|
GraphOptionsController m_graphOptionsController;
|
|
/* The selectedDotIndex is -1 when no dot is selected, m_numberOfPairs when
|
|
* the mean dot is selected and the dot index otherwise */
|
|
int * m_selectedDotIndex;
|
|
int * m_selectedSeriesIndex;
|
|
Model::Type m_modelType[Store::k_numberOfSeries];
|
|
};
|
|
|
|
}
|
|
|
|
|
|
#endif
|