diff --git a/apps/sequence/list/list_controller.cpp b/apps/sequence/list/list_controller.cpp index 52cd7fc02..3e6a02723 100644 --- a/apps/sequence/list/list_controller.cpp +++ b/apps/sequence/list/list_controller.cpp @@ -14,7 +14,7 @@ ListController::ListController(Responder * parentResponder, SequenceStore * sequ SequenceTitleCell(FunctionTitleCell::Orientation::VerticalIndicator), SequenceTitleCell(FunctionTitleCell::Orientation::VerticalIndicator), SequenceTitleCell(FunctionTitleCell::Orientation::VerticalIndicator), SequenceTitleCell(FunctionTitleCell::Orientation::VerticalIndicator), SequenceTitleCell(FunctionTitleCell::Orientation::VerticalIndicator), SequenceTitleCell(FunctionTitleCell::Orientation::VerticalIndicator)}, m_parameterController(ListParameterController(this, sequenceStore)), - m_typeParameterController(this, sequenceStore, TableCell::Layout::Vertical), + m_typeParameterController(this, sequenceStore, this, TableCell::Layout::Vertical), m_typeStackController(StackViewController(nullptr, &m_typeParameterController, true, KDColorWhite, Palette::PurpleDark, Palette::PurpleDark)), m_sequenceToolbox(SequenceToolbox(m_sequenceStore)) { @@ -77,6 +77,12 @@ void ListController::willDisplayCellAtLocation(HighlightCell * cell, int i, int myCell->setEven(functionIndexForRow(j)%2 == 0); } +void ListController::selectPreviousNewSequenceCell() { + if (sequenceDefinitionForRow(m_selectableTableView.selectedRow()) >= 0) { + m_selectableTableView.selectCellAtLocation(m_selectableTableView.selectedRow()-sequenceDefinitionForRow(m_selectableTableView.selectedRow()), m_selectableTableView.selectedColumn()); + } +} + void ListController::editExpression(Sequence * sequence, int sequenceDefinition, Ion::Events::Event event) { char * initialText = nullptr; char initialTextContent[255]; diff --git a/apps/sequence/list/list_controller.h b/apps/sequence/list/list_controller.h index 8179e343d..cb54bfd2f 100644 --- a/apps/sequence/list/list_controller.h +++ b/apps/sequence/list/list_controller.h @@ -22,6 +22,7 @@ public: virtual KDCoordinate rowHeight(int j) override; void willDisplayCellAtLocation(HighlightCell * cell, int i, int j) override; Toolbox * toolboxForTextField(TextField * textField) override; + void selectPreviousNewSequenceCell(); private: Shared::TextFieldDelegateApp * textFieldDelegateApp() override; void editExpression(Sequence * sequence, int sequenceDefinitionIndex, Ion::Events::Event event); diff --git a/apps/sequence/list/list_parameter_controller.cpp b/apps/sequence/list/list_parameter_controller.cpp index 4e86667c4..5b65d39b6 100644 --- a/apps/sequence/list/list_parameter_controller.cpp +++ b/apps/sequence/list/list_parameter_controller.cpp @@ -1,14 +1,15 @@ #include "list_parameter_controller.h" +#include "list_controller.h" using namespace Poincare; using namespace Shared; namespace Sequence { -ListParameterController::ListParameterController(Responder * parentResponder, SequenceStore * sequenceStore) : - Shared::ListParameterController(parentResponder, sequenceStore), +ListParameterController::ListParameterController(ListController * listController, SequenceStore * sequenceStore) : + Shared::ListParameterController(listController, sequenceStore), m_typeCell(PointerTableCellWithChevronAndExpression((char *)"Type de suite")), - m_typeParameterController(TypeParameterController(this, sequenceStore, TableCell::Layout::Horizontal, Metric::CommonTopMargin, Metric::CommonRightMargin, + m_typeParameterController(TypeParameterController(this, sequenceStore, listController, TableCell::Layout::Horizontal, Metric::CommonTopMargin, Metric::CommonRightMargin, Metric::CommonBottomMargin, Metric::CommonLeftMargin)) { } diff --git a/apps/sequence/list/list_parameter_controller.h b/apps/sequence/list/list_parameter_controller.h index 8c2a5df3e..1c1276137 100644 --- a/apps/sequence/list/list_parameter_controller.h +++ b/apps/sequence/list/list_parameter_controller.h @@ -8,9 +8,11 @@ namespace Sequence { +class ListController; + class ListParameterController : public Shared::ListParameterController { public: - ListParameterController(Responder * parentResponder, SequenceStore * sequenceStore); + ListParameterController(ListController * list, SequenceStore * sequenceStore); const char * title() const override; bool handleEvent(Ion::Events::Event event) override; void setFunction(Shared::Function * function) override; diff --git a/apps/sequence/list/type_parameter_controller.cpp b/apps/sequence/list/type_parameter_controller.cpp index a886a2b3a..050f7a2c9 100644 --- a/apps/sequence/list/type_parameter_controller.cpp +++ b/apps/sequence/list/type_parameter_controller.cpp @@ -1,4 +1,5 @@ #include "type_parameter_controller.h" +#include "list_controller.h" #include #include "../../../poincare/src/layout/baseline_relative_layout.h" #include "../../../poincare/src/layout/string_layout.h" @@ -7,7 +8,7 @@ using namespace Poincare; namespace Sequence { -TypeParameterController::TypeParameterController(Responder * parentResponder, SequenceStore * sequenceStore, TableCell::Layout cellLayout, +TypeParameterController::TypeParameterController(Responder * parentResponder, SequenceStore * sequenceStore, ListController * list, TableCell::Layout cellLayout, KDCoordinate topMargin, KDCoordinate rightMargin, KDCoordinate bottomMargin, KDCoordinate leftMargin) : ViewController(parentResponder), m_expliciteCell(ExpressionTableCellWithPointer((char*)"Explicite", cellLayout)), @@ -15,7 +16,8 @@ TypeParameterController::TypeParameterController(Responder * parentResponder, Se m_doubleRecurenceCell(ExpressionTableCellWithPointer((char*)"Recurrence d'ordre 2", cellLayout)), m_selectableTableView(SelectableTableView(this, this, topMargin, rightMargin, bottomMargin, leftMargin)), m_sequenceStore(sequenceStore), - m_sequence(nullptr) + m_sequence(nullptr), + m_listController(list) { } @@ -54,6 +56,7 @@ bool TypeParameterController::handleEvent(Ion::Events::Event event) { m_sequence->setFirstInitialConditionContent(""); m_sequence->setSecondInitialConditionContent(""); m_sequence->setType((Sequence::Type)m_selectableTableView.selectedRow()); + m_listController->selectPreviousNewSequenceCell(); } StackViewController * stack = stackController(); stack->pop(); diff --git a/apps/sequence/list/type_parameter_controller.h b/apps/sequence/list/type_parameter_controller.h index 2af039f33..eab3c5585 100644 --- a/apps/sequence/list/type_parameter_controller.h +++ b/apps/sequence/list/type_parameter_controller.h @@ -6,9 +6,11 @@ namespace Sequence { +class ListController; + class TypeParameterController : public ViewController, public SimpleListViewDataSource { public: - TypeParameterController(Responder * parentResponder, SequenceStore * sequenceStore, + TypeParameterController(Responder * parentResponder, SequenceStore * sequenceStore, ListController * list, TableCell::Layout cellLayout, KDCoordinate topMargin = 0, KDCoordinate rightMargin = 0, KDCoordinate bottomMargin = 0, KDCoordinate leftMargin = 0); ~TypeParameterController(); @@ -32,6 +34,7 @@ private: SelectableTableView m_selectableTableView; SequenceStore * m_sequenceStore; Sequence * m_sequence; + ListController * m_listController; }; }