From 08a663a64fbcbbfc10d0921650c697f40142dc38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Wed, 8 Feb 2017 13:57:05 +0100 Subject: [PATCH] [apps/sequence] Do no add a new function as long as the user did not choose a type Change-Id: I67c3172b416d7d80a3bd9a4eb18091ab72626e4b --- apps/graph/list/list_controller.cpp | 4 +- apps/sequence/list/list_controller.cpp | 14 +++---- .../list/type_parameter_controller.cpp | 38 +++++++++++-------- .../sequence/list/type_parameter_controller.h | 8 ++-- apps/sequence/sequence_store.h | 2 +- apps/shared/list_controller.cpp | 11 ------ apps/shared/list_controller.h | 1 - 7 files changed, 36 insertions(+), 42 deletions(-) diff --git a/apps/graph/list/list_controller.cpp b/apps/graph/list/list_controller.cpp index d2b7223f8..1a416237a 100644 --- a/apps/graph/list/list_controller.cpp +++ b/apps/graph/list/list_controller.cpp @@ -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); diff --git a/apps/sequence/list/list_controller.cpp b/apps/sequence/list/list_controller.cpp index fb29be809..a29227215 100644 --- a/apps/sequence/list/list_controller.cpp +++ b/apps/sequence/list/list_controller.cpp @@ -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; } diff --git a/apps/sequence/list/type_parameter_controller.cpp b/apps/sequence/list/type_parameter_controller.cpp index 20209e6bf..ff3a47e27 100644 --- a/apps/sequence/list/type_parameter_controller.cpp +++ b/apps/sequence/list/type_parameter_controller.cpp @@ -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(); } diff --git a/apps/sequence/list/type_parameter_controller.h b/apps/sequence/list/type_parameter_controller.h index eeabf395c..791459e40 100644 --- a/apps/sequence/list/type_parameter_controller.h +++ b/apps/sequence/list/type_parameter_controller.h @@ -2,22 +2,22 @@ #define SEQUENCE_TYPE_PARAMATER_CONTROLLER_H #include -#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; }; } diff --git a/apps/sequence/sequence_store.h b/apps/sequence/sequence_store.h index 8cb7fa68e..e25dda2c8 100644 --- a/apps/sequence/sequence_store.h +++ b/apps/sequence/sequence_store.h @@ -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) diff --git a/apps/shared/list_controller.cpp b/apps/shared/list_controller.cpp index 3bed2be3d..21676b747 100644 --- a/apps/shared/list_controller.cpp +++ b/apps/shared/list_controller.cpp @@ -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); diff --git a/apps/shared/list_controller.h b/apps/shared/list_controller.h index 480015257..2ab0b3e38 100644 --- a/apps/shared/list_controller.h +++ b/apps/shared/list_controller.h @@ -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;