[apps/sequence/list] Create a class type parameter controller

Change-Id: I540f86aaffc883939eb48d27fd80c9633067159d
This commit is contained in:
Émilie Feral
2017-02-08 12:02:25 +01:00
parent f95979030c
commit e414f81d67
3 changed files with 109 additions and 0 deletions

View File

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

View File

@@ -0,0 +1,75 @@
#include "type_parameter_controller.h"
#include <assert.h>
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();
}
}

View File

@@ -0,0 +1,33 @@
#ifndef SEQUENCE_TYPE_PARAMATER_CONTROLLER_H
#define SEQUENCE_TYPE_PARAMATER_CONTROLLER_H
#include <escher.h>
#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