[apps/sequence] Do no add a new function as long as the user did not

choose a type

Change-Id: I67c3172b416d7d80a3bd9a4eb18091ab72626e4b
This commit is contained in:
Émilie Feral
2017-02-08 13:57:05 +01:00
parent 0f4d7f0914
commit 08a663a64f
7 changed files with 36 additions and 42 deletions

View File

@@ -50,7 +50,9 @@ bool ListController::handleEnter() {
{
if (m_functionStore->numberOfFunctions() < m_functionStore->maxNumberOfFunctions() &&
m_selectableTableView.selectedRow() == numberOfRows() - 1) {
return addFunction();
m_functionStore->addEmptyFunction();
m_selectableTableView.reloadData();
return true;
}
FunctionExpressionCell * functionCell = (FunctionExpressionCell *)(m_selectableTableView.cellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow()));
editExpression(functionCell, Ion::Events::OK);

View File

@@ -10,7 +10,7 @@ ListController::ListController(Responder * parentResponder, SequenceStore * sequ
m_functionTitleCells{SequenceTitleCell(&m_selectableTableView),SequenceTitleCell(&m_selectableTableView),SequenceTitleCell(&m_selectableTableView)},
m_expressionCells{SequenceExpressionCell(&m_selectableTableView),SequenceExpressionCell(&m_selectableTableView),SequenceExpressionCell(&m_selectableTableView)},
m_parameterController(ListParameterController(this, sequenceStore)),
m_typeParameterController(this)
m_typeParameterController(this, sequenceStore)
{
m_selectableTableView.setDelegate(this);
}
@@ -57,14 +57,10 @@ bool ListController::handleEvent(Ion::Events::Event event) {
}
if (event == Ion::Events::OK && m_selectableTableView.selectedColumn() == 1
&& m_selectableTableView.selectedRow() == numberOfRows() - 1) {
if (addFunction()){
m_selectableTableView.dataHasChanged(true);
m_typeParameterController.setSequence((Sequence *)m_functionStore->functionAtIndex(m_selectableTableView.selectedRow()));
StackViewController * stack = stackController();
stack->push(&m_typeParameterController);
return true;
}
return false;
m_selectableTableView.dataHasChanged(true);
StackViewController * stack = stackController();
stack->push(&m_typeParameterController);
return true;
}
return false;
}

View File

@@ -3,13 +3,14 @@
namespace Sequence {
TypeParameterController::TypeParameterController(Responder * parentResponder) :
TypeParameterController::TypeParameterController(Responder * parentResponder, SequenceStore * sequenceStore) :
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))
Metric::BottomMargin, Metric::LeftMargin)),
m_sequenceStore(sequenceStore)
{
}
@@ -22,25 +23,15 @@ View * TypeParameterController::view() {
}
void TypeParameterController::didBecomeFirstResponder() {
m_selectableTableView.dataHasChanged(true);
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());
Sequence * newSequence = m_sequenceStore->addEmptyFunction();
newSequence->setType((Sequence::Type)m_selectableTableView.selectedRow());
StackViewController * stack = stackController();
stack->pop();
return true;
@@ -67,6 +58,23 @@ KDCoordinate TypeParameterController::cellHeight() {
return Metric::ParameterCellHeight;
}
void TypeParameterController::willDisplayCellAtLocation(TableViewCell * cell, int i, int j) {
char buffer[8];
char nextName = m_sequenceStore->firstAvailableName()[0];
buffer[0] = nextName;
if (j == 0) {
strlcpy(buffer+1, "(n)=", 7);
}
if (j == 1) {
strlcpy(buffer+1, "(n+1)=", 7);
}
if (j == 2) {
strlcpy(buffer+1, "(n+2)=", 7);
}
TextBufferMenuListCell * myCell = (TextBufferMenuListCell *)cell;
myCell->setText(buffer);
}
StackViewController * TypeParameterController::stackController() const {
return (StackViewController *)parentResponder();
}

View File

@@ -2,22 +2,22 @@
#define SEQUENCE_TYPE_PARAMATER_CONTROLLER_H
#include <escher.h>
#include "../sequence.h"
#include "../sequence_store.h"
namespace Sequence {
class TypeParameterController : public ViewController, public SimpleListViewDataSource {
public:
TypeParameterController(Responder * parentResponder);
TypeParameterController(Responder * parentResponder, SequenceStore * sequenceStore);
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;
void willDisplayCellAtLocation(TableViewCell * cell, int i, int j) override;
private:
StackViewController * stackController() const;
constexpr static int k_totalNumberOfCell = 3;
@@ -25,7 +25,7 @@ private:
TextBufferMenuListCell m_singleRecurrenceCell;
TextBufferMenuListCell m_doubleRecurenceCell;
SelectableTableView m_selectableTableView;
Sequence * m_sequence;
SequenceStore * m_sequenceStore;
};
}

View File

@@ -17,9 +17,9 @@ public:
Sequence * addEmptyFunction() override;
void removeFunction(Shared::Function * f) override;
int maxNumberOfFunctions() override;
const char * firstAvailableName() override;
static constexpr int k_maxNumberOfSequences = 3;
private:
const char * firstAvailableName() override;
const KDColor firstAvailableColor() override;
static constexpr KDColor k_defaultColors[k_maxNumberOfSequences] = {
KDColor::RGB24(0xbe2727), KDColor::RGB24(0x3e6f3c), KDColor::RGB24(0x656975)

View File

@@ -148,17 +148,6 @@ void ListController::didBecomeFirstResponder() {
app()->setFirstResponder(&m_selectableTableView);
}
bool ListController::addFunction() {
if (m_functionStore->numberOfFunctions() < m_functionStore->maxNumberOfFunctions()) {
m_functionStore->addEmptyFunction();
m_selectableTableView.reloadData();
return true;
}
// Add a warning to tell the user there is no more space for new functions
app()->displayWarning("Nombre maximal d'éléments atteint");
return false;
}
void ListController::configureFunction(Function * function) {
StackViewController * stack = stackController();
parameterController()->setFunction(function);

View File

@@ -28,7 +28,6 @@ public:
bool handleEvent(Ion::Events::Event event) override;
protected:
static constexpr KDCoordinate k_emptyRowHeight = 50;
bool addFunction();
void configureFunction(Function * function);
StackViewController * stackController() const;
SelectableTableView m_selectableTableView;