[apps/variable_box_controller] Shift memoization after deleting item

This commit is contained in:
Léa Saviot
2019-01-10 11:12:44 +01:00
parent be3ab70e67
commit 35cc26b68a
2 changed files with 13 additions and 2 deletions

View File

@@ -59,8 +59,7 @@ bool VariableBoxController::handleEvent(Ion::Events::Event event) {
if (event == Ion::Events::Backspace && m_currentPage != Page::RootMenu && m_lockPageDelete != m_currentPage && !isDisplayingEmptyController()) {
int rowIndex = selectedRow();
m_selectableTableView.deselectTable();
Storage::Record record = recordAtIndex(rowIndex);
record.destroy();
destroyRecordAtRowIndex(rowIndex);
int newSelectedRow = rowIndex >= numberOfRows() ? numberOfRows()-1 : rowIndex;
selectCellAtLocation(selectedColumn(), newSelectedRow);
m_selectableTableView.reloadData();
@@ -265,3 +264,14 @@ void VariableBoxController::resetMemoization() {
}
m_firstMemoizedLayoutIndex = 0;
}
void VariableBoxController::destroyRecordAtRowIndex(int rowIndex) {
// Destroy the record
recordAtIndex(rowIndex).destroy();
// Shift the memoization
assert(rowIndex >= m_firstMemoizedLayoutIndex && rowIndex < m_firstMemoizedLayoutIndex + k_maxNumberOfDisplayedRows);
for (int i = rowIndex - m_firstMemoizedLayoutIndex; i < k_maxNumberOfDisplayedRows - 1; i++) {
m_layouts[i] = m_layouts[i+1];
}
m_layouts[k_maxNumberOfDisplayedRows - 1] = Layout();
}