From ba73e259ad67c5369544cda7b0f1022ca223c6be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Tue, 6 Jun 2017 11:15:02 +0200 Subject: [PATCH] [apps/shared] Resolve bug: when deleting an editable cell, reselect (and thereby make it first responder) the right cell Change-Id: Ia5bd99c338c93f0e81656ccc9271f486e51fd22b --- apps/home/controller.cpp | 1 - apps/settings/sub_controller.cpp | 4 ++++ apps/settings/sub_controller.h | 1 + apps/shared/float_parameter_controller.cpp | 2 +- apps/shared/store_controller.cpp | 1 - apps/shared/values_controller.cpp | 1 - escher/include/escher/selectable_table_view.h | 1 + escher/include/escher/table_view.h | 2 +- escher/src/selectable_table_view.cpp | 8 ++++++++ 9 files changed, 16 insertions(+), 5 deletions(-) diff --git a/apps/home/controller.cpp b/apps/home/controller.cpp index 9e7eec457..99a19add5 100644 --- a/apps/home/controller.cpp +++ b/apps/home/controller.cpp @@ -64,7 +64,6 @@ void Controller::didBecomeFirstResponder() { } void Controller::viewWillAppear() { - m_view.selectableTableView()->reloadData(); } View * Controller::view() { diff --git a/apps/settings/sub_controller.cpp b/apps/settings/sub_controller.cpp index d7115e73e..14654adce 100644 --- a/apps/settings/sub_controller.cpp +++ b/apps/settings/sub_controller.cpp @@ -175,6 +175,10 @@ void SubController::viewWillAppear() { m_selectableTableView.reloadData(); } +void SubController::viewDidDisappear() { + m_selectableTableView.deselectTable(); +} + StackViewController * SubController::stackController() const { return (StackViewController *)parentResponder(); } diff --git a/apps/settings/sub_controller.h b/apps/settings/sub_controller.h index 4d7cd4c22..ae6dddd3b 100644 --- a/apps/settings/sub_controller.h +++ b/apps/settings/sub_controller.h @@ -26,6 +26,7 @@ public: void willDisplayCellForIndex(HighlightCell * cell, int index) override; void setNodeModel(const Node * nodeModel); void viewWillAppear() override; + void viewDidDisappear() override; private: StackViewController * stackController() const; void setPreferenceWithValueIndex(I18n::Message message, int valueIndex); diff --git a/apps/shared/float_parameter_controller.cpp b/apps/shared/float_parameter_controller.cpp index 4b2e6b2f2..af2341b32 100644 --- a/apps/shared/float_parameter_controller.cpp +++ b/apps/shared/float_parameter_controller.cpp @@ -27,7 +27,6 @@ void FloatParameterController::didBecomeFirstResponder() { void FloatParameterController::viewWillAppear() { DynamicViewController::viewWillAppear(); - selectableTableView()->reloadData(); if (selectedRow() == -1 || selectedRow() == numberOfRows()-1) { selectCellAtLocation(0, 0); } else { @@ -37,6 +36,7 @@ void FloatParameterController::viewWillAppear() { selColumn = selColumn >= numberOfColumns() ? numberOfColumns() - 1 : selColumn; selectCellAtLocation(selColumn, selRow); } + selectableTableView()->reloadData(); } void FloatParameterController::willExitResponderChain(Responder * nextFirstResponder) { diff --git a/apps/shared/store_controller.cpp b/apps/shared/store_controller.cpp index 1aad3d9c2..7cb3ed70a 100644 --- a/apps/shared/store_controller.cpp +++ b/apps/shared/store_controller.cpp @@ -92,7 +92,6 @@ bool StoreController::handleEvent(Ion::Events::Event event) { } m_store->deletePairAtIndex(selectedRow()-1); selectableTableView()->reloadData(); - selectableTableView()->selectCellAtLocation(selectedColumn(), selectedRow()); return true; } return false; diff --git a/apps/shared/values_controller.cpp b/apps/shared/values_controller.cpp index 18c96d850..714beeae0 100644 --- a/apps/shared/values_controller.cpp +++ b/apps/shared/values_controller.cpp @@ -62,7 +62,6 @@ bool ValuesController::handleEvent(Ion::Events::Event event) { (selectedRow() < numberOfRows()-1 || m_interval->numberOfElements() == Interval::k_maxNumberOfElements)) { m_interval->deleteElementAtIndex(selectedRow()-1); selectableTableView()->reloadData(); - selectableTableView()->selectCellAtLocation(selectedColumn(), selectedRow()); return true; } if (event == Ion::Events::OK || event == Ion::Events::EXE) { diff --git a/escher/include/escher/selectable_table_view.h b/escher/include/escher/selectable_table_view.h index f42c54e6d..70bdbbb6d 100644 --- a/escher/include/escher/selectable_table_view.h +++ b/escher/include/escher/selectable_table_view.h @@ -27,6 +27,7 @@ public: int selectedColumn(); void selectRow(int j); void selectColumn(int i); + void reloadData() override; virtual bool handleEvent(Ion::Events::Event event) override; virtual void didEnterResponderChain(Responder * previousFirstResponder) override; virtual void willExitResponderChain(Responder * nextFirstResponder) override; diff --git a/escher/include/escher/table_view.h b/escher/include/escher/table_view.h index bc57b81cd..012a2a0f1 100644 --- a/escher/include/escher/table_view.h +++ b/escher/include/escher/table_view.h @@ -16,7 +16,7 @@ public: virtual void scrollToCell(int i, int j); HighlightCell * cellAtLocation(int i, int j); - void reloadData(); + virtual void reloadData(); void reloadCellAtLocation(int i, int j); KDSize size() const; protected: diff --git a/escher/src/selectable_table_view.cpp b/escher/src/selectable_table_view.cpp index b706d6495..3641674aa 100644 --- a/escher/src/selectable_table_view.cpp +++ b/escher/src/selectable_table_view.cpp @@ -29,6 +29,14 @@ void SelectableTableView::selectColumn(int i) { m_selectionDataSource->selectColumn(i); } +void SelectableTableView::reloadData() { + int col = selectedColumn(); + int row = selectedRow(); + deselectTable(); + TableView::reloadData(); + selectCellAtLocation(col, row); +} + void SelectableTableView::didEnterResponderChain(Responder * previousFirstResponder) { selectCellAtLocation(selectedColumn(), selectedRow()); if (m_delegate) {