[calculation] Create a class ListController to factorize

IllustratedListController and SimpleListController
This commit is contained in:
Émilie Feral
2019-12-23 18:30:10 +01:00
committed by Léa Saviot
parent 714e5f12d9
commit 847eb8d907
7 changed files with 89 additions and 70 deletions

View File

@@ -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 \

View File

@@ -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() {

View File

@@ -3,19 +3,19 @@
#include <escher.h>
#include "scrollable_input_exact_approximate_expressions_cell.h"
#include "list_controller.h"
#include "../calculation_store.h"
#include <apps/i18n.h>
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];

View File

@@ -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);
}
}

View File

@@ -0,0 +1,37 @@
#ifndef CALCULATION_ADDITIONAL_OUTPUTS_LIST_CONTROLLER_H
#define CALCULATION_ADDITIONAL_OUTPUTS_LIST_CONTROLLER_H
#include <escher.h>
#include <apps/i18n.h>
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

View File

@@ -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) {

View File

@@ -4,16 +4,16 @@
#include <escher.h>
#include <poincare/expression.h>
#include <apps/i18n.h>
#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];
};