[apps/shared/editable_cell_table_view_controller] numberOfElements depends on column

This commit is contained in:
Ruben Dashyan
2019-07-31 16:44:30 +02:00
parent 73a99fd6d0
commit fa85293467
6 changed files with 18 additions and 18 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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