mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-18 16:27:34 +01:00
[apps/shared/editable_cell_table_view_controller] numberOfElements depends on column
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user