From fa852934670d94d6d411da099f34688562adad86 Mon Sep 17 00:00:00 2001 From: Ruben Dashyan Date: Wed, 31 Jul 2019 16:44:30 +0200 Subject: [PATCH] [apps/shared/editable_cell_table_view_controller] numberOfElements depends on column --- .../editable_cell_table_view_controller.cpp | 9 +++++++-- apps/shared/editable_cell_table_view_controller.h | 2 +- apps/shared/store_controller.cpp | 15 +++++---------- apps/shared/store_controller.h | 2 +- apps/shared/values_controller.cpp | 6 +++--- apps/shared/values_controller.h | 2 +- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/apps/shared/editable_cell_table_view_controller.cpp b/apps/shared/editable_cell_table_view_controller.cpp index 3e9fea220..341dcb1ad 100644 --- a/apps/shared/editable_cell_table_view_controller.cpp +++ b/apps/shared/editable_cell_table_view_controller.cpp @@ -6,6 +6,8 @@ using namespace Poincare; +static inline int maxInt(int x, int y) { return x > y ? x : y; } + namespace Shared { EditableCellTableViewController::EditableCellTableViewController(Responder * parentResponder) : @@ -44,7 +46,10 @@ bool EditableCellTableViewController::textFieldDidFinishEditing(TextField * text } int EditableCellTableViewController::numberOfRows() { - int numberOfModelElements = numberOfElements(); + int numberOfModelElements = 0; + for (int i = 0; i < numberOfColumns(); i++) { + numberOfModelElements = maxInt(numberOfModelElements, numberOfElementsInColumn(i)); + } return 1 + numberOfModelElements + (numberOfModelElements < maxNumberOfElements()); } @@ -67,7 +72,7 @@ void EditableCellTableViewController::willDisplayCellAtLocationWithDisplayMode(H myCell->setEven(j%2 == 0); char buffer[PrintFloat::bufferSizeForFloatsWithPrecision(Preferences::LargeNumberOfSignificantDigits)]; // Special case 1: last row - if (j == numberOfElements() + 1) { + if (j == numberOfElementsInColumn(i) + 1) { /* Display an empty line only if there is enough space for a new element in * data */ buffer[0] = 0; diff --git a/apps/shared/editable_cell_table_view_controller.h b/apps/shared/editable_cell_table_view_controller.h index f6872f183..9ffc9d123 100644 --- a/apps/shared/editable_cell_table_view_controller.h +++ b/apps/shared/editable_cell_table_view_controller.h @@ -31,7 +31,7 @@ private: virtual bool cellAtLocationIsEditable(int columnIndex, int rowIndex) = 0; virtual bool setDataAtLocation(double floatBody, int columnIndex, int rowIndex) = 0; virtual double dataAtLocation(int columnIndex, int rowIndex) = 0; - virtual int numberOfElements() = 0; + virtual int numberOfElementsInColumn(int columnIndex) = 0; virtual int maxNumberOfElements() const = 0; }; diff --git a/apps/shared/store_controller.cpp b/apps/shared/store_controller.cpp index 8ffc2c424..a2ccdbb8f 100644 --- a/apps/shared/store_controller.cpp +++ b/apps/shared/store_controller.cpp @@ -8,7 +8,6 @@ using namespace Poincare; static inline int minInt(int x, int y) { return x < y ? x : y; } -static inline int maxInt(int x, int y) { return x > y ? x : y; } namespace Shared { @@ -159,7 +158,7 @@ void StoreController::willDisplayCellAtLocation(HighlightCell * cell, int i, int static_cast(cell)->setSeparatorLeft(shouldHaveLeftSeparator); } // Handle empty cells - const int numberOfElementsInCol = m_store->numberOfPairsOfSeries(seriesAtColumn(i)); + const int numberOfElementsInCol = numberOfElementsInColumn(i); if (j > numberOfElementsInCol) { StoreCell * myCell = static_cast(cell); myCell->editableTextCell()->textField()->setText(""); @@ -198,7 +197,7 @@ bool StoreController::handleEvent(Ion::Events::Event event) { return true; } if (event == Ion::Events::Backspace) { - if (selectedRow() == 0 || selectedRow() > m_store->numberOfPairsOfSeries(selectedColumn()/DoublePairStore::k_numberOfColumnsPerSeries)) { + if (selectedRow() == 0 || selectedRow() > numberOfElementsInColumn(selectedColumn())) { return false; } m_store->deletePairOfSeriesAtIndex(series, selectedRow()-1); @@ -240,12 +239,8 @@ double StoreController::dataAtLocation(int columnIndex, int rowIndex) { return m_store->get(seriesAtColumn(columnIndex), columnIndex%DoublePairStore::k_numberOfColumnsPerSeries, rowIndex-1); } -int StoreController::numberOfElements() { - int result = 0; - for (int i = 0; i < DoublePairStore::k_numberOfSeries; i++) { - result = maxInt(result, m_store->numberOfPairsOfSeries(i)); - } - return result; +int StoreController::numberOfElementsInColumn(int columnIndex) { + return m_store->numberOfPairsOfSeries(seriesAtColumn(columnIndex)); } int StoreController::maxNumberOfElements() const { @@ -277,7 +272,7 @@ bool StoreController::privateFillColumnWithFormula(Expression formula, Expressio index++; } if (numberOfValuesToCompute == -1) { - numberOfValuesToCompute = m_store->numberOfPairsOfSeries(selectedColumn()/DoublePairStore::k_numberOfColumnsPerSeries); + numberOfValuesToCompute = numberOfElementsInColumn(selectedColumn()); } StoreContext * store = storeContext(); diff --git a/apps/shared/store_controller.h b/apps/shared/store_controller.h index 05262ab88..dd877367f 100644 --- a/apps/shared/store_controller.h +++ b/apps/shared/store_controller.h @@ -79,7 +79,6 @@ protected: bool cellAtLocationIsEditable(int columnIndex, int rowIndex) override; bool setDataAtLocation(double floatBody, int columnIndex, int rowIndex) override; double dataAtLocation(int columnIndex, int rowIndex) override; - int numberOfElements() override; int maxNumberOfElements() const override; virtual HighlightCell * titleCells(int index) = 0; int seriesAtColumn(int column) const { return column / DoublePairStore::k_numberOfColumnsPerSeries; } @@ -88,6 +87,7 @@ protected: StoreCell m_editableCells[k_maxNumberOfEditableCells]; DoublePairStore * m_store; private: + int numberOfElementsInColumn(int columnIndex) override; ContentView m_contentView; }; diff --git a/apps/shared/values_controller.cpp b/apps/shared/values_controller.cpp index 38c2fa71c..5efd4e310 100644 --- a/apps/shared/values_controller.cpp +++ b/apps/shared/values_controller.cpp @@ -95,7 +95,7 @@ bool ValuesController::handleEvent(Ion::Events::Event event) { return true; } if (event == Ion::Events::Backspace && selectedRow() > 0 && - selectedRow() <= m_interval->numberOfElements()) { + selectedRow() <= numberOfElementsInColumn(selectedColumn())) { m_interval->deleteElementAtIndex(selectedRow()-1); selectableTableView()->reloadData(); return true; @@ -156,7 +156,7 @@ void ValuesController::willDisplayCellAtLocation(HighlightCell * cell, int i, in constexpr int precision = Preferences::LargeNumberOfSignificantDigits; char buffer[PrintFloat::bufferSizeForFloatsWithPrecision(precision)]; // Special case: last row - if (j == numberOfElements() + 1) { + if (j == numberOfElementsInColumn(i) + 1) { buffer[0] = 0; } else { double x = m_interval->element(j-1); @@ -307,7 +307,7 @@ double ValuesController::dataAtLocation(int columnIndex, int rowIndex) { return m_interval->element(rowIndex-1); } -int ValuesController::numberOfElements() { +int ValuesController::numberOfElementsInColumn(int columnIndex) { return m_interval->numberOfElements(); } diff --git a/apps/shared/values_controller.h b/apps/shared/values_controller.h index 06897ae97..6b1a9aad4 100644 --- a/apps/shared/values_controller.h +++ b/apps/shared/values_controller.h @@ -60,7 +60,7 @@ private: void configureFunction(); bool cellAtLocationIsEditable(int columnIndex, int rowIndex) override; double dataAtLocation(int columnIndex, int rowIndex) override; - int numberOfElements() override; + int numberOfElementsInColumn(int columnIndex) override; int maxNumberOfElements() const override; virtual double evaluationOfAbscissaAtColumn(double abscissa, int columnIndex); constexpr static int k_maxNumberOfAbscissaCells = 10;