From 413397652cb54bf879fd3218b6aaa987fb3441c2 Mon Sep 17 00:00:00 2001 From: Ruben Dashyan Date: Fri, 6 Sep 2019 17:21:31 +0200 Subject: [PATCH] [apps/*/expression_model_list_controller] Refactor modelStore() Its return type is covariant. Get the ExpressionModelStore from the App. --- apps/graph/list/list_controller.cpp | 12 ++++++++---- apps/graph/list/list_controller.h | 3 ++- apps/sequence/list/list_controller.cpp | 4 ++++ apps/sequence/list/list_controller.h | 2 +- apps/shared/function_list_controller.cpp | 4 ---- apps/shared/function_list_controller.h | 1 - apps/solver/app.h | 6 ++++++ apps/solver/list_controller.cpp | 5 ++++- apps/solver/list_controller.h | 3 +-- 9 files changed, 26 insertions(+), 14 deletions(-) diff --git a/apps/graph/list/list_controller.cpp b/apps/graph/list/list_controller.cpp index ed6668b93..5b8416c4c 100644 --- a/apps/graph/list/list_controller.cpp +++ b/apps/graph/list/list_controller.cpp @@ -118,7 +118,7 @@ bool ListController::textFieldDidAbortEditing(TextField * textField) { // Put the name column back to normal size computeTitlesColumnWidth(); selectableTableView()->reloadData(); - ExpiringPointer function = modelStore()->modelForRecord(modelStore()->recordAtIndex(selectedRow())); + ExpiringPointer function = modelStore()->modelForRecord(modelStore()->recordAtIndex(selectedRow())); setFunctionNameInTextField(function, textField); m_selectableTableView.selectedCell()->setHighlighted(true); Container::activeApp()->setFirstResponder(&m_selectableTableView); @@ -165,7 +165,7 @@ void ListController::willDisplayTitleCellAtIndex(HighlightCell * cell, int j) { titleCell->setBaseline(baseline(j)); if (!titleCell->isEditing()) { // Set name and color if the name is not being edited - ExpiringPointer function = modelStore()->modelForRecord(modelStore()->recordAtIndex(j)); + ExpiringPointer function = modelStore()->modelForRecord(modelStore()->recordAtIndex(j)); setFunctionNameInTextField(function, titleCell->textField()); KDColor functionNameColor = function->isActive() ? function->color() : Palette::GreyDark; titleCell->setColor(functionNameColor); @@ -177,16 +177,20 @@ void ListController::willDisplayExpressionCellAtIndex(HighlightCell * cell, int assert(j >= 0 && j < modelStore()->numberOfModels()); Shared::FunctionListController::willDisplayExpressionCellAtIndex(cell, j); FunctionExpressionCell * myCell = (FunctionExpressionCell *)cell; - ExpiringPointer f = modelStore()->modelForRecord(modelStore()->recordAtIndex(j)); + ExpiringPointer f = modelStore()->modelForRecord(modelStore()->recordAtIndex(j)); KDColor textColor = f->isActive() ? KDColorBlack : Palette::GreyDark; myCell->setTextColor(textColor); } -void ListController::setFunctionNameInTextField(ExpiringPointer function, TextField * textField) { +void ListController::setFunctionNameInTextField(ExpiringPointer function, TextField * textField) { assert(textField != nullptr); char bufferName[BufferTextView::k_maxNumberOfChar]; function->nameWithArgument(bufferName, BufferTextView::k_maxNumberOfChar); textField->setText(bufferName); } +CartesianFunctionStore * ListController::modelStore() { + return App::app()->functionStore(); +} + } diff --git a/apps/graph/list/list_controller.h b/apps/graph/list/list_controller.h index ca1d9ca06..f7ffdde8a 100644 --- a/apps/graph/list/list_controller.h +++ b/apps/graph/list/list_controller.h @@ -29,7 +29,8 @@ private: HighlightCell * expressionCells(int index) override; void willDisplayTitleCellAtIndex(HighlightCell * cell, int j) override; void willDisplayExpressionCellAtIndex(HighlightCell * cell, int j) override; - void setFunctionNameInTextField(Shared::ExpiringPointer function, TextField * textField); + void setFunctionNameInTextField(Shared::ExpiringPointer function, TextField * textField); + CartesianFunctionStore * modelStore() override; TextFieldFunctionTitleCell m_functionTitleCells[k_maxNumberOfDisplayableRows]; Shared::FunctionExpressionCell m_expressionCells[k_maxNumberOfDisplayableRows]; ListParameterController m_parameterController; diff --git a/apps/sequence/list/list_controller.cpp b/apps/sequence/list/list_controller.cpp index e198394e5..f09d9340a 100644 --- a/apps/sequence/list/list_controller.cpp +++ b/apps/sequence/list/list_controller.cpp @@ -291,4 +291,8 @@ bool ListController::removeModelRow(Ion::Storage::Record record) { return true; } +SequenceStore * ListController::modelStore() { + return App::app()->functionStore(); +} + } diff --git a/apps/sequence/list/list_controller.h b/apps/sequence/list/list_controller.h index fac7b61a1..70387a3bb 100644 --- a/apps/sequence/list/list_controller.h +++ b/apps/sequence/list/list_controller.h @@ -40,7 +40,7 @@ private: void reinitSelectedExpression(Shared::ExpiringPointer model) override; void editExpression(Ion::Events::Event event) override; bool removeModelRow(Ion::Storage::Record record) override; - SequenceStore * modelStore() override { return static_cast(Shared::FunctionListController::modelStore()); } + SequenceStore * modelStore() override; constexpr static int k_maxNumberOfRows = 3*MaxNumberOfSequences; SequenceTitleCell m_sequenceTitleCells[k_maxNumberOfRows]; Shared::FunctionExpressionCell m_expressionCells[k_maxNumberOfRows]; diff --git a/apps/shared/function_list_controller.cpp b/apps/shared/function_list_controller.cpp index e27acf0cb..9b92dc46b 100644 --- a/apps/shared/function_list_controller.cpp +++ b/apps/shared/function_list_controller.cpp @@ -248,10 +248,6 @@ TabViewController * FunctionListController::tabController() const { return static_cast(parentResponder()->parentResponder()->parentResponder()->parentResponder()); } -FunctionStore * FunctionListController::modelStore() { - return FunctionApp::app()->functionStore(); -} - InputViewController * FunctionListController::inputController() { return FunctionApp::app()->inputViewController(); } diff --git a/apps/shared/function_list_controller.h b/apps/shared/function_list_controller.h index 4499e4bea..2e1d4e7b7 100644 --- a/apps/shared/function_list_controller.h +++ b/apps/shared/function_list_controller.h @@ -53,7 +53,6 @@ protected: StackViewController * stackController() const; void configureFunction(Ion::Storage::Record record); void computeTitlesColumnWidth(bool forceMax = false); - FunctionStore * modelStore() override; KDCoordinate baseline(int j); void resetMemoizationForIndex(int index) override; void shiftMemoization(bool newCellIsUnder) override; diff --git a/apps/solver/app.h b/apps/solver/app.h index fd3f30e24..f855ef14d 100644 --- a/apps/solver/app.h +++ b/apps/solver/app.h @@ -32,6 +32,12 @@ public: static App * app() { return static_cast(Container::activeApp()); } + Snapshot * snapshot() { + return static_cast(::App::snapshot()); + } + EquationStore * equationStore() { + return snapshot()->equationStore(); + } InputViewController * inputViewController() { return &m_inputViewController; } ViewController * solutionsControllerStack() { return &m_alternateEmptyViewController; } ViewController * intervalController() { return &m_intervalController; } diff --git a/apps/solver/list_controller.cpp b/apps/solver/list_controller.cpp index f17ac6988..33c860690 100644 --- a/apps/solver/list_controller.cpp +++ b/apps/solver/list_controller.cpp @@ -10,7 +10,6 @@ namespace Solver { ListController::ListController(Responder * parentResponder, EquationStore * equationStore, ButtonRowController * footer) : ExpressionModelListController(parentResponder, I18n::Message::AddEquation), ButtonRowDelegate(nullptr, footer), - m_equationStore(equationStore), m_equationListView(this), m_expressionCells{}, m_resolveButton(this, equationStore->numberOfDefinedModels() > 1 ? I18n::Message::ResolveSystem : I18n::Message::ResolveEquation, Invocation([](void * context, void * sender) { @@ -221,6 +220,10 @@ void ListController::reloadBrace() { m_equationListView.setBraceStyle(braceStyle); } +EquationStore * ListController::modelStore() { + return App::app()->equationStore(); +} + SelectableTableView * ListController::selectableTableView() { return m_equationListView.selectableTableView(); } diff --git a/apps/solver/list_controller.h b/apps/solver/list_controller.h index b640b63ac..c1caba9bd 100644 --- a/apps/solver/list_controller.h +++ b/apps/solver/list_controller.h @@ -51,13 +51,12 @@ private: void addEmptyModel() override; bool removeModelRow(Ion::Storage::Record record) override; void reloadBrace(); - EquationStore * modelStore() override { return m_equationStore; } + EquationStore * modelStore() override; StackViewController * stackController() const; InputViewController * inputController() override; // ListViewDataSource KDCoordinate notMemoizedCumulatedHeightFromIndex(int j) override { return ListViewDataSource::cumulatedHeightFromIndex(j); } int notMemoizedIndexFromCumulatedHeight(KDCoordinate offsetY) override { return ListViewDataSource::indexFromCumulatedHeight(offsetY); } - EquationStore * m_equationStore; EquationListView m_equationListView; EvenOddExpressionCell m_expressionCells[k_maxNumberOfRows]; Button m_resolveButton;