From c08f31f7997cb97d51d3f570c1a08060c6b4cbc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Wed, 7 Dec 2016 10:37:40 +0100 Subject: [PATCH] [apps/probability] Handle selection in calculation controller Change-Id: Ifc35c33c3fd8251daf112877074bdd8505aa1339 --- apps/probability/calculation_controller.cpp | 44 +++++++++++++++++---- apps/probability/calculation_controller.h | 7 +++- apps/probability/image_table_view.cpp | 8 ++++ apps/probability/image_table_view.h | 1 + 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/apps/probability/calculation_controller.cpp b/apps/probability/calculation_controller.cpp index 8baa7c67e..f45d757bd 100644 --- a/apps/probability/calculation_controller.cpp +++ b/apps/probability/calculation_controller.cpp @@ -7,6 +7,9 @@ CalculationController::ContentView::ContentView(Responder * parentResponder, Law m_lawCurveView(LawCurveView(law)), m_imageTableView(ImageTableView(parentResponder, law)) { + for (int k = 0; k < k_maxNumberOfEditableFields; k++) { + m_calculationCell[k].setParentResponder(parentResponder); + } } int CalculationController::ContentView::numberOfSubviews() const { @@ -68,9 +71,14 @@ ImageTableView * CalculationController::ContentView::imageTableView() { return &m_imageTableView; } +EditableTextCell * CalculationController::ContentView::calculationCellAtIndex(int index) { + return &m_calculationCell[index]; +} + CalculationController::CalculationController(Responder * parentResponder, Law * law) : ViewController(parentResponder), m_contentView(ContentView(this, law)), + m_highlightedSubviewIndex(1), m_law(law) { } @@ -84,21 +92,41 @@ const char * CalculationController::title() const { } bool CalculationController::handleEvent(Ion::Events::Event event) { - if (event == Ion::Events::Left) { - //m_selectableTableView.deselectTable(); - m_contentView.imageTableView()->select(true); - app()->setFirstResponder(m_contentView.imageTableView()); - return true; + if (event == Ion::Events::OK) { + if (m_highlightedSubviewIndex == 0) { + m_contentView.imageTableView()->select(true); + app()->setFirstResponder(m_contentView.imageTableView()); + return true; + } } - if (event == Ion::Events::Right) { - m_contentView.imageTableView()->select(false); - app()->setFirstResponder(this); + if ((event == Ion::Events::Left && m_highlightedSubviewIndex > 0) || (event == Ion::Events::Right && m_highlightedSubviewIndex < ContentView::k_maxNumberOfEditableFields - 1)) { + if (m_highlightedSubviewIndex == 0) { + app()->setFirstResponder(this); + m_contentView.imageTableView()->select(false); + m_contentView.imageTableView()->setHighlight(false); + } else { + EditableTextCell * calculCell = m_contentView.calculationCellAtIndex(m_highlightedSubviewIndex-1); + calculCell->setHighlighted(false); + } + m_highlightedSubviewIndex = event == Ion::Events::Left ? m_highlightedSubviewIndex - 1 : m_highlightedSubviewIndex + 1; + if (m_highlightedSubviewIndex > 0) { + EditableTextCell * newCalculCell = m_contentView.calculationCellAtIndex(m_highlightedSubviewIndex-1); + newCalculCell->setHighlighted(true); + } else { + m_contentView.imageTableView()->setHighlight(true); + } return true; } return false; } void CalculationController::didBecomeFirstResponder() { + if (m_highlightedSubviewIndex > 0) { + EditableTextCell * calculCell = m_contentView.calculationCellAtIndex(m_highlightedSubviewIndex-1); + calculCell->setHighlighted(true); + } else { + m_contentView.imageTableView()->setHighlight(true); + } m_contentView.lawCurveView()->reload(); } diff --git a/apps/probability/calculation_controller.h b/apps/probability/calculation_controller.h index c14f86b49..017ee3445 100644 --- a/apps/probability/calculation_controller.h +++ b/apps/probability/calculation_controller.h @@ -23,6 +23,8 @@ private: void drawRect(KDContext * ctx, KDRect rect) const override; LawCurveView * lawCurveView(); ImageTableView * imageTableView(); + EditableTextCell * calculationCellAtIndex(int index); + constexpr static int k_maxNumberOfEditableFields = 3; private: constexpr static KDCoordinate k_textFieldWidth = 50; constexpr static KDCoordinate k_charWidth = 7; @@ -31,10 +33,11 @@ private: View * subviewAtIndex(int index) override; LawCurveView m_lawCurveView; ImageTableView m_imageTableView; - PointerTextView m_text[3]; - EditableTextCell m_calculationCell[3]; + PointerTextView m_text[k_maxNumberOfEditableFields]; + EditableTextCell m_calculationCell[k_maxNumberOfEditableFields]; }; ContentView m_contentView; + int m_highlightedSubviewIndex; Law * m_law; }; diff --git a/apps/probability/image_table_view.cpp b/apps/probability/image_table_view.cpp index 1b033e371..c06a089f2 100644 --- a/apps/probability/image_table_view.cpp +++ b/apps/probability/image_table_view.cpp @@ -65,6 +65,7 @@ bool ImageTableView::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::OK) { m_law->setCalculationType((Law::CalculationType)m_selectableTableView.selectedRow()); select(false); + setHighlight(true); m_selectableTableView.reloadData(); app()->setFirstResponder(parentResponder()); return true; @@ -82,6 +83,13 @@ void ImageTableView::select(bool select) { } } +void ImageTableView::setHighlight(bool highlight) { + if (highlight) { + m_selectableTableView.selectCellAtLocation(0,0); + } else { + m_selectableTableView.deselectTable(); + } +} int ImageTableView::numberOfRows() { if (m_isSelected) { diff --git a/apps/probability/image_table_view.h b/apps/probability/image_table_view.h index dfe66665a..144b4d6bc 100644 --- a/apps/probability/image_table_view.h +++ b/apps/probability/image_table_view.h @@ -12,6 +12,7 @@ public: bool handleEvent(Ion::Events::Event event) override; void didBecomeFirstResponder() override; void select(bool select); + void setHighlight(bool highlight); int numberOfRows() override; void willDisplayCellForIndex(TableViewCell * cell, int index) override; KDCoordinate cellHeight() override;