From bf11591e3efda0b683c3edb4af05081ee680e1e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Wed, 7 Jun 2017 10:44:14 +0200 Subject: [PATCH] [apps/shared] In values controller, update the number of columns when layout is done Change-Id: I29bc776623ff2e5056c9f2cc1d995b4440996116 --- apps/graph/app.cpp | 4 ++-- .../derivative_parameter_controller.cpp | 1 - .../values/function_parameter_controller.cpp | 1 - apps/graph/values/values_controller.cpp | 17 ++++++++-------- apps/graph/values/values_controller.h | 2 +- apps/sequence/app.cpp | 4 ++-- apps/sequence/values/values_controller.cpp | 5 ++--- apps/sequence/values/values_controller.h | 2 +- apps/shared/function_app.cpp | 14 ++++--------- apps/shared/function_app.h | 6 ++---- apps/shared/values_controller.cpp | 20 +++++++++++-------- apps/shared/values_controller.h | 5 +++-- 12 files changed, 37 insertions(+), 44 deletions(-) diff --git a/apps/graph/app.cpp b/apps/graph/app.cpp index 2282dfc72..d7b347aeb 100644 --- a/apps/graph/app.cpp +++ b/apps/graph/app.cpp @@ -62,11 +62,11 @@ App::App(Container * container, Snapshot * snapshot) : m_listFooter(&m_listHeader, &m_listController, &m_listController, ButtonRowController::Position::Bottom, ButtonRowController::Style::EmbossedGrey), m_listHeader(&m_listStackViewController, &m_listFooter, &m_listController), m_listStackViewController(&m_tabViewController, &m_listHeader), - m_graphController(&m_graphAlternateEmptyViewController, snapshot->functionStore(), snapshot->graphRange(), snapshot->cursor(), snapshot->graphModelVersion(), snapshot->rangeVersion(), &m_graphHeader), + m_graphController(&m_graphAlternateEmptyViewController, snapshot->functionStore(), snapshot->graphRange(), snapshot->cursor(), snapshot->modelVersion(), snapshot->rangeVersion(), &m_graphHeader), 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(), snapshot->interval(), snapshot->valuesModelVersion(), &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/derivative_parameter_controller.cpp b/apps/graph/values/derivative_parameter_controller.cpp index 8c9f751b4..b29aa8f20 100644 --- a/apps/graph/values/derivative_parameter_controller.cpp +++ b/apps/graph/values/derivative_parameter_controller.cpp @@ -48,7 +48,6 @@ bool DerivativeParameterController::handleEvent(Ion::Events::Event event) { { m_valuesController->selectCellAtLocation(m_valuesController->selectedColumn()-1, m_valuesController->selectedRow()); m_function->setDisplayDerivative(false); - m_valuesController->updateNumberOfColumns(); StackViewController * stack = (StackViewController *)(parentResponder()); stack->pop(); return true; diff --git a/apps/graph/values/function_parameter_controller.cpp b/apps/graph/values/function_parameter_controller.cpp index c4343710c..8fe4e5da3 100644 --- a/apps/graph/values/function_parameter_controller.cpp +++ b/apps/graph/values/function_parameter_controller.cpp @@ -25,7 +25,6 @@ bool FunctionParameterController::handleEvent(Ion::Events::Event event) { case 0: { m_cartesianFunction->setDisplayDerivative(!m_cartesianFunction->displayDerivative()); - m_valuesController->updateNumberOfColumns(); if (m_cartesianFunction->displayDerivative()) { m_valuesController->selectCellAtLocation(m_valuesController->selectedColumn()+1, m_valuesController->selectedRow()); } diff --git a/apps/graph/values/values_controller.cpp b/apps/graph/values/values_controller.cpp index 10fc1d1d0..1a622a0be 100644 --- a/apps/graph/values/values_controller.cpp +++ b/apps/graph/values/values_controller.cpp @@ -7,8 +7,8 @@ using namespace Poincare; namespace Graph { -ValuesController::ValuesController(Responder * parentResponder, CartesianFunctionStore * functionStore, Interval * interval, uint32_t * modelVersion, ButtonRowController * header) : - Shared::ValuesController(parentResponder, header, I18n::Message::XColumn, &m_intervalParameterController, interval, modelVersion), +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), @@ -16,7 +16,6 @@ ValuesController::ValuesController(Responder * parentResponder, CartesianFunctio m_intervalParameterController(this, m_interval), m_derivativeParameterController(this) { - updateNumberOfColumns(); } bool ValuesController::handleEvent(Ion::Events::Event event) { @@ -173,13 +172,13 @@ void ValuesController::unloadView(View * view) { } void ValuesController::updateNumberOfColumns() { - int result = 1; - for (int i = 0; i < m_functionStore->numberOfActiveFunctions(); i++) { - if (m_functionStore->activeFunctionAtIndex(i)->isActive()) { - result += 1 + m_functionStore->activeFunctionAtIndex(i)->displayDerivative(); + int result = 1; + for (int i = 0; i < m_functionStore->numberOfActiveFunctions(); i++) { + if (m_functionStore->activeFunctionAtIndex(i)->isActive()) { + result += 1 + m_functionStore->activeFunctionAtIndex(i)->displayDerivative(); + } } - } - m_numberOfColumns = result; + m_numberOfColumns = result; } } diff --git a/apps/graph/values/values_controller.h b/apps/graph/values/values_controller.h index f341457e4..193013d4b 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, Shared::Interval * interval, uint32_t * modelVersion, ButtonRowController * header); + ValuesController(Responder * parentResponder, CartesianFunctionStore * functionStore, Shared::Interval * interval, ButtonRowController * header); bool handleEvent(Ion::Events::Event event) override; void willDisplayCellAtLocation(HighlightCell * cell, int i, int j) override; I18n::Message emptyMessage() override; diff --git a/apps/sequence/app.cpp b/apps/sequence/app.cpp index 9f3bef4b9..eab2e392c 100644 --- a/apps/sequence/app.cpp +++ b/apps/sequence/app.cpp @@ -60,11 +60,11 @@ App::App(Container * container, Snapshot * snapshot) : m_listFooter(&m_listHeader, &m_listController, &m_listController, ButtonRowController::Position::Bottom, ButtonRowController::Style::EmbossedGrey), m_listHeader(nullptr, &m_listFooter, &m_listController), m_listStackViewController(&m_tabViewController, &m_listHeader), - m_graphController(&m_graphAlternateEmptyViewController, snapshot->sequenceStore(), snapshot->graphRange(), snapshot->cursor(), snapshot->graphModelVersion(), snapshot->rangeVersion(), &m_graphHeader), + m_graphController(&m_graphAlternateEmptyViewController, snapshot->sequenceStore(), snapshot->graphRange(), snapshot->cursor(), snapshot->modelVersion(), snapshot->rangeVersion(), &m_graphHeader), 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(), snapshot->interval(), snapshot->valuesModelVersion(), &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 08ffaa72a..bf2278a32 100644 --- a/apps/sequence/values/values_controller.cpp +++ b/apps/sequence/values/values_controller.cpp @@ -5,8 +5,8 @@ using namespace Shared; namespace Sequence { -ValuesController::ValuesController(Responder * parentResponder, SequenceStore * sequenceStore, Interval * interval, uint32_t * modelVersion, ButtonRowController * header) : - Shared::ValuesController(parentResponder, header, I18n::Message::NColumn, &m_intervalParameterController, interval, modelVersion), +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), @@ -15,7 +15,6 @@ ValuesController::ValuesController(Responder * parentResponder, SequenceStore * #endif m_intervalParameterController(this, m_interval) { - updateNumberOfColumns(); } void ValuesController::willDisplayCellAtLocation(HighlightCell * cell, int i, int j) { diff --git a/apps/sequence/values/values_controller.h b/apps/sequence/values/values_controller.h index 9f0b9ba09..ce448cd46 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, Shared::Interval * interval, uint32_t * modelVersion, ButtonRowController * header); + ValuesController(Responder * parentResponder, SequenceStore * sequenceStore, Shared::Interval * interval, ButtonRowController * header); void willDisplayCellAtLocation(HighlightCell * cell, int i, int j) override; I18n::Message emptyMessage() override; IntervalParameterController * intervalParameterController() override; diff --git a/apps/shared/function_app.cpp b/apps/shared/function_app.cpp index 11e7dbc65..50977ac72 100644 --- a/apps/shared/function_app.cpp +++ b/apps/shared/function_app.cpp @@ -8,8 +8,7 @@ namespace Shared { FunctionApp::Snapshot::Snapshot() : m_cursor(), m_interval(), - m_graphModelVersion(0), - m_valuesModelVersion(0), + m_modelVersion(0), m_rangeVersion(0) { m_interval.setStart(0); @@ -21,12 +20,8 @@ CurveViewCursor * FunctionApp::Snapshot::cursor() { return &m_cursor; } -uint32_t * FunctionApp::Snapshot::graphModelVersion() { - return &m_graphModelVersion; -} - -uint32_t * FunctionApp::Snapshot::valuesModelVersion() { - return &m_valuesModelVersion; +uint32_t * FunctionApp::Snapshot::modelVersion() { + return &m_modelVersion; } uint32_t * FunctionApp::Snapshot::rangeVersion() { @@ -41,8 +36,7 @@ void FunctionApp::Snapshot::reset() { m_interval.setStart(0); m_interval.setEnd(10); m_interval.setStep(1); - m_graphModelVersion = 0; - m_valuesModelVersion = 0; + m_modelVersion = 0; m_rangeVersion = 0; setActiveTab(0); } diff --git a/apps/shared/function_app.h b/apps/shared/function_app.h index 9d98f92aa..b4d1a63ca 100644 --- a/apps/shared/function_app.h +++ b/apps/shared/function_app.h @@ -16,8 +16,7 @@ public: public: Snapshot(); CurveViewCursor * cursor(); - uint32_t * graphModelVersion(); - uint32_t * valuesModelVersion(); + uint32_t * modelVersion(); uint32_t * rangeVersion(); Interval * interval(); void reset() override; @@ -25,8 +24,7 @@ public: CurveViewCursor m_cursor; Interval m_interval; private: - uint32_t m_graphModelVersion; - uint32_t m_valuesModelVersion; + uint32_t m_modelVersion; uint32_t m_rangeVersion; }; virtual ~FunctionApp() = default; diff --git a/apps/shared/values_controller.cpp b/apps/shared/values_controller.cpp index 714beeae0..d81618135 100644 --- a/apps/shared/values_controller.cpp +++ b/apps/shared/values_controller.cpp @@ -8,14 +8,14 @@ using namespace Poincare; namespace Shared { -ValuesController::ValuesController(Responder * parentResponder, ButtonRowController * header, I18n::Message parameterTitle, IntervalParameterController * intervalParameterController, Interval * interval, uint32_t * modelVersion) : +ValuesController::ValuesController(Responder * parentResponder, ButtonRowController * header, I18n::Message parameterTitle, IntervalParameterController * intervalParameterController, Interval * interval) : EditableCellTableViewController(parentResponder), ButtonRowDelegate(header, nullptr), m_interval(interval), m_numberOfColumns(0), + m_numberOfColumnsNeedUpdate(true), m_abscissaTitleCell(nullptr), m_abscissaCells{}, - m_modelVersion(modelVersion), m_abscissaParameterController(this, intervalParameterController, parameterTitle), m_setIntervalButton(this, I18n::Message::IntervalSet, Invocation([](void * context, void * sender) { ValuesController * valuesController = (ValuesController *) context; @@ -30,6 +30,10 @@ const char * ValuesController::title() { } int ValuesController::numberOfColumns() { + if (m_numberOfColumnsNeedUpdate) { + updateNumberOfColumns(); + m_numberOfColumnsNeedUpdate = false; + } return m_numberOfColumns; } @@ -228,15 +232,15 @@ Responder * ValuesController::defaultController() { } void ValuesController::viewWillAppear() { - uint32_t newModelVersion = functionStore()->storeChecksum(); - if (*m_modelVersion != newModelVersion) { - *m_modelVersion = newModelVersion; - updateNumberOfColumns(); - } EditableCellTableViewController::viewWillAppear(); header()->setSelectedButton(-1); } +void ValuesController::viewDidDisappear() { + m_numberOfColumnsNeedUpdate = true; + EditableCellTableViewController::viewDidDisappear(); +} + Function * ValuesController::functionAtColumn(int i) { assert(i > 0); return functionStore()->activeFunctionAtIndex(i-1); @@ -319,7 +323,7 @@ void ValuesController::unloadView(View * view) { } void ValuesController::updateNumberOfColumns() { - m_numberOfColumns = 1+functionStore()->numberOfActiveFunctions(); + m_numberOfColumns = 1+functionStore()->numberOfActiveFunctions(); } } diff --git a/apps/shared/values_controller.h b/apps/shared/values_controller.h index b1225575a..7e64b9c19 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, Interval * interval, uint32_t * modelVersion); + ValuesController(Responder * parentResponder, ButtonRowController * header, I18n::Message parameterTitle, IntervalParameterController * intervalParameterController, Interval * interval); const char * title() override; Interval * interval(); int numberOfColumns() override; @@ -35,6 +35,7 @@ public: bool isEmpty() const override; Responder * defaultController() override; void viewWillAppear() override; + void viewDidDisappear() override; static constexpr KDCoordinate k_topMargin = 10; static constexpr KDCoordinate k_bottomMargin = 15; static constexpr KDCoordinate k_leftMargin = 1; @@ -49,6 +50,7 @@ protected: virtual void updateNumberOfColumns(); Interval * m_interval; int m_numberOfColumns; + bool m_numberOfColumnsNeedUpdate; private: virtual Function * functionAtColumn(int i); Responder * tabController() const override; @@ -69,7 +71,6 @@ private: EvenOddEditableTextCell * m_abscissaCells[k_maxNumberOfAbscissaCells]; virtual FunctionStore * functionStore() const = 0; virtual ValuesFunctionParameterController * functionParameterController() = 0; - uint32_t * m_modelVersion; ValuesParameterController m_abscissaParameterController; Button m_setIntervalButton; };