13 m_initialisationParameterController(this, interactiveRange),
14 m_angleUnitVersion(angleUnitVersion),
15 m_indexFunctionSelectedByCursor(indexFunctionSelectedByCursor)
20 if (functionStore()->numberOfActiveFunctions() == 0) {
27 return &m_initialisationParameterController;
35 if (functionGraphView()->context() ==
nullptr) {
40 if (*m_angleUnitVersion != newAngleUnitVersion) {
41 *m_angleUnitVersion = newAngleUnitVersion;
51 stack->
push(curveParameterController());
56 *m_indexFunctionSelectedByCursor = functionIndex;
60 if (functionStore()->numberOfActiveFunctions() == 0) {
73 if (functionStore()->numberOfActiveFunctions() <= 0) {
82 for (
int j = 0; j <= curveView()->
resolution(); j++) {
83 float x = xMin+(xMax-xMin)*j/curveView()->
resolution();
86 min = min < y ? min : y;
87 max = max > y ? max : y;
91 InteractiveCurveViewRangeDelegate::Range range;
97 float FunctionGraphController::addMargin(
float x,
float range,
bool isMin) {
98 float ratio = isMin ? -k_displayBottomMarginRatio : k_displayTopMarginRatio;
102 void FunctionGraphController::initRangeParameters() {
108 bool FunctionGraphController::moveCursorVertically(
int direction) {
110 TextFieldDelegateApp * myApp = (TextFieldDelegateApp *)
app();
111 double y = actualFunction->evaluateAtAbscissa(
m_cursor->
x(), myApp->localContext());
112 Function * nextFunction = actualFunction;
117 bool isNextFunction = direction > 0 ? (newY > y && newY < nextY) : (newY < y && newY > nextY);
118 if (isNextFunction) {
124 if (nextFunction == actualFunction) {
132 CurveView * FunctionGraphController::curveView() {
133 return functionGraphView();
136 uint32_t FunctionGraphController::modelVersion() {
140 uint32_t FunctionGraphController::rangeVersion() {
144 bool FunctionGraphController::isCursorVisible() {
virtual StackViewController * stackController() const
ViewController * initialisationParameterController() override
void(* Function)(const char *input)
void reloadBannerView() override
void push(ViewController *vc, KDColor textColor=Palette::SubTab, KDColor backgroundColor=KDColorWhite, KDColor separatorColor=Palette::GreyBright)
void setBannerView(View *bannerView)
static constexpr float k_cursorBottomMarginRatio
virtual Poincare::Context * localContext()
static constexpr float k_cursorRightMarginRatio
void viewWillAppear() override
void reloadBannerViewForCursorOnFunction(CurveViewCursor *cursor, Function *function, char symbol)
virtual void setDefault()
void viewWillAppear() override
void setFunction(Function *function)
void setAreaHighlight(float start, float end)
uint32_t rangeChecksum() override
void moveTo(double x, double y)
virtual uint32_t storeChecksum()=0
virtual BannerView * bannerView()=0
bool isCursorVisible(float topMarginRatio, float rightMarginRatio, float bottomMarginRation, float leftMarginRation)
void panToMakePointVisible(float x, float y, float topMarginRatio, float rightMarginRatio, float bottomMarginRation, float leftMarginRation)
virtual void initCursorParameters()=0
virtual Function * activeFunctionAtIndex(int i)
int numberOfActiveFunctions()
virtual float evaluateAtAbscissa(float x, Poincare::Context *context) const
int indexFunctionSelectedByCursor() const
void setCursorView(View *cursorView)
void setContext(Poincare::Context *context)
bool handleEnter() override
virtual InteractiveCurveViewRange * interactiveCurveViewRange()=0
static constexpr float k_cursorLeftMarginRatio
virtual void selectFunctionWithCursor(int functionIndex)
CurveViewCursor * m_cursor
bool isEmpty() const override
static constexpr float k_cursorTopMarginRatio