mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-19 05:40:38 +01:00
[calculation] Create a class ListController to factorize
IllustratedListController and SimpleListController
This commit is contained in:
@@ -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 \
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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];
|
||||
|
||||
37
apps/calculation/additional_outputs/list_controller.cpp
Normal file
37
apps/calculation/additional_outputs/list_controller.cpp
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
37
apps/calculation/additional_outputs/list_controller.h
Normal file
37
apps/calculation/additional_outputs/list_controller.h
Normal 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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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];
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user