diff --git a/apps/shared/float_pair_store.cpp b/apps/shared/float_pair_store.cpp index d5328cf79..4f5d9c4bc 100644 --- a/apps/shared/float_pair_store.cpp +++ b/apps/shared/float_pair_store.cpp @@ -19,7 +19,7 @@ void FloatPairStore::set(double f, int series, int i, int j) { } } -int FloatPairStore::numberOfPairs() const { +int FloatPairStore::numberOfPairsOfAllSeries() const { int result = 0; for (int i = 0; i < k_numberOfSeries; i++) { result += m_numberOfPairs[i]; diff --git a/apps/shared/float_pair_store.h b/apps/shared/float_pair_store.h index 8d41a4c55..94a61032b 100644 --- a/apps/shared/float_pair_store.h +++ b/apps/shared/float_pair_store.h @@ -21,7 +21,11 @@ public: return m_data[series][i][j]; } void set(double f, int series, int i, int j); - int numberOfPairs() const; + int numberOfPairsOfAllSeries() const; + int numberOfPairs(int series) const { + assert(series >= 0 && series < k_numberOfSeries); + return m_numberOfPairs[series]; + } void deletePairAtIndex(int series, int j); void deleteAllPairs(int series); void deleteAllPairsOfAllSeries(); diff --git a/apps/shared/store_controller.cpp b/apps/shared/store_controller.cpp index 81ed0e1d5..0716340fe 100644 --- a/apps/shared/store_controller.cpp +++ b/apps/shared/store_controller.cpp @@ -60,6 +60,13 @@ int StoreController::typeAtLocation(int i, int j) { } void StoreController::willDisplayCellAtLocation(HighlightCell * cell, int i, int j) { + // Handle empty cells + if (j > m_store->numberOfPairs(seriesAtColumn(i)) && j < numberOfRows() - 1) { + ((EvenOddCell *)cell)->setEven(j%2 == 0); + assert(cellAtLocationIsEditable(i, j)); + ((EvenOddEditableTextCell *)cell)->editableTextCell()->textField()->setText(""); + return; + } willDisplayCellAtLocationWithDisplayMode(cell, i, j, PrintFloat::Mode::Decimal); } @@ -78,7 +85,7 @@ bool StoreController::handleEvent(Ion::Events::Event event) { return true; } assert(selectedColumn() >= 0 && selectedColumn() < numberOfColumns()); - int series = selectedColumn()/k_numberOfColumnsPerSeries; + int series = seriesAtColumn(selectedColumn()); if ((event == Ion::Events::OK || event == Ion::Events::EXE) && selectedRow() == 0) { m_storeParameterController.selectXColumn(selectedColumn()%k_numberOfColumnsPerSeries == 0); m_storeParameterController.selectSeries(series); @@ -109,16 +116,16 @@ bool StoreController::cellAtLocationIsEditable(int columnIndex, int rowIndex) { } bool StoreController::setDataAtLocation(double floatBody, int columnIndex, int rowIndex) { - m_store->set(floatBody, columnIndex/k_numberOfColumnsPerSeries, columnIndex%k_numberOfColumnsPerSeries, rowIndex-1); + m_store->set(floatBody, seriesAtColumn(columnIndex), columnIndex%k_numberOfColumnsPerSeries, rowIndex-1); return true; } double StoreController::dataAtLocation(int columnIndex, int rowIndex) { - return m_store->get(columnIndex/k_numberOfColumnsPerSeries, columnIndex%k_numberOfColumnsPerSeries, rowIndex-1); + return m_store->get(seriesAtColumn(columnIndex), columnIndex%k_numberOfColumnsPerSeries, rowIndex-1); } int StoreController::numberOfElements() { - return m_store->numberOfPairs(); + return m_store->numberOfPairsOfAllSeries(); } int StoreController::maxNumberOfElements() const { diff --git a/apps/shared/store_controller.h b/apps/shared/store_controller.h index 0c815f0ae..0bb1ea150 100644 --- a/apps/shared/store_controller.h +++ b/apps/shared/store_controller.h @@ -40,6 +40,7 @@ protected: int maxNumberOfElements() const override; virtual HighlightCell * titleCells(int index) = 0; char m_draftTextBuffer[TextField::maxBufferSize()]; + int seriesAtColumn(int column) const { return column / k_numberOfColumnsPerSeries; } EvenOddEditableTextCell * m_editableCells[k_maxNumberOfEditableCells]; FloatPairStore * m_store; StoreParameterController m_storeParameterController;