From 9200e6062dc3b4676e22b25832fcb52426e1e87b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Fri, 31 Jan 2020 14:56:21 +0100 Subject: [PATCH] [aps/solver] Reset the solution selection when leaving the view Solve an equation that has solutions, select a solution, then go back and change the equation. WHen you go to the solutions, the previous solution is still selected, which is a little weird --- apps/settings/sub_menu/display_mode_controller.cpp | 10 +++++++++- apps/settings/sub_menu/display_mode_controller.h | 7 +------ apps/settings/sub_menu/preferences_controller.h | 2 +- apps/solver/solutions_controller.cpp | 8 +++++--- apps/solver/solutions_controller.h | 1 + 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/apps/settings/sub_menu/display_mode_controller.cpp b/apps/settings/sub_menu/display_mode_controller.cpp index 7bb6e66b7..4b5b3534d 100644 --- a/apps/settings/sub_menu/display_mode_controller.cpp +++ b/apps/settings/sub_menu/display_mode_controller.cpp @@ -94,5 +94,13 @@ bool DisplayModeController::textFieldDidFinishEditing(TextField * textField, con } return true; } - +int DisplayModeController::initialSelectedRow() const { + int row = selectedRow(); + /* If the significant number of digits row was selected, keep selecting it, + * else select the display mode currently used. */ + if (row == numberOfRows() - 1) { + return row; + } + return PreferencesController::initialSelectedRow(); +} } diff --git a/apps/settings/sub_menu/display_mode_controller.h b/apps/settings/sub_menu/display_mode_controller.h index be9b7fca7..07dd04ca3 100644 --- a/apps/settings/sub_menu/display_mode_controller.h +++ b/apps/settings/sub_menu/display_mode_controller.h @@ -19,15 +19,10 @@ public: void willDisplayCellForIndex(HighlightCell * cell, int index) override; bool textFieldShouldFinishEditing(TextField * textField, Ion::Events::Event event) override; bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override; - - /* DisplayModeController is different to GenericSubController as it can - * display the modal view if there is a syntax error in the text field. We - * need to tweak the different Responder methods to handle the modal view - * properly. */ - void didEnterResponderChain(Responder * previousFirstResponder) override {} // Override GenericSubController which reinitializes the selected cell private: static constexpr int k_resultFormatType = 0; static constexpr int k_significantDigitsType = 1; + int initialSelectedRow() const override; MessageTableCellWithEditableTextWithSeparator m_editableCell; }; diff --git a/apps/settings/sub_menu/preferences_controller.h b/apps/settings/sub_menu/preferences_controller.h index ba21cfc5c..178880a7c 100644 --- a/apps/settings/sub_menu/preferences_controller.h +++ b/apps/settings/sub_menu/preferences_controller.h @@ -16,9 +16,9 @@ public: KDCoordinate rowHeight(int j) override; protected: constexpr static int k_totalNumberOfCell = 3; + int initialSelectedRow() const override { return valueIndexForPreference(m_messageTreeModel->label()); } private: constexpr static const KDFont * k_layoutFont = KDFont::SmallFont; - int initialSelectedRow() const override { return valueIndexForPreference(m_messageTreeModel->label()); } Poincare::Layout layoutForPreferences(I18n::Message message); void setPreferenceWithValueIndex(I18n::Message message, int valueIndex); int valueIndexForPreference(I18n::Message message) const; diff --git a/apps/solver/solutions_controller.cpp b/apps/solver/solutions_controller.cpp index 8a3d11fa8..1afa6220e 100644 --- a/apps/solver/solutions_controller.cpp +++ b/apps/solver/solutions_controller.cpp @@ -121,9 +121,11 @@ void SolutionsController::viewWillAppear() { } m_contentView.setWarning(requireWarning); m_contentView.selectableTableView()->reloadData(); - if (selectedRow() < 0) { - selectCellAtLocation(0, 0); - } + selectCellAtLocation(0, 0); +} + +void SolutionsController::viewDidDisappear() { + selectCellAtLocation(-1, -1); } void SolutionsController::didEnterResponderChain(Responder * previousFirstResponder) { diff --git a/apps/solver/solutions_controller.h b/apps/solver/solutions_controller.h index 953ca6e92..b14aa02ec 100644 --- a/apps/solver/solutions_controller.h +++ b/apps/solver/solutions_controller.h @@ -17,6 +17,7 @@ public: const char * title() override; View * view() override { return &m_contentView; } void viewWillAppear() override; + void viewDidDisappear() override; void didEnterResponderChain(Responder * previousFirstResponder) override; /* AlternateEmptyViewDefaultDelegate */ bool isEmpty() const override;