diff --git a/apps/graph/app.h b/apps/graph/app.h index 69100e0e9..3b462f94f 100644 --- a/apps/graph/app.h +++ b/apps/graph/app.h @@ -36,6 +36,9 @@ public: CodePoint XNT() override; NestedMenuController * variableBoxForInputEventHandler(InputEventHandler * textInput) override; CartesianFunctionStore * functionStore() override { return static_cast(Shared::FunctionApp::functionStore()); } + ValuesController * valuesController() override { + return &m_valuesController; + } InputViewController * inputViewController() override { return &m_inputViewController; } diff --git a/apps/graph/values/values_controller.cpp b/apps/graph/values/values_controller.cpp index e142d2b56..c9c4f6484 100644 --- a/apps/graph/values/values_controller.cpp +++ b/apps/graph/values/values_controller.cpp @@ -9,7 +9,7 @@ using namespace Poincare; namespace Graph { ValuesController::ValuesController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Interval * interval, ButtonRowController * header) : - Shared::ValuesController(parentResponder, inputEventHandlerDelegate, header, &m_intervalParameterController, interval), + Shared::ValuesController(parentResponder, inputEventHandlerDelegate, header, interval), m_functionTitleCells{}, m_floatCells{}, m_functionParameterController(this), diff --git a/apps/sequence/app.h b/apps/sequence/app.h index d5e6d60b2..e16d40a53 100644 --- a/apps/sequence/app.h +++ b/apps/sequence/app.h @@ -40,6 +40,9 @@ public: CodePoint XNT() override { return 'n'; } SequenceContext * localContext() override; SequenceStore * functionStore() override { return static_cast(Shared::FunctionApp::functionStore()); } + ValuesController * valuesController() override { + return &m_valuesController; + } InputViewController * inputViewController() override { return &m_inputViewController; } diff --git a/apps/sequence/values/values_controller.cpp b/apps/sequence/values/values_controller.cpp index 0687bcfca..6c728cdb3 100644 --- a/apps/sequence/values/values_controller.cpp +++ b/apps/sequence/values/values_controller.cpp @@ -7,7 +7,7 @@ using namespace Shared; namespace Sequence { ValuesController::ValuesController(Responder * parentResponder,InputEventHandlerDelegate * inputEventHandlerDelegate, Interval * interval, ButtonRowController * header) : - Shared::ValuesController(parentResponder, inputEventHandlerDelegate, header, &m_intervalParameterController, interval), + Shared::ValuesController(parentResponder, inputEventHandlerDelegate, header, interval), m_sequenceTitleCells{}, m_floatCells{}, #if COPY_COLUMN diff --git a/apps/shared/function_app.h b/apps/shared/function_app.h index 797e41647..57ae9a2ad 100644 --- a/apps/shared/function_app.h +++ b/apps/shared/function_app.h @@ -5,6 +5,7 @@ #include "function_store.h" #include "curve_view_cursor.h" #include "interval.h" +#include "values_controller.h" namespace Shared { @@ -36,6 +37,7 @@ public: } virtual ~FunctionApp() = default; virtual FunctionStore * functionStore() { return static_cast(snapshot())->functionStore(); } + virtual ValuesController * valuesController() = 0; virtual InputViewController * inputViewController() = 0; void willBecomeInactive() override; diff --git a/apps/shared/values_controller.cpp b/apps/shared/values_controller.cpp index a6de65d57..74255e8a0 100644 --- a/apps/shared/values_controller.cpp +++ b/apps/shared/values_controller.cpp @@ -8,7 +8,7 @@ using namespace Poincare; namespace Shared { -ValuesController::ValuesController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, IntervalParameterController * intervalParameterController, Interval * interval) : +ValuesController::ValuesController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, Interval * interval) : EditableCellTableViewController(parentResponder), ButtonRowDelegate(header, nullptr), m_interval(interval), @@ -17,7 +17,7 @@ ValuesController::ValuesController(Responder * parentResponder, InputEventHandle m_selectableTableView(this), m_abscissaTitleCell(), m_abscissaCells{}, - m_abscissaParameterController(this, intervalParameterController), + m_abscissaParameterController(this), m_setIntervalButton(this, I18n::Message::IntervalSet, Invocation([](void * context, void * sender) { ValuesController * valuesController = (ValuesController *) context; StackViewController * stack = ((StackViewController *)valuesController->stackController()); diff --git a/apps/shared/values_controller.h b/apps/shared/values_controller.h index 4c4575d7a..71144d720 100644 --- a/apps/shared/values_controller.h +++ b/apps/shared/values_controller.h @@ -15,12 +15,13 @@ namespace Shared { class ValuesController : public EditableCellTableViewController, public ButtonRowDelegate, public AlternateEmptyViewDefaultDelegate { public: - ValuesController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, IntervalParameterController * intervalParameterController, Interval * interval); + ValuesController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, Interval * interval); const char * title() override; int numberOfColumns() override; virtual bool handleEvent(Ion::Events::Event event) override; void didBecomeFirstResponder() override; void willExitResponderChain(Responder * nextFirstResponder) override; + virtual IntervalParameterController * intervalParameterController() = 0; int numberOfButtons(ButtonRowController::Position) const override; Button * buttonAtIndex(int index, ButtonRowController::Position position) const override; virtual void willDisplayCellAtLocation(HighlightCell * cell, int i, int j) override; @@ -68,7 +69,6 @@ private: virtual FunctionTitleCell * functionTitleCells(int j) = 0; virtual EvenOddBufferTextCell * floatCells(int j) = 0; EvenOddEditableTextCell m_abscissaCells[k_maxNumberOfAbscissaCells]; - virtual IntervalParameterController * intervalParameterController() = 0; virtual ViewController * functionParameterController() = 0; virtual I18n::Message valuesParameterControllerPageTitle() const = 0; ValuesParameterController m_abscissaParameterController; diff --git a/apps/shared/values_parameter_controller.cpp b/apps/shared/values_parameter_controller.cpp index b800818f9..64c7fc3de 100644 --- a/apps/shared/values_parameter_controller.cpp +++ b/apps/shared/values_parameter_controller.cpp @@ -1,17 +1,17 @@ #include "values_parameter_controller.h" +#include "function_app.h" #include namespace Shared { -ValuesParameterController::ValuesParameterController(Responder * parentResponder, IntervalParameterController * intervalParameterController) : +ValuesParameterController::ValuesParameterController(Responder * parentResponder) : ViewController(parentResponder), m_deleteColumn(I18n::Message::Default), #if COPY_COLUMN m_copyColumn(I18n::Message::Default), #endif m_setInterval(I18n::Message::Default), - m_selectableTableView(this, this, this), - m_intervalParameterController(intervalParameterController) + m_selectableTableView(this, this, this) { } @@ -46,10 +46,11 @@ bool ValuesParameterController::handleEvent(Ion::Events::Event event) { #else if (event == Ion::Events::OK || event == Ion::Events::EXE || (event == Ion::Events::Right && selectedRow() == 1)) { #endif + IntervalParameterController * intervalParameterController = FunctionApp::app()->valuesController()->intervalParameterController(); switch (selectedRow()) { case 0: { - Interval * interval = m_intervalParameterController->interval(); + Interval * interval = intervalParameterController->interval(); interval->clear(); StackViewController * stack = ((StackViewController *)parentResponder()); stack->pop(); @@ -65,7 +66,7 @@ bool ValuesParameterController::handleEvent(Ion::Events::Event event) { #endif { StackViewController * stack = ((StackViewController *)parentResponder()); - stack->push(m_intervalParameterController); + stack->push(intervalParameterController); return true; } default: diff --git a/apps/shared/values_parameter_controller.h b/apps/shared/values_parameter_controller.h index a6a918fd7..206b4e041 100644 --- a/apps/shared/values_parameter_controller.h +++ b/apps/shared/values_parameter_controller.h @@ -7,7 +7,7 @@ namespace Shared { class ValuesParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource { public: - ValuesParameterController(Responder * parentResponder, IntervalParameterController * intervalParameterController); + ValuesParameterController(Responder * parentResponder); View * view() override; const char * title() override; void setPageTitle(I18n::Message pageTitle) { m_pageTitle = pageTitle; } @@ -29,7 +29,6 @@ private: MessageTableCell m_deleteColumn; MessageTableCellWithChevron m_setInterval; SelectableTableView m_selectableTableView; - IntervalParameterController * m_intervalParameterController; }; }