mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-19 22:00:28 +01:00
[apps/variable_box_controller] Shift memoization after deleting item
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user