diff --git a/apps/variable_box_controller.cpp b/apps/variable_box_controller.cpp index a9d8ac9a3..3c2b6abb9 100644 --- a/apps/variable_box_controller.cpp +++ b/apps/variable_box_controller.cpp @@ -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(); +} diff --git a/apps/variable_box_controller.h b/apps/variable_box_controller.h index 80fa9ede8..f4e986a97 100644 --- a/apps/variable_box_controller.h +++ b/apps/variable_box_controller.h @@ -51,6 +51,7 @@ private: bool displayEmptyController(); bool isDisplayingEmptyController() { return StackViewController::depth() == 2; } void resetMemoization(); + void destroyRecordAtRowIndex(int rowIndex); Page m_currentPage; Page m_lockPageDelete; ExpressionTableCellWithExpression m_leafCells[k_maxNumberOfDisplayedRows];