diff --git a/apps/graph/app.cpp b/apps/graph/app.cpp index 0c8dcf9d9..cfc133969 100644 --- a/apps/graph/app.cpp +++ b/apps/graph/app.cpp @@ -63,7 +63,7 @@ App::App(Container * container, Snapshot * snapshot) : m_graphAlternateEmptyViewController(&m_graphHeader, &m_graphController, &m_graphController), m_graphHeader(&m_graphStackViewController, &m_graphAlternateEmptyViewController, &m_graphController), m_graphStackViewController(&m_tabViewController, &m_graphHeader), - m_valuesController(&m_valuesAlternateEmptyViewController, snapshot->functionStore(), &m_valuesHeader), + m_valuesController(&m_valuesAlternateEmptyViewController, snapshot->functionStore(), snapshot->interval(), &m_valuesHeader), m_valuesAlternateEmptyViewController(&m_valuesHeader, &m_valuesController, &m_valuesController), m_valuesHeader(&m_valuesStackViewController, &m_valuesAlternateEmptyViewController, &m_valuesController), m_valuesStackViewController(&m_tabViewController, &m_valuesHeader), diff --git a/apps/graph/values/values_controller.cpp b/apps/graph/values/values_controller.cpp index 94169b709..926aadb1c 100644 --- a/apps/graph/values/values_controller.cpp +++ b/apps/graph/values/values_controller.cpp @@ -7,13 +7,13 @@ using namespace Poincare; namespace Graph { -ValuesController::ValuesController(Responder * parentResponder, CartesianFunctionStore * functionStore, ButtonRowController * header) : - Shared::ValuesController(parentResponder, header, I18n::Message::XColumn, &m_intervalParameterController), +ValuesController::ValuesController(Responder * parentResponder, CartesianFunctionStore * functionStore, Interval * interval, ButtonRowController * header) : + Shared::ValuesController(parentResponder, header, I18n::Message::XColumn, &m_intervalParameterController, interval), m_functionTitleCells{}, m_floatCells{}, m_functionStore(functionStore), m_functionParameterController(this), - m_intervalParameterController(this, &m_interval), + m_intervalParameterController(this, m_interval), m_derivativeParameterController(this) { } diff --git a/apps/graph/values/values_controller.h b/apps/graph/values/values_controller.h index 5b0a79917..fe6c538d6 100644 --- a/apps/graph/values/values_controller.h +++ b/apps/graph/values/values_controller.h @@ -12,7 +12,7 @@ namespace Graph { class ValuesController : public Shared::ValuesController { public: - ValuesController(Responder * parentResponder, CartesianFunctionStore * functionStore, ButtonRowController * header); + ValuesController(Responder * parentResponder, CartesianFunctionStore * functionStore, Shared::Interval * interval, ButtonRowController * header); bool handleEvent(Ion::Events::Event event) override; int numberOfColumns() override; void willDisplayCellAtLocation(HighlightCell * cell, int i, int j) override; diff --git a/apps/sequence/app.cpp b/apps/sequence/app.cpp index 732f90d56..6b790de3a 100644 --- a/apps/sequence/app.cpp +++ b/apps/sequence/app.cpp @@ -61,7 +61,7 @@ App::App(Container * container, Snapshot * snapshot) : m_graphAlternateEmptyViewController(&m_graphHeader, &m_graphController, &m_graphController), m_graphHeader(&m_graphStackViewController, &m_graphAlternateEmptyViewController, &m_graphController), m_graphStackViewController(&m_tabViewController, &m_graphHeader), - m_valuesController(&m_valuesAlternateEmptyViewController, snapshot->sequenceStore(), &m_valuesHeader), + m_valuesController(&m_valuesAlternateEmptyViewController, snapshot->sequenceStore(), snapshot->interval(), &m_valuesHeader), m_valuesAlternateEmptyViewController(&m_valuesHeader, &m_valuesController, &m_valuesController), m_valuesHeader(nullptr, &m_valuesAlternateEmptyViewController, &m_valuesController), m_valuesStackViewController(&m_tabViewController, &m_valuesHeader), diff --git a/apps/sequence/values/values_controller.cpp b/apps/sequence/values/values_controller.cpp index 54564b881..921fcae70 100644 --- a/apps/sequence/values/values_controller.cpp +++ b/apps/sequence/values/values_controller.cpp @@ -5,15 +5,15 @@ using namespace Shared; namespace Sequence { -ValuesController::ValuesController(Responder * parentResponder, SequenceStore * sequenceStore, ButtonRowController * header) : - Shared::ValuesController(parentResponder, header, I18n::Message::NColumn, &m_intervalParameterController), +ValuesController::ValuesController(Responder * parentResponder, SequenceStore * sequenceStore, Interval * interval, ButtonRowController * header) : + Shared::ValuesController(parentResponder, header, I18n::Message::NColumn, &m_intervalParameterController, interval), m_sequenceTitleCells{}, m_floatCells{}, m_sequenceStore(sequenceStore), #if COPY_COLUMN m_sequenceParameterController('n'), #endif - m_intervalParameterController(this, &m_interval) + m_intervalParameterController(this, m_interval) { } diff --git a/apps/sequence/values/values_controller.h b/apps/sequence/values/values_controller.h index 27be9f551..ca1fee68d 100644 --- a/apps/sequence/values/values_controller.h +++ b/apps/sequence/values/values_controller.h @@ -10,7 +10,7 @@ namespace Sequence { class ValuesController : public Shared::ValuesController { public: - ValuesController(Responder * parentResponder, SequenceStore * sequenceStore, ButtonRowController * header); + ValuesController(Responder * parentResponder, SequenceStore * sequenceStore, Shared::Interval * interval, ButtonRowController * header); int numberOfColumns() override; void willDisplayCellAtLocation(HighlightCell * cell, int i, int j) override; I18n::Message emptyMessage() override; diff --git a/apps/shared/function_app.cpp b/apps/shared/function_app.cpp index 1741e90e9..a662f8f0c 100644 --- a/apps/shared/function_app.cpp +++ b/apps/shared/function_app.cpp @@ -7,9 +7,13 @@ namespace Shared { FunctionApp::Snapshot::Snapshot() : m_cursor(), + m_interval(), m_modelVersion(0), m_rangeVersion(0) { + m_interval.setStart(0); + m_interval.setEnd(10); + m_interval.setStep(1); } CurveViewCursor * FunctionApp::Snapshot::cursor() { @@ -24,6 +28,16 @@ uint32_t * FunctionApp::Snapshot::rangeVersion() { return &m_rangeVersion; } +Interval * FunctionApp::Snapshot::interval() { + return &m_interval; +} + +void FunctionApp::Snapshot::reset() { + m_interval.setStart(0); + m_interval.setEnd(10); + m_interval.setStep(1); +} + FunctionApp::FunctionApp(Container * container, Snapshot * snapshot, ViewController * rootViewController) : TextFieldDelegateApp(container, snapshot, rootViewController) { diff --git a/apps/shared/function_app.h b/apps/shared/function_app.h index a7c3e515a..68a7e6a4a 100644 --- a/apps/shared/function_app.h +++ b/apps/shared/function_app.h @@ -4,6 +4,7 @@ #include #include "text_field_delegate_app.h" #include "curve_view_cursor.h" +#include "interval.h" class AppsContainer; @@ -17,8 +18,11 @@ public: CurveViewCursor * cursor(); uint32_t * modelVersion(); uint32_t * rangeVersion(); + Interval * interval(); + void reset() override; protected: CurveViewCursor m_cursor; + Interval m_interval; private: uint32_t m_modelVersion; uint32_t m_rangeVersion; diff --git a/apps/shared/values_controller.cpp b/apps/shared/values_controller.cpp index 14212c4d3..645d1edd7 100644 --- a/apps/shared/values_controller.cpp +++ b/apps/shared/values_controller.cpp @@ -8,9 +8,10 @@ using namespace Poincare; namespace Shared { -ValuesController::ValuesController(Responder * parentResponder, ButtonRowController * header, I18n::Message parameterTitle, IntervalParameterController * intervalParameterController) : +ValuesController::ValuesController(Responder * parentResponder, ButtonRowController * header, I18n::Message parameterTitle, IntervalParameterController * intervalParameterController, Interval * interval) : EditableCellTableViewController(parentResponder), ButtonRowDelegate(header, nullptr), + m_interval(interval), m_abscissaTitleCell(nullptr), m_abscissaCells{}, m_abscissaParameterController(ValuesParameterController(this, intervalParameterController, parameterTitle)), @@ -20,9 +21,6 @@ ValuesController::ValuesController(Responder * parentResponder, ButtonRowControl stack->push(valuesController->intervalParameterController()); }, this), KDText::FontSize::Small)) { - m_interval.setStart(0); - m_interval.setEnd(10); - m_interval.setStep(1); } const char * ValuesController::title() { @@ -30,7 +28,7 @@ const char * ValuesController::title() { } Interval * ValuesController::interval() { - return &m_interval; + return m_interval; } bool ValuesController::handleEvent(Ion::Events::Event event) { @@ -55,8 +53,8 @@ bool ValuesController::handleEvent(Ion::Events::Event event) { return true; } if (event == Ion::Events::Backspace && selectedRow() > 0 && - (selectedRow() < numberOfRows()-1 || m_interval.numberOfElements() == Interval::k_maxNumberOfElements)) { - m_interval.deleteElementAtIndex(selectedRow()-1); + (selectedRow() < numberOfRows()-1 || m_interval->numberOfElements() == Interval::k_maxNumberOfElements)) { + m_interval->deleteElementAtIndex(selectedRow()-1); selectableTableView()->reloadData(); return true; } @@ -124,7 +122,7 @@ void ValuesController::willDisplayCellAtLocation(HighlightCell * cell, int i, in char buffer[Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits)]; // Special case: last row if (j == numberOfRows() - 1) { - int numberOfIntervalElements = m_interval.numberOfElements(); + int numberOfIntervalElements = m_interval->numberOfElements(); if (numberOfIntervalElements < Interval::k_maxNumberOfElements) { buffer[0] = 0; EvenOddBufferTextCell * myValueCell = (EvenOddBufferTextCell *)cell; @@ -134,7 +132,7 @@ void ValuesController::willDisplayCellAtLocation(HighlightCell * cell, int i, in } // The cell is a value cell EvenOddBufferTextCell * myValueCell = (EvenOddBufferTextCell *)cell; - float x = m_interval.element(j-1); + float x = m_interval->element(j-1); Complex::convertFloatToText(evaluationOfAbscissaAtColumn(x, i), buffer, Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); myValueCell->setText(buffer); } @@ -273,16 +271,16 @@ bool ValuesController::cellAtLocationIsEditable(int columnIndex, int rowIndex) { } bool ValuesController::setDataAtLocation(float floatBody, int columnIndex, int rowIndex) { - m_interval.setElement(rowIndex-1, floatBody); + m_interval->setElement(rowIndex-1, floatBody); return true; } float ValuesController::dataAtLocation(int columnIndex, int rowIndex) { - return m_interval.element(rowIndex-1); + return m_interval->element(rowIndex-1); } int ValuesController::numberOfElements() { - return m_interval.numberOfElements(); + return m_interval->numberOfElements(); } int ValuesController::maxNumberOfElements() const { diff --git a/apps/shared/values_controller.h b/apps/shared/values_controller.h index 192025cbd..9d8bfe51e 100644 --- a/apps/shared/values_controller.h +++ b/apps/shared/values_controller.h @@ -15,7 +15,7 @@ namespace Shared { class ValuesController : public EditableCellTableViewController, public ButtonRowDelegate, public AlternateEmptyViewDelegate { public: - ValuesController(Responder * parentResponder, ButtonRowController * header, I18n::Message parameterTitle, IntervalParameterController * intervalParameterController); + ValuesController(Responder * parentResponder, ButtonRowController * header, I18n::Message parameterTitle, IntervalParameterController * intervalParameterController, Interval * interval); const char * title() override; Interval * interval(); virtual bool handleEvent(Ion::Events::Event event) override; @@ -45,7 +45,7 @@ protected: bool setDataAtLocation(float floatBody, int columnIndex, int rowIndex) override; View * loadView() override; void unloadView(View * view) override; - Interval m_interval; + Interval * m_interval; private: virtual Function * functionAtColumn(int i); Responder * tabController() const override;