From 610abe109ea3f00484dbece69024ca6b707665e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Thu, 9 Feb 2017 10:38:25 +0100 Subject: [PATCH] [apps/sequence/list] create a class change type parameter controller Change-Id: I5ab07900166ce23987f3a2b96954f361bece2bde --- apps/sequence/Makefile | 1 + .../list/change_type_parameter_controller.cpp | 91 +++++++++++++++++++ .../list/change_type_parameter_controller.h | 36 ++++++++ 3 files changed, 128 insertions(+) create mode 100644 apps/sequence/list/change_type_parameter_controller.cpp create mode 100644 apps/sequence/list/change_type_parameter_controller.h diff --git a/apps/sequence/Makefile b/apps/sequence/Makefile index 86cfb96e7..87b76514a 100644 --- a/apps/sequence/Makefile +++ b/apps/sequence/Makefile @@ -1,5 +1,6 @@ app_objs += $(addprefix apps/sequence/,\ app.o\ + list/change_type_parameter_controller.o\ list/list_controller.o\ list/list_parameter_controller.o\ list/type_parameter_controller.o\ diff --git a/apps/sequence/list/change_type_parameter_controller.cpp b/apps/sequence/list/change_type_parameter_controller.cpp new file mode 100644 index 000000000..140a2cbec --- /dev/null +++ b/apps/sequence/list/change_type_parameter_controller.cpp @@ -0,0 +1,91 @@ +#include "change_type_parameter_controller.h" +#include +#include "../../../poincare/src/layout/baseline_relative_layout.h" +#include "../../../poincare/src/layout/string_layout.h" + +using namespace Poincare; + +namespace Sequence { + +ChangeTypeParameterController::ChangeTypeParameterController(Responder * parentResponder) : + ViewController(parentResponder), + m_selectableTableView(SelectableTableView(this, this, Metric::TopMargin, Metric::RightMargin, + Metric::BottomMargin, Metric::LeftMargin)), + m_sequence(nullptr) +{ +} + +ChangeTypeParameterController::~ChangeTypeParameterController() { + for (int i = 0; i < k_totalNumberOfCell; i++) { + if (m_expressionLayouts[i]) { + delete m_expressionLayouts[i]; + m_expressionLayouts[i] = nullptr; + } + } +} + +const char * ChangeTypeParameterController::title() const { + return "Type de suite"; +} + +View * ChangeTypeParameterController::view() { + return &m_selectableTableView; +} + +void ChangeTypeParameterController::didBecomeFirstResponder() { + m_selectableTableView.dataHasChanged(true); + m_selectableTableView.selectCellAtLocation(0, 0); + app()->setFirstResponder(&m_selectableTableView); +} + +bool ChangeTypeParameterController::handleEvent(Ion::Events::Event event) { + if (event == Ion::Events::OK && m_sequence != nullptr) { + m_sequence->setType((Sequence::Type)m_selectableTableView.selectedRow()); + StackViewController * stack = stackController(); + stack->pop(); + stack->pop(); + return true; + } + return false; +} + +int ChangeTypeParameterController::numberOfRows() { + return k_totalNumberOfCell; +}; + +TableViewCell * ChangeTypeParameterController::reusableCell(int index) { + assert(index >= 0); + assert(index < k_totalNumberOfCell); + TableViewCell * cells[] = {&m_expliciteCell, &m_singleRecurrenceCell, &m_doubleRecurenceCell}; + return cells[index]; +} + +int ChangeTypeParameterController::reusableCellCount() { + return k_totalNumberOfCell; +} + +KDCoordinate ChangeTypeParameterController::cellHeight() { + return Metric::ParameterCellHeight; +} + +void ChangeTypeParameterController::willDisplayCellAtLocation(TableViewCell * cell, int i, int j) { + const char * name = m_sequence->name(); + const char * subscripts[3] = {"n", "n+1", "n+2"}; + if (m_expressionLayouts[j]) { + delete m_expressionLayouts[j]; + m_expressionLayouts[j] = nullptr; + } + m_expressionLayouts[j] = new BaselineRelativeLayout(new StringLayout(name, 1), new StringLayout(subscripts[j], strlen(subscripts[j]), KDText::FontSize::Small), BaselineRelativeLayout::Type::Subscript); + TextExpressionMenuListCell * myCell = (TextExpressionMenuListCell *)cell; + myCell->setExpression(m_expressionLayouts[j]); +} + +void ChangeTypeParameterController::setSequence(Sequence * sequence) { + m_sequence = sequence; +} + +StackViewController * ChangeTypeParameterController::stackController() const { + return (StackViewController *)parentResponder(); +} + +} diff --git a/apps/sequence/list/change_type_parameter_controller.h b/apps/sequence/list/change_type_parameter_controller.h new file mode 100644 index 000000000..90454a68e --- /dev/null +++ b/apps/sequence/list/change_type_parameter_controller.h @@ -0,0 +1,36 @@ +#ifndef SEQUENCE_CHANGE_TYPE_PARAMATER_CONTROLLER_H +#define SEQUENCE_CHANGE_TYPE_PARAMATER_CONTROLLER_H + +#include +#include "../sequence_store.h" + +namespace Sequence { + +class ChangeTypeParameterController : public ViewController, public SimpleListViewDataSource { +public: + ChangeTypeParameterController(Responder * parentResponder); + ~ChangeTypeParameterController(); + const char * title() const override; + View * view() override; + void didBecomeFirstResponder() override; + bool handleEvent(Ion::Events::Event event) override; + int numberOfRows() override; + KDCoordinate cellHeight() override; + TableViewCell * reusableCell(int index) override; + int reusableCellCount() override; + void willDisplayCellAtLocation(TableViewCell * cell, int i, int j) override; + void setSequence(Sequence * sequence); +private: + StackViewController * stackController() const; + constexpr static int k_totalNumberOfCell = 3; + ExpressionMenuListCell m_expliciteCell; + ExpressionMenuListCell m_singleRecurrenceCell; + ExpressionMenuListCell m_doubleRecurenceCell; + Poincare::ExpressionLayout * m_expressionLayouts[k_totalNumberOfCell]; + SelectableTableView m_selectableTableView; + Sequence * m_sequence; +}; + +} + +#endif