From 8311e8857c1a7d5394ee6fe9aa0c78a270045f8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Fri, 17 Feb 2017 18:42:57 +0100 Subject: [PATCH] [apps] Better compartimentalize viewWillAppear and didBecomeFirstResponder Change-Id: I9ad482907304973a4aa74f517d506667171a036f --- apps/graph/graph/graph_controller.cpp | 4 ++-- apps/graph/graph/graph_controller.h | 2 +- apps/graph/values/values_controller.cpp | 10 ++++++++-- apps/math_toolbox.cpp | 16 +++++++++++----- apps/math_toolbox.h | 1 + .../editable_cell_table_view_controller.cpp | 17 ++++++++++++----- .../interactive_curve_view_controller.cpp | 16 ++++++++++------ apps/shared/store_controller.cpp | 7 +++++++ apps/shared/store_controller.h | 1 + apps/statistics/box_controller.cpp | 3 +-- apps/statistics/histogram_controller.cpp | 12 +++++++----- apps/variable_box_controller.cpp | 15 ++++++++++++++- apps/variable_box_controller.h | 3 +++ escher/include/escher/toolbox.h | 1 + escher/src/toolbox.cpp | 4 ++++ 15 files changed, 83 insertions(+), 29 deletions(-) diff --git a/apps/graph/graph/graph_controller.cpp b/apps/graph/graph/graph_controller.cpp index 2bb32a048..c83d1386b 100644 --- a/apps/graph/graph/graph_controller.cpp +++ b/apps/graph/graph/graph_controller.cpp @@ -40,12 +40,12 @@ ViewController * GraphController::initialisationParameterController() { return &m_initialisationParameterController; } -void GraphController::didBecomeFirstResponder() { +void GraphController::viewWillAppear() { if (m_view.context() == nullptr) { App * graphApp = (Graph::App *)app(); m_view.setContext(graphApp->localContext()); } - InteractiveCurveViewController::didBecomeFirstResponder(); + InteractiveCurveViewController::viewWillAppear(); } bool GraphController::didChangeRange(InteractiveCurveViewRange * interactiveCurveViewRange) { diff --git a/apps/graph/graph/graph_controller.h b/apps/graph/graph/graph_controller.h index 7ed0470de..4415da8c1 100644 --- a/apps/graph/graph/graph_controller.h +++ b/apps/graph/graph/graph_controller.h @@ -13,7 +13,7 @@ namespace Graph { class GraphController : public Shared::InteractiveCurveViewController, public Shared::InteractiveCurveViewRangeDelegate { public: GraphController(Responder * parentResponder, CartesianFunctionStore * functionStore, HeaderViewController * header); - void didBecomeFirstResponder() override; + void viewWillAppear() override; ViewController * initialisationParameterController() override; bool isEmpty() const override; diff --git a/apps/graph/values/values_controller.cpp b/apps/graph/values/values_controller.cpp index dd6462d14..e60637201 100644 --- a/apps/graph/values/values_controller.cpp +++ b/apps/graph/values/values_controller.cpp @@ -95,8 +95,13 @@ bool ValuesController::handleEvent(Ion::Events::Event event) { } void ValuesController::didBecomeFirstResponder() { - headerViewController()->setSelectedButton(-1); EditableCellTableViewController::didBecomeFirstResponder(); + if (m_selectableTableView.selectedRow() == -1) { + m_selectableTableView.deselectTable(); + headerViewController()->setSelectedButton(0); + } else { + headerViewController()->setSelectedButton(-1); + } } ViewController * ValuesController::intervalParameterController() { @@ -287,7 +292,8 @@ int ValuesController::activeColumn() { } void ValuesController::viewWillAppear() { - m_selectableTableView.reloadData(); + headerViewController()->setSelectedButton(-1); + EditableCellTableViewController::viewWillAppear(); } CartesianFunction * ValuesController::functionAtColumn(int i) { diff --git a/apps/math_toolbox.cpp b/apps/math_toolbox.cpp index bd1a3f5f9..d8483a7ae 100644 --- a/apps/math_toolbox.cpp +++ b/apps/math_toolbox.cpp @@ -121,11 +121,6 @@ MathToolbox::MathToolbox() : } void MathToolbox::didBecomeFirstResponder() { - m_nodeModel = (ToolboxNode *)rootModel(); - m_selectableTableView.reloadData(); - StackViewController::didBecomeFirstResponder(); - m_stack.resetStack(); - m_listController.setFirstSelectedRow(0); app()->setFirstResponder(&m_listController); } @@ -145,6 +140,9 @@ bool MathToolbox::handleEvent(Ion::Events::Event event) { } int MathToolbox::numberOfRows() { + if (m_nodeModel == nullptr) { + m_nodeModel = (ToolboxNode *)rootModel(); + } return m_nodeModel->numberOfChildren(); } @@ -207,6 +205,14 @@ int MathToolbox::typeAtLocation(int i, int j) { return 1; } +void MathToolbox::viewWillAppear() { + Toolbox::viewWillAppear(); + m_nodeModel = (ToolboxNode *)rootModel(); + m_selectableTableView.reloadData(); + m_stack.resetStack(); + m_listController.setFirstSelectedRow(0); +} + void MathToolbox::viewWillDisappear() { m_selectableTableView.deselectTable(); } diff --git a/apps/math_toolbox.h b/apps/math_toolbox.h index f71b85ce5..dd8e87af2 100644 --- a/apps/math_toolbox.h +++ b/apps/math_toolbox.h @@ -23,6 +23,7 @@ public: int indexFromCumulatedHeight(KDCoordinate offsetY) override; int typeAtLocation(int i, int j) override; + void viewWillAppear() override; void viewWillDisappear() override; protected: int stackDepth(); diff --git a/apps/shared/editable_cell_table_view_controller.cpp b/apps/shared/editable_cell_table_view_controller.cpp index 274dd873d..980d68eb7 100644 --- a/apps/shared/editable_cell_table_view_controller.cpp +++ b/apps/shared/editable_cell_table_view_controller.cpp @@ -89,6 +89,18 @@ void EditableCellTableViewController::willDisplayCellAtLocationWithDisplayMode(H } void EditableCellTableViewController::didBecomeFirstResponder() { + if (m_selectableTableView.selectedRow() >= 0) { + int selectedRow = m_selectableTableView.selectedRow(); + selectedRow = selectedRow >= numberOfRows() ? numberOfRows()-1 : selectedRow; + int selectedColumn = m_selectableTableView.selectedColumn(); + selectedColumn = selectedColumn >= numberOfColumns() ? numberOfColumns() - 1 : selectedColumn; + m_selectableTableView.selectCellAtLocation(selectedColumn, selectedRow); + app()->setFirstResponder(&m_selectableTableView); + } +} + +void EditableCellTableViewController::viewWillAppear() { + m_selectableTableView.reloadData(); if (m_selectableTableView.selectedRow() == -1) { m_selectableTableView.selectCellAtLocation(0, 1); } else { @@ -98,11 +110,6 @@ void EditableCellTableViewController::didBecomeFirstResponder() { selectedColumn = selectedColumn >= numberOfColumns() ? numberOfColumns() - 1 : selectedColumn; m_selectableTableView.selectCellAtLocation(selectedColumn, selectedRow); } - app()->setFirstResponder(&m_selectableTableView); -} - -void EditableCellTableViewController::viewWillAppear() { - m_selectableTableView.reloadData(); } TextFieldDelegateApp * EditableCellTableViewController::textFieldDelegateApp() { diff --git a/apps/shared/interactive_curve_view_controller.cpp b/apps/shared/interactive_curve_view_controller.cpp index 0b1faecde..3e6021704 100644 --- a/apps/shared/interactive_curve_view_controller.cpp +++ b/apps/shared/interactive_curve_view_controller.cpp @@ -44,8 +44,8 @@ bool InteractiveCurveViewController::handleEvent(Ion::Events::Event event) { if (!curveView()->isMainViewSelected()) { if (event == Ion::Events::Down) { headerViewController()->setSelectedButton(-1); - app()->setFirstResponder(this); curveView()->selectMainView(true); + app()->setFirstResponder(this); reloadBannerView(); curveView()->reload(); return true; @@ -99,22 +99,24 @@ bool InteractiveCurveViewController::handleEvent(Ion::Events::Event event) { } void InteractiveCurveViewController::didBecomeFirstResponder() { - curveView()->selectMainView(true); uint32_t newModelVersion = modelVersion(); if (m_modelVersion != newModelVersion) { m_modelVersion = newModelVersion; initRangeParameters(); initCursorParameters(); + reloadBannerView(); + curveView()->reload(); } uint32_t newRangeVersion = rangeVersion(); if (m_rangeVersion != newRangeVersion) { m_rangeVersion = newRangeVersion; initCursorParameters(); + reloadBannerView(); + curveView()->reload(); + } + if (!curveView()->isMainViewSelected()) { + headerViewController()->setSelectedButton(0); } - headerViewController()->setSelectedButton(-1); - // Reload graph view - reloadBannerView(); - curveView()->reload(); } ViewController * InteractiveCurveViewController::rangeParameterController() { @@ -142,6 +144,8 @@ Responder * InteractiveCurveViewController::defaultController() { } void InteractiveCurveViewController::viewWillAppear() { + curveView()->selectMainView(true); + headerViewController()->setSelectedButton(-1); /* Warning: init cursor parameter before reloading banner view. Indeed, * reloading banner view needs an updated cursor to load the right data. */ initCursorParameters(); diff --git a/apps/shared/store_controller.cpp b/apps/shared/store_controller.cpp index 174cad7e3..92a5b1ae0 100644 --- a/apps/shared/store_controller.cpp +++ b/apps/shared/store_controller.cpp @@ -70,6 +70,13 @@ void StoreController::willDisplayCellAtLocation(HighlightCell * cell, int i, int willDisplayCellAtLocationWithDisplayMode(cell, i, j, Expression::FloatDisplayMode::Decimal); } +void StoreController::didBecomeFirstResponder() { + if (m_selectableTableView.selectedRow() < 0) { + m_selectableTableView.selectCellAtLocation(0, 0); + } + EditableCellTableViewController::didBecomeFirstResponder(); +} + bool StoreController::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::Up) { m_selectableTableView.deselectTable(); diff --git a/apps/shared/store_controller.h b/apps/shared/store_controller.h index 0de65b91b..91222314d 100644 --- a/apps/shared/store_controller.h +++ b/apps/shared/store_controller.h @@ -21,6 +21,7 @@ public: int typeAtLocation(int i, int j) override; void willDisplayCellAtLocation(HighlightCell * cell, int i, int j) override; bool handleEvent(Ion::Events::Event event) override; + void didBecomeFirstResponder() override; protected: static constexpr KDCoordinate k_cellWidth = Ion::Display::Width/2 - Metric::CommonRightMargin/2 - Metric::CommonLeftMargin/2; constexpr static int k_maxNumberOfEditableCells = 22; diff --git a/apps/statistics/box_controller.cpp b/apps/statistics/box_controller.cpp index c21c4ceb5..7a0e74297 100644 --- a/apps/statistics/box_controller.cpp +++ b/apps/statistics/box_controller.cpp @@ -43,8 +43,6 @@ bool BoxController::handleEvent(Ion::Events::Event event) { void BoxController::didBecomeFirstResponder() { m_view.selectMainView(true); - reloadBannerView(); - m_view.reload(); } bool BoxController::isEmpty() const { @@ -77,6 +75,7 @@ void BoxController::reloadBannerView() { } void BoxController::viewWillAppear() { + m_view.selectMainView(true); reloadBannerView(); m_view.reload(); } diff --git a/apps/statistics/histogram_controller.cpp b/apps/statistics/histogram_controller.cpp index 7c9b46f4e..6caa81503 100644 --- a/apps/statistics/histogram_controller.cpp +++ b/apps/statistics/histogram_controller.cpp @@ -91,11 +91,11 @@ void HistogramController::didBecomeFirstResponder() { m_rangeVersion = rangeChecksum; initBarSelection(); } - m_view.setHighlight(m_store->startOfBarAtIndex(m_selectedBarIndex), m_store->endOfBarAtIndex(m_selectedBarIndex)); - headerViewController()->setSelectedButton(-1); - m_view.selectMainView(true); - reloadBannerView(); - m_view.reload(); + if (!m_view.isMainViewSelected()) { + headerViewController()->setSelectedButton(0); + } else { + m_view.setHighlight(m_store->startOfBarAtIndex(m_selectedBarIndex), m_store->endOfBarAtIndex(m_selectedBarIndex)); + } } int HistogramController::numberOfButtons() const { @@ -124,6 +124,8 @@ Responder * HistogramController::defaultController() { } void HistogramController::viewWillAppear() { + m_view.selectMainView(true); + headerViewController()->setSelectedButton(-1); reloadBannerView(); m_view.reload(); } diff --git a/apps/variable_box_controller.cpp b/apps/variable_box_controller.cpp index df8acb455..ff231ccf0 100644 --- a/apps/variable_box_controller.cpp +++ b/apps/variable_box_controller.cpp @@ -226,6 +226,14 @@ void VariableBoxController::ContentViewController::reloadData() { m_selectableTableView.reloadData(); } +void VariableBoxController::ContentViewController::resetPage() { + m_currentPage = Page::RootMenu; +} + +void VariableBoxController::ContentViewController::deselectTable() { + m_selectableTableView.deselectTable(); +} + VariableBoxController::VariableBoxController(Context * context) : StackViewController(nullptr, &m_contentViewController, true, KDColorWhite, Palette::PurpleBright, Palette::PurpleDark), m_contentViewController(ContentViewController(this, context)) @@ -233,7 +241,6 @@ VariableBoxController::VariableBoxController(Context * context) : } void VariableBoxController::didBecomeFirstResponder() { - StackViewController::didBecomeFirstResponder(); app()->setFirstResponder(&m_contentViewController); } @@ -242,5 +249,11 @@ void VariableBoxController::setTextFieldCaller(TextField * textField) { } void VariableBoxController::viewWillAppear() { + StackViewController::viewWillAppear(); + m_contentViewController.resetPage(); m_contentViewController.reloadData(); } + +void VariableBoxController::viewWillDisappear() { + m_contentViewController.deselectTable(); +} diff --git a/apps/variable_box_controller.h b/apps/variable_box_controller.h index bf469b867..cf8c5e8da 100644 --- a/apps/variable_box_controller.h +++ b/apps/variable_box_controller.h @@ -11,6 +11,7 @@ public: void didBecomeFirstResponder() override; void setTextFieldCaller(TextField * textField); void viewWillAppear() override; + void viewWillDisappear() override; private: class ContentViewController : public ViewController, public ListViewDataSource { public: @@ -29,6 +30,8 @@ private: int typeAtLocation(int i, int j) override; void setTextFieldCaller(TextField * textField); void reloadData(); + void resetPage(); + void deselectTable(); private: enum class Page { RootMenu, diff --git a/escher/include/escher/toolbox.h b/escher/include/escher/toolbox.h index 00d7bb29b..e46df6a9e 100644 --- a/escher/include/escher/toolbox.h +++ b/escher/include/escher/toolbox.h @@ -7,6 +7,7 @@ class Toolbox : public StackViewController { public: Toolbox(Responder * parentResponder, ViewController * rootViewController); void setSender(Responder * sender); + void viewWillAppear() override; protected: virtual Responder * sender(); private: diff --git a/escher/src/toolbox.cpp b/escher/src/toolbox.cpp index a8a5c919c..de3eeb743 100644 --- a/escher/src/toolbox.cpp +++ b/escher/src/toolbox.cpp @@ -10,6 +10,10 @@ void Toolbox::setSender(Responder * sender) { m_sender = sender; } +void Toolbox::viewWillAppear() { + StackViewController::viewWillAppear(); +} + Responder * Toolbox::sender() { return m_sender; }