diff --git a/apps/graph/list/list_controller.cpp b/apps/graph/list/list_controller.cpp index 3ca116806..883776942 100644 --- a/apps/graph/list/list_controller.cpp +++ b/apps/graph/list/list_controller.cpp @@ -141,6 +141,7 @@ void ListController::editExpression(FunctionExpressionView * functionCell, Ion:: }, [](void * context, void * sender){ }); + m_selectableTableView.dataHasChanged(true); } bool ListController::handleEvent(Ion::Events::Event event) { @@ -170,6 +171,8 @@ bool ListController::handleEnter() { return true; } configureFunction(m_functionStore->functionAtIndex(m_selectableTableView.selectedRow())); + // Force to reload the table (deleted functions, desactivated function) + m_selectableTableView.dataHasChanged(true); return true; } case 1: diff --git a/apps/graph/list/parameter_controller.cpp b/apps/graph/list/parameter_controller.cpp index cb2ead430..797fb8272 100644 --- a/apps/graph/list/parameter_controller.cpp +++ b/apps/graph/list/parameter_controller.cpp @@ -23,6 +23,7 @@ View * ParameterController::view() { } void ParameterController::didBecomeFirstResponder() { + m_selectableTableView.dataHasChanged(true); m_selectableTableView.selectCellAtLocation(0, 0); app()->setFirstResponder(&m_selectableTableView); } diff --git a/apps/graph/values/function_parameter_controller.cpp b/apps/graph/values/function_parameter_controller.cpp index ea10ee718..84060b59f 100644 --- a/apps/graph/values/function_parameter_controller.cpp +++ b/apps/graph/values/function_parameter_controller.cpp @@ -33,6 +33,7 @@ void FunctionParameterController::setFunction(Function * function) { } void FunctionParameterController::didBecomeFirstResponder() { + m_selectableTableView.dataHasChanged(true); m_selectableTableView.selectCellAtLocation(0, 0); app()->setFirstResponder(&m_selectableTableView); } diff --git a/apps/graph/values/values_controller.cpp b/apps/graph/values/values_controller.cpp index b743ff113..b6528a206 100644 --- a/apps/graph/values/values_controller.cpp +++ b/apps/graph/values/values_controller.cpp @@ -22,6 +22,7 @@ ValuesController::ValuesController(Responder * parentResponder, FunctionStore * m_derivativeParameterController(DerivativeParameterController(this)), m_setIntervalButton(Button(this, "Regler l'intervalle",Invocation([](void * context, void * sender) { ValuesController * valuesController = (ValuesController *) context; + valuesController->hasChangedTableData(); StackViewController * stack = ((StackViewController *)valuesController->stackController()); stack->push(valuesController->intervalParameterController()); }, this), KDText::FontSize::Small)) @@ -68,16 +69,20 @@ bool ValuesController::handleEvent(Ion::Events::Event event) { } if (event == Ion::Events::OK) { if (activeRow() == -1) { + m_selectableTableView.dataHasChanged(true); return headerViewController()->handleEvent(event); } if (activeRow() == 0) { if (activeColumn() == 0) { + m_selectableTableView.dataHasChanged(true); configureAbscissa(); return true; } if (isDerivativeColumn(activeColumn())) { + m_selectableTableView.dataHasChanged(true); configureDerivativeFunction(); } else { + m_selectableTableView.dataHasChanged(true); configureFunction(); } return true; @@ -272,6 +277,10 @@ Responder * ValuesController::defaultController() { return tabController(); } +void ValuesController::hasChangedTableData() { + m_selectableTableView.dataHasChanged(true); +} + int ValuesController::activeRow() { return m_selectableTableView.selectedRow(); } diff --git a/apps/graph/values/values_controller.h b/apps/graph/values/values_controller.h index 8b46e3ecf..664a9b000 100644 --- a/apps/graph/values/values_controller.h +++ b/apps/graph/values/values_controller.h @@ -34,6 +34,7 @@ public: bool isEmpty() const override; const char * emptyMessage() override; Responder * defaultController() override; + void hasChangedTableData(); static constexpr KDCoordinate k_topMargin = 10; static constexpr KDCoordinate k_bottomMargin = 5; static constexpr KDCoordinate k_leftMargin = 1; diff --git a/apps/probability/image_table_view.cpp b/apps/probability/image_table_view.cpp index cd6bb0b34..8ae15b3ba 100644 --- a/apps/probability/image_table_view.cpp +++ b/apps/probability/image_table_view.cpp @@ -59,6 +59,7 @@ void ImageTableView::setCalculation(Calculation * calculation, int index) { } void ImageTableView::didBecomeFirstResponder() { + m_selectableTableView.dataHasChanged(true); m_isSelected = true; if (m_selectableTableView.selectedRow() == -1) { m_selectableTableView.selectCellAtLocation(0, 0); diff --git a/apps/settings/main_controller.cpp b/apps/settings/main_controller.cpp index ebe6fe13c..1539c6918 100644 --- a/apps/settings/main_controller.cpp +++ b/apps/settings/main_controller.cpp @@ -33,6 +33,7 @@ View * MainController::view() { } void MainController::didBecomeFirstResponder() { + m_selectableTableView.dataHasChanged(true); if (m_selectableTableView.selectedRow() < 0) { m_selectableTableView.selectCellAtLocation(0, 0); } @@ -42,6 +43,7 @@ void MainController::didBecomeFirstResponder() { bool MainController::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::OK) { m_subController.setNodeModel(m_nodeModel->children(m_selectableTableView.selectedRow()), m_selectableTableView.selectedRow()); + m_selectableTableView.dataHasChanged(true); StackViewController * stack = stackController(); stack->push(&m_subController); } diff --git a/apps/settings/sub_controller.cpp b/apps/settings/sub_controller.cpp index 7af1b5643..1760ec785 100644 --- a/apps/settings/sub_controller.cpp +++ b/apps/settings/sub_controller.cpp @@ -28,6 +28,7 @@ View * SubController::view() { } void SubController::didBecomeFirstResponder() { + m_selectableTableView.dataHasChanged(true); m_selectableTableView.selectCellAtLocation(0, valueIndexAtPreferenceIndex(m_preferenceIndex)); app()->setFirstResponder(&m_selectableTableView); } diff --git a/apps/store_controller.cpp b/apps/store_controller.cpp index 5a75baf14..35762d13c 100644 --- a/apps/store_controller.cpp +++ b/apps/store_controller.cpp @@ -75,6 +75,7 @@ bool StoreController::handleEvent(Ion::Events::Event event) { } if (event == Ion::Events::OK && m_selectableTableView.selectedRow() == 0) { m_storeParameterController.selectXColumn(m_selectableTableView.selectedColumn() == 0); + m_selectableTableView.dataHasChanged(true); StackViewController * stack = ((StackViewController *)parentResponder()->parentResponder()); stack->push(&m_storeParameterController); return true; diff --git a/escher/include/escher/selectable_table_view.h b/escher/include/escher/selectable_table_view.h index 1dc5f9af1..d687271ed 100644 --- a/escher/include/escher/selectable_table_view.h +++ b/escher/include/escher/selectable_table_view.h @@ -30,11 +30,13 @@ public: void deselectTable(); bool selectCellAtLocation(int i, int j); TableViewCell * selectedCell(); + void dataHasChanged(bool dataHasChanged); protected: SelectableTableViewDelegate * m_delegate; private: int m_selectedCellX; int m_selectedCellY; + bool m_dataHasChanged; }; #endif diff --git a/escher/src/selectable_table_view.cpp b/escher/src/selectable_table_view.cpp index 06210ee21..542cdb70f 100644 --- a/escher/src/selectable_table_view.cpp +++ b/escher/src/selectable_table_view.cpp @@ -9,7 +9,8 @@ SelectableTableView::SelectableTableView(Responder * parentResponder, TableViewD Responder(parentResponder), m_delegate(delegate), m_selectedCellX(0), - m_selectedCellY(-1) + m_selectedCellY(-1), + m_dataHasChanged(true) { } @@ -22,7 +23,10 @@ int SelectableTableView::selectedColumn() { } void SelectableTableView::didBecomeFirstResponder() { - reloadData(); + if (m_dataHasChanged) { + reloadData(); + m_dataHasChanged = false; + } if (m_delegate) { m_delegate->tableViewDidChangeSelection(this, 0, -1); } @@ -89,3 +93,7 @@ bool SelectableTableView::handleEvent(Ion::Events::Event event) { } return false; } + +void SelectableTableView::dataHasChanged(bool dataHasChanged) { + m_dataHasChanged = dataHasChanged; +}