From e414f81d67a84cfac47721fd4b2864731625a41d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Wed, 8 Feb 2017 12:02:25 +0100 Subject: [PATCH] [apps/sequence/list] Create a class type parameter controller Change-Id: I540f86aaffc883939eb48d27fd80c9633067159d --- apps/sequence/Makefile | 1 + .../list/type_parameter_controller.cpp | 75 +++++++++++++++++++ .../sequence/list/type_parameter_controller.h | 33 ++++++++ 3 files changed, 109 insertions(+) create mode 100644 apps/sequence/list/type_parameter_controller.cpp create mode 100644 apps/sequence/list/type_parameter_controller.h diff --git a/apps/sequence/Makefile b/apps/sequence/Makefile index 3e26683b2..c74ea1ad6 100644 --- a/apps/sequence/Makefile +++ b/apps/sequence/Makefile @@ -1,6 +1,7 @@ app_objs += $(addprefix apps/sequence/,\ app.o\ list/list_controller.o\ + list/type_parameter_controller.o\ list/sequence_expression_cell.o\ values/values_controller.o\ sequence.o\ diff --git a/apps/sequence/list/type_parameter_controller.cpp b/apps/sequence/list/type_parameter_controller.cpp new file mode 100644 index 000000000..20209e6bf --- /dev/null +++ b/apps/sequence/list/type_parameter_controller.cpp @@ -0,0 +1,75 @@ +#include "type_parameter_controller.h" +#include + +namespace Sequence { + +TypeParameterController::TypeParameterController(Responder * parentResponder) : + ViewController(parentResponder), + m_expliciteCell(TextBufferMenuListCell((char*)"Explicite")), + m_singleRecurrenceCell(TextBufferMenuListCell((char*)"Recurrence d'ordre 1")), + m_doubleRecurenceCell(TextBufferMenuListCell((char*)"Recurrence d'ordre 2")), + m_selectableTableView(SelectableTableView(this, this, Metric::TopMargin, Metric::RightMargin, + Metric::BottomMargin, Metric::LeftMargin)) +{ +} + +const char * TypeParameterController::title() const { + return "Choisir le type de suite"; +} + +View * TypeParameterController::view() { + return &m_selectableTableView; +} + +void TypeParameterController::didBecomeFirstResponder() { + m_selectableTableView.selectCellAtLocation(0, 0); + app()->setFirstResponder(&m_selectableTableView); +} + +void TypeParameterController::setSequence(Sequence * sequence) { + m_sequence = sequence; + char buffer[8]; + buffer[0] = sequence->name()[0]; + strlcpy(buffer+1, "(n)=", 7); + m_expliciteCell.setText(buffer); + strlcpy(buffer+1, "(n+1)= ", 7); + m_singleRecurrenceCell.setText(buffer); + strlcpy(buffer+1, "(n+2)=", 7); + m_doubleRecurenceCell.setText(buffer); +} + +bool TypeParameterController::handleEvent(Ion::Events::Event event) { + if (event == Ion::Events::OK) { + m_sequence->setType((Sequence::Type)m_selectableTableView.selectedRow()); + StackViewController * stack = stackController(); + stack->pop(); + return true; + } + return false; +} + +int TypeParameterController::numberOfRows() { + return k_totalNumberOfCell; +}; + +TableViewCell * TypeParameterController::reusableCell(int index) { + assert(index >= 0); + assert(index < k_totalNumberOfCell); + TableViewCell * cells[] = {&m_expliciteCell, &m_singleRecurrenceCell, &m_doubleRecurenceCell}; + return cells[index]; +} + +int TypeParameterController::reusableCellCount() { + return k_totalNumberOfCell; +} + +KDCoordinate TypeParameterController::cellHeight() { + return Metric::ParameterCellHeight; +} + +StackViewController * TypeParameterController::stackController() const { + return (StackViewController *)parentResponder(); +} + + +} diff --git a/apps/sequence/list/type_parameter_controller.h b/apps/sequence/list/type_parameter_controller.h new file mode 100644 index 000000000..eeabf395c --- /dev/null +++ b/apps/sequence/list/type_parameter_controller.h @@ -0,0 +1,33 @@ +#ifndef SEQUENCE_TYPE_PARAMATER_CONTROLLER_H +#define SEQUENCE_TYPE_PARAMATER_CONTROLLER_H + +#include +#include "../sequence.h" + +namespace Sequence { + +class TypeParameterController : public ViewController, public SimpleListViewDataSource { +public: + TypeParameterController(Responder * parentResponder); + const char * title() const override; + View * view() override; + void didBecomeFirstResponder() override; + void setSequence(Sequence * sequence); + bool handleEvent(Ion::Events::Event event) override; + int numberOfRows() override; + KDCoordinate cellHeight() override; + TableViewCell * reusableCell(int index) override; + int reusableCellCount() override; +private: + StackViewController * stackController() const; + constexpr static int k_totalNumberOfCell = 3; + TextBufferMenuListCell m_expliciteCell; + TextBufferMenuListCell m_singleRecurrenceCell; + TextBufferMenuListCell m_doubleRecurenceCell; + SelectableTableView m_selectableTableView; + Sequence * m_sequence; +}; + +} + +#endif