diff --git a/apps/calculation/Makefile b/apps/calculation/Makefile index a65b1409e..f44795cc6 100644 --- a/apps/calculation/Makefile +++ b/apps/calculation/Makefile @@ -14,6 +14,7 @@ app_calculation_src = $(addprefix apps/calculation/,\ additional_outputs/illustrated_list_controller.cpp \ additional_outputs/integer_list_controller.cpp \ additional_outputs/scrollable_input_exact_approximate_expressions_cell.cpp \ + additional_outputs/list_controller.cpp \ additional_outputs/simple_list_controller.cpp \ additional_outputs/trigonometry_graph_cell.cpp \ additional_outputs/trigonometry_list_controller.cpp \ diff --git a/apps/calculation/additional_outputs/illustrated_list_controller.cpp b/apps/calculation/additional_outputs/illustrated_list_controller.cpp index 209b81351..d15d89919 100644 --- a/apps/calculation/additional_outputs/illustrated_list_controller.cpp +++ b/apps/calculation/additional_outputs/illustrated_list_controller.cpp @@ -6,26 +6,10 @@ using namespace Poincare; namespace Calculation { -/* List Controller */ - -IllustratedListController::ListController::ListController(IllustratedListController * dataSource) : - ViewController(dataSource), - m_selectableTableView(this, dataSource, dataSource, dataSource) -{ - m_selectableTableView.setMargins(0); - m_selectableTableView.setDecoratorType(ScrollView::Decorator::Type::None); -} - -void IllustratedListController::ListController::didBecomeFirstResponder() { - m_selectableTableView.reloadData(); - m_selectableTableView.selectCellAtLocation(0, 1); -} - /* Illustrated list controller */ IllustratedListController::IllustratedListController(Responder * parentResponder) : - StackViewController(parentResponder, &m_listController, KDColorWhite, Palette::PurpleBright, Palette::PurpleDark), - m_listController(this), + ListController(parentResponder, this), m_additionalCalculationCells{} { for (int i = 0; i < k_maxNumberOfAdditionalCalculations; i++) { @@ -34,12 +18,8 @@ IllustratedListController::IllustratedListController(Responder * parentResponder } } -bool IllustratedListController::handleEvent(Ion::Events::Event event) { - return false; -} - -void IllustratedListController::didBecomeFirstResponder() { - Container::activeApp()->setFirstResponder(&m_listController); +void IllustratedListController::didEnterResponderChain(Responder * previousFirstResponder) { + selectCellAtLocation(0, 1); } void IllustratedListController::viewDidDisappear() { diff --git a/apps/calculation/additional_outputs/illustrated_list_controller.h b/apps/calculation/additional_outputs/illustrated_list_controller.h index 5c2a0556c..a44b87af6 100644 --- a/apps/calculation/additional_outputs/illustrated_list_controller.h +++ b/apps/calculation/additional_outputs/illustrated_list_controller.h @@ -3,19 +3,19 @@ #include #include "scrollable_input_exact_approximate_expressions_cell.h" +#include "list_controller.h" #include "../calculation_store.h" #include namespace Calculation { -class IllustratedListController : public StackViewController, public ListViewDataSource, public SelectableTableViewDataSource, public SelectableTableViewDelegate { +class IllustratedListController : public ListController, public SelectableTableViewDelegate { public: IllustratedListController(Responder * parentResponder); // Responder - bool handleEvent(Ion::Events::Event event) override; - void didBecomeFirstResponder() override; void viewDidDisappear() override; + void didEnterResponderChain(Responder * previousFirstResponder) override; //ListViewDataSource int numberOfRows() const override; @@ -29,26 +29,15 @@ public: void tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY, bool withinTemporarySelection) override; // IllustratedListController - virtual void setExpression(Poincare::Expression e); + void setExpression(Poincare::Expression e) override; protected: Poincare::Expression m_savedExpression; CalculationStore m_calculationStore; private: virtual CodePoint expressionSymbol() const = 0; - class ListController : public ViewController { - public: - ListController(IllustratedListController * dataSource); - const char * title() override { return I18n::translate(I18n::Message::AdditionalResults); } - View * view() override { return &m_selectableTableView; } - void didBecomeFirstResponder() override; - SelectableTableView * selectableTableView() { return &m_selectableTableView; } - private: - SelectableTableView m_selectableTableView; - }; constexpr static int k_maxNumberOfAdditionalCalculations = 4; constexpr static KDCoordinate k_illustrationHeight = 100; - ListController m_listController; // Cells virtual HighlightCell * illustrationCell() = 0; ScrollableInputExactApproximateExpressionsCell m_additionalCalculationCells[k_maxNumberOfAdditionalCalculations]; diff --git a/apps/calculation/additional_outputs/list_controller.cpp b/apps/calculation/additional_outputs/list_controller.cpp new file mode 100644 index 000000000..7bcb254f9 --- /dev/null +++ b/apps/calculation/additional_outputs/list_controller.cpp @@ -0,0 +1,37 @@ +#include "list_controller.h" + +using namespace Poincare; + +namespace Calculation { + +/* Inner List Controller */ + +ListController::InnerListController::InnerListController(ListController * dataSource, SelectableTableViewDelegate * delegate) : + ViewController(dataSource), + m_selectableTableView(this, dataSource, dataSource, delegate) +{ + m_selectableTableView.setMargins(0); + m_selectableTableView.setDecoratorType(ScrollView::Decorator::Type::None); +} + +void ListController::InnerListController::didBecomeFirstResponder() { + m_selectableTableView.reloadData(); +} + +/* List Controller */ + +ListController::ListController(Responder * parentResponder, SelectableTableViewDelegate * delegate) : + StackViewController(parentResponder, &m_listController, KDColorWhite, Palette::PurpleBright, Palette::PurpleDark), + m_listController(this, delegate) +{ +} + +bool ListController::handleEvent(Ion::Events::Event event) { + return false; +} + +void ListController::didBecomeFirstResponder() { + Container::activeApp()->setFirstResponder(&m_listController); +} + +} diff --git a/apps/calculation/additional_outputs/list_controller.h b/apps/calculation/additional_outputs/list_controller.h new file mode 100644 index 000000000..16d987cb9 --- /dev/null +++ b/apps/calculation/additional_outputs/list_controller.h @@ -0,0 +1,37 @@ +#ifndef CALCULATION_ADDITIONAL_OUTPUTS_LIST_CONTROLLER_H +#define CALCULATION_ADDITIONAL_OUTPUTS_LIST_CONTROLLER_H + +#include +#include + +namespace Calculation { + +class ListController : public StackViewController, public ListViewDataSource, public SelectableTableViewDataSource { +public: + ListController(Responder * parentResponder, SelectableTableViewDelegate * delegate = nullptr); + + // Responder + bool handleEvent(Ion::Events::Event event) override; + void didBecomeFirstResponder() override; + + // ListController + virtual void setExpression(Poincare::Expression e) = 0; + +protected: + class InnerListController : public ViewController { + public: + InnerListController(ListController * dataSource, SelectableTableViewDelegate * delegate = nullptr); + const char * title() override { return I18n::translate(I18n::Message::AdditionalResults); } + View * view() override { return &m_selectableTableView; } + void didBecomeFirstResponder() override; + SelectableTableView * selectableTableView() { return &m_selectableTableView; } + private: + SelectableTableView m_selectableTableView; + }; + InnerListController m_listController; +}; + +} + +#endif + diff --git a/apps/calculation/additional_outputs/simple_list_controller.cpp b/apps/calculation/additional_outputs/simple_list_controller.cpp index 1018d7f4e..29d4124ad 100644 --- a/apps/calculation/additional_outputs/simple_list_controller.cpp +++ b/apps/calculation/additional_outputs/simple_list_controller.cpp @@ -5,31 +5,16 @@ using namespace Poincare; namespace Calculation { -/* List Controller */ - -SimpleListController::ListController::ListController(SimpleListController * dataSource) : - ViewController(dataSource), - m_selectableTableView(this, dataSource, dataSource) -{ - m_selectableTableView.setMargins(0); - m_selectableTableView.setDecoratorType(ScrollView::Decorator::Type::None); -} - /* Simple list controller */ SimpleListController::SimpleListController(Responder * parentResponder) : - StackViewController(parentResponder, &m_listController, KDColorWhite, Palette::PurpleBright, Palette::PurpleDark), - m_listController(this), + ListController(parentResponder), m_cells{} { } -bool SimpleListController::handleEvent(Ion::Events::Event event) { - return false; -} - -void SimpleListController::didBecomeFirstResponder() { - Container::activeApp()->setFirstResponder(&m_listController); +void SimpleListController::didEnterResponderChain(Responder * previousFirstResponder) { + selectCellAtLocation(0, 0); } int SimpleListController::reusableCellCount(int type) { diff --git a/apps/calculation/additional_outputs/simple_list_controller.h b/apps/calculation/additional_outputs/simple_list_controller.h index 011d023f9..7784b60c0 100644 --- a/apps/calculation/additional_outputs/simple_list_controller.h +++ b/apps/calculation/additional_outputs/simple_list_controller.h @@ -4,16 +4,16 @@ #include #include #include +#include "list_controller.h" namespace Calculation { -class SimpleListController : public StackViewController, public ListViewDataSource, public SelectableTableViewDataSource { +class SimpleListController : public ListController { public: SimpleListController(Responder * parentResponder); // Responder - bool handleEvent(Ion::Events::Event event) override; - void didBecomeFirstResponder() override; + void didEnterResponderChain(Responder * previousFirstResponder) override; //ListViewDataSource int reusableCellCount(int type) override; @@ -23,24 +23,14 @@ public: void willDisplayCellForIndex(HighlightCell * cell, int index) override; // IllustratedListController - void setExpression(Poincare::Expression e) { m_expression = e; } + void setExpression(Poincare::Expression e) override { m_expression = e; } protected: Poincare::Expression m_expression; private: virtual Poincare::Layout layoutAtIndex(int index) = 0; virtual I18n::Message messageAtIndex(int index) = 0; - class ListController : public ViewController { - public: - ListController(SimpleListController * dataSource); - const char * title() override { return I18n::translate(I18n::Message::AdditionalResults); } - View * view() override { return &m_selectableTableView; } - SelectableTableView * selectableTableView() { return &m_selectableTableView; } - private: - SelectableTableView m_selectableTableView; - }; constexpr static int k_maxNumberOfCells = 4; - ListController m_listController; // Cells ExpressionTableCellWithPointer m_cells[k_maxNumberOfCells]; };