[apps] Do not display empty cells in store_controller

This commit is contained in:
Léa Saviot
2018-05-21 15:46:46 +02:00
parent 11251f03de
commit 551606037d
4 changed files with 18 additions and 6 deletions

View File

@@ -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];

View File

@@ -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();

View File

@@ -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 {

View File

@@ -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;