mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-20 09:17:23 +01:00
[apps/statistics] Make data controller inherits from editable cell table
view controller Change-Id: I06051c40edff8eac8ac326b061bb7e03bf74ef8a
This commit is contained in:
@@ -7,12 +7,11 @@
|
||||
namespace Statistics {
|
||||
|
||||
DataController::DataController(Responder * parentResponder, Data * data) :
|
||||
ViewController(parentResponder),
|
||||
EditableCellTableViewController(parentResponder, Metric::TopMargin, Metric::RightMargin, Metric::BottomMargin, Metric::LeftMargin),
|
||||
m_editableCells{EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer), EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer), EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer), EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer), EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer),
|
||||
EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer), EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer), EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer), EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer), EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer),
|
||||
EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer), EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer), EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer), EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer), EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer),
|
||||
EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer), EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer), EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer), EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer), EvenOddEditableTextCell(&m_selectableTableView, this, m_draftTextBuffer)},
|
||||
m_selectableTableView(SelectableTableView(this, this, Metric::TopMargin, Metric::RightMargin, Metric::BottomMargin, Metric::LeftMargin, this)),
|
||||
m_data(data)
|
||||
{
|
||||
}
|
||||
@@ -21,54 +20,10 @@ const char * DataController::title() const {
|
||||
return "Donnees";
|
||||
}
|
||||
|
||||
View * DataController::view() {
|
||||
return &m_selectableTableView;
|
||||
}
|
||||
|
||||
bool DataController::textFieldDidReceiveEvent(TextField * textField, Ion::Events::Event event) {
|
||||
App * myApp = (App *)app();
|
||||
return myApp->textFieldDidReceiveEvent(textField, event);
|
||||
}
|
||||
|
||||
bool DataController::textFieldDidFinishEditing(TextField * textField, const char * text) {
|
||||
AppsContainer * appsContainer = (AppsContainer *)app()->container();
|
||||
Context * globalContext = appsContainer->globalContext();
|
||||
if (m_selectableTableView.selectedColumn() == 0) {
|
||||
float floatBody = Expression::parse(text)->approximate(*globalContext);
|
||||
m_data->setValueAtIndex(floatBody, m_selectableTableView.selectedRow()-1);
|
||||
} else {
|
||||
int size = Expression::parse(text)->approximate(*globalContext);
|
||||
m_data->setSizeAtIndex(size, m_selectableTableView.selectedRow()-1);
|
||||
}
|
||||
willDisplayCellAtLocation(m_selectableTableView.cellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow()), m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow());
|
||||
m_selectableTableView.reloadData();
|
||||
return true;
|
||||
}
|
||||
|
||||
void DataController::tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY) {
|
||||
if (previousSelectedCellY > 0) {
|
||||
EvenOddEditableTextCell * myCell = (EvenOddEditableTextCell *)t->cellAtLocation(previousSelectedCellX, previousSelectedCellY);
|
||||
myCell->setEditing(false);
|
||||
app()->setFirstResponder(t);
|
||||
}
|
||||
if (t->selectedRow() > 0) {
|
||||
EvenOddEditableTextCell * myCell = (EvenOddEditableTextCell *)t->cellAtLocation(t->selectedColumn(), t->selectedRow());
|
||||
app()->setFirstResponder(myCell);
|
||||
}
|
||||
}
|
||||
|
||||
int DataController::numberOfRows() {
|
||||
return m_data->numberOfPairs() + 2;
|
||||
};
|
||||
|
||||
int DataController::numberOfColumns() {
|
||||
return 2;
|
||||
};
|
||||
|
||||
KDCoordinate DataController::rowHeight(int j) {
|
||||
return k_cellHeight;
|
||||
}
|
||||
|
||||
KDCoordinate DataController::columnWidth(int i) {
|
||||
return k_cellWidth;
|
||||
}
|
||||
@@ -77,18 +32,10 @@ KDCoordinate DataController::cumulatedWidthFromIndex(int i) {
|
||||
return i*k_cellWidth;
|
||||
}
|
||||
|
||||
KDCoordinate DataController::cumulatedHeightFromIndex(int j) {
|
||||
return j*k_cellHeight;
|
||||
}
|
||||
|
||||
int DataController::indexFromCumulatedWidth(KDCoordinate offsetX) {
|
||||
return (offsetX-1) / k_cellWidth;
|
||||
}
|
||||
|
||||
int DataController::indexFromCumulatedHeight(KDCoordinate offsetY) {
|
||||
return (offsetY-1) / k_cellHeight;
|
||||
}
|
||||
|
||||
TableViewCell * DataController::reusableCell(int index, int type) {
|
||||
assert(index >= 0);
|
||||
switch (type) {
|
||||
@@ -112,53 +59,19 @@ int DataController::reusableCellCount(int type) {
|
||||
}
|
||||
|
||||
void DataController::willDisplayCellAtLocation(TableViewCell * cell, int i, int j) {
|
||||
EvenOddCell * myCell = (EvenOddCell *)cell;
|
||||
myCell->setEven(j%2 == 0);
|
||||
myCell->setHighlighted(i == m_selectableTableView.selectedColumn() && j == m_selectableTableView.selectedRow());
|
||||
if (j == 0) {
|
||||
EvenOddPointerTextCell * mytitleCell = (EvenOddPointerTextCell *)cell;
|
||||
if (i == 0) {
|
||||
mytitleCell->setText("Valeurs");
|
||||
return;
|
||||
}
|
||||
mytitleCell->setText("Effectifs");
|
||||
EditableCellTableViewController::willDisplayCellAtLocation(cell, i, j);
|
||||
EvenOddPointerTextCell * mytitleCell = (EvenOddPointerTextCell *)cell;
|
||||
if (i == 0) {
|
||||
mytitleCell->setText("Valeurs");
|
||||
return;
|
||||
}
|
||||
// The cell is editable
|
||||
EvenOddEditableTextCell * myEditableValueCell = (EvenOddEditableTextCell *)cell;
|
||||
char buffer[Constant::FloatBufferSizeInScientificMode];
|
||||
// Special case 1: last row
|
||||
if (j == numberOfRows() - 1) {
|
||||
/* Display an empty line only if there is enough space for a new element in
|
||||
* data */
|
||||
int numberOfPairs = m_data->numberOfPairs();
|
||||
if (numberOfPairs < Data::k_maxNumberOfPairs) {
|
||||
buffer[0] = 0;
|
||||
myEditableValueCell->setText(buffer);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (i == 0) {
|
||||
Float(m_data->valueAtIndex(j-1)).convertFloatToText(buffer, Constant::FloatBufferSizeInScientificMode, Constant::NumberOfDigitsInMantissaInScientificMode);
|
||||
} else {
|
||||
Float(m_data->sizeAtIndex(j-1)).convertFloatToText(buffer, Constant::FloatBufferSizeInScientificMode, Constant::NumberOfDigitsInMantissaInScientificMode);
|
||||
}
|
||||
myEditableValueCell->setText(buffer);
|
||||
mytitleCell->setText("Effectifs");
|
||||
}
|
||||
|
||||
int DataController::typeAtLocation(int i, int j) {
|
||||
return j!=0;
|
||||
}
|
||||
|
||||
void DataController::didBecomeFirstResponder() {
|
||||
if (m_selectableTableView.selectedRow() == -1) {
|
||||
m_selectableTableView.selectCellAtLocation(0, 0);
|
||||
} else {
|
||||
m_selectableTableView.selectCellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow());
|
||||
}
|
||||
app()->setFirstResponder(&m_selectableTableView);
|
||||
}
|
||||
|
||||
bool DataController::handleEvent(Ion::Events::Event event) {
|
||||
if (event == Ion::Events::Up) {
|
||||
m_selectableTableView.deselectTable();
|
||||
@@ -173,4 +86,35 @@ Responder * DataController::tabController() const {
|
||||
return (parentResponder()->parentResponder());
|
||||
}
|
||||
|
||||
bool DataController::cellAtLocationIsEditable(int columnIndex, int rowIndex) {
|
||||
if (rowIndex > 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void DataController::setElementLinkedToCellLocationInModel(float floatBody, int columnIndex, int rowIndex) {
|
||||
if (columnIndex == 0) {
|
||||
m_data->setValueAtIndex(floatBody, rowIndex-1);
|
||||
} else {
|
||||
m_data->setSizeAtIndex(floatBody, rowIndex-1);
|
||||
}
|
||||
}
|
||||
|
||||
float DataController::elementInModelLinkedToCellLocation(int columnIndex, int rowIndex) {
|
||||
if (columnIndex == 0) {
|
||||
return m_data->valueAtIndex(rowIndex-1);
|
||||
} else {
|
||||
return m_data->sizeAtIndex(rowIndex-1);
|
||||
}
|
||||
}
|
||||
|
||||
int DataController::modelNumberOfElements() {
|
||||
return m_data->numberOfPairs();
|
||||
}
|
||||
|
||||
int DataController::modelMaxNumberOfElements() const {
|
||||
return Data::k_maxNumberOfPairs;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user