From a3d3cbbfa5967f61f885a0410424e174ddd9f922 Mon Sep 17 00:00:00 2001 From: Laury Date: Mon, 13 Dec 2021 20:39:57 +0100 Subject: [PATCH] [geometry] WIP --- apps/geometry/figures/figure.h | 4 +--- apps/geometry/figures/point.h | 2 +- apps/geometry/list/definition_type_controller.cpp | 6 ++++-- apps/geometry/list/definition_type_controller.h | 3 ++- apps/geometry/list/figure_parameters_controller.cpp | 10 +++++++--- apps/geometry/list/figure_parameters_controller.h | 5 +++-- apps/geometry/list/figure_type_controller.cpp | 4 +++- apps/geometry/list/figure_type_controller.h | 1 + poincare/src/tree_handle.cpp | 2 +- 9 files changed, 23 insertions(+), 14 deletions(-) diff --git a/apps/geometry/figures/figure.h b/apps/geometry/figures/figure.h index 5c11c50b3..7cd632b89 100644 --- a/apps/geometry/figures/figure.h +++ b/apps/geometry/figures/figure.h @@ -9,9 +9,7 @@ namespace Geometry { class FigureNode : public TreeNode { public: - FigureNode(); - - virtual size_t size() const override; + virtual size_t size() const override = 0; virtual int numberOfChildren() const override { return 0; } diff --git a/apps/geometry/figures/point.h b/apps/geometry/figures/point.h index cbf48f3ae..bfb97b106 100644 --- a/apps/geometry/figures/point.h +++ b/apps/geometry/figures/point.h @@ -5,7 +5,7 @@ namespace Geometry { class PointNode : public FigureNode { - + }; class Point : public Figure { diff --git a/apps/geometry/list/definition_type_controller.cpp b/apps/geometry/list/definition_type_controller.cpp index c10b9a19b..329dd7cf9 100644 --- a/apps/geometry/list/definition_type_controller.cpp +++ b/apps/geometry/list/definition_type_controller.cpp @@ -48,6 +48,7 @@ static const uint8_t sIndicatorDefinitionsMessagesCount = sizeof(sIndicatorDefin DefinitionTypeController::DefinitionTypeController(Responder * parentResponder, FigureParametersController * parametersController): ViewController(parentResponder), + m_lastSelectedRow(0), m_selectableTableView(this), m_messages(nullptr), m_figureType(FigureType::None), @@ -60,8 +61,8 @@ DefinitionTypeController::DefinitionTypeController(Responder * parentResponder, void DefinitionTypeController::viewWillAppear() { assert(m_figureType != FigureType::None && m_messages != nullptr); + selectRow(m_lastSelectedRow); m_selectableTableView.reloadData(); // We reload the cell of the table view to update their message - selectRow(0); } void DefinitionTypeController::didBecomeFirstResponder() { @@ -71,8 +72,9 @@ void DefinitionTypeController::didBecomeFirstResponder() { bool DefinitionTypeController::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::OK || event == Ion::Events::EXE || event == Ion::Events::Right) { + m_lastSelectedRow = selectedRow(); StackViewController * stack = static_cast(parentResponder()); - //m_parametersController->setFigureBuilder(PointByCoordinatesBuilder()); + m_parametersController->setFigureBuilder(PointByCoordinatesBuilder()); stack->push(m_parametersController); return true; } diff --git a/apps/geometry/list/definition_type_controller.h b/apps/geometry/list/definition_type_controller.h index 28679718d..5f321a0ef 100644 --- a/apps/geometry/list/definition_type_controller.h +++ b/apps/geometry/list/definition_type_controller.h @@ -40,9 +40,10 @@ public: private: constexpr static KDCoordinate k_cellHeight = Metric::ParameterCellHeight; constexpr static int k_numberOfCells = 6; + int m_lastSelectedRow; MessageTableCellWithChevron m_cells[k_numberOfCells]; SelectableTableView m_selectableTableView; - I18n::Message * m_messages; + const I18n::Message * m_messages; FigureType m_figureType; FigureParametersController * m_parametersController; }; diff --git a/apps/geometry/list/figure_parameters_controller.cpp b/apps/geometry/list/figure_parameters_controller.cpp index 45a9ec15a..bef3097f9 100644 --- a/apps/geometry/list/figure_parameters_controller.cpp +++ b/apps/geometry/list/figure_parameters_controller.cpp @@ -4,6 +4,7 @@ namespace Geometry { FigureParametersController::FigureParametersController(Responder * parentResponder): ViewController(parentResponder), + m_lastSelectedRow(0), m_selectableTableView(this) { for (int i = 0; i < k_choiceCells; i++) { @@ -16,7 +17,7 @@ void FigureParametersController::didBecomeFirstResponder() { } void FigureParametersController::viewWillAppear() { - selectRow(0); + selectRow(m_lastSelectedRow); } bool FigureParametersController::handleEvent(Ion::Events::Event event) { @@ -32,14 +33,17 @@ bool FigureParametersController::handleEvent(Ion::Events::Event event) { /* ListViewDataSource */ int FigureParametersController::typeAtLocation(int i, int j) { - return 0; + return m_figureBuilder.parameterTypeAtIndex(j); } int FigureParametersController::reusableCellCount(int type) { - return 2; + return type == FigureType.Expression ? k_textCells: k_choiceCells; } HighlightCell * FigureParametersController::reusableCell(int index, int type) { + if (type == FigureType.Expression) { + return &m_textCells[index]; + } return &m_choicesCells[index]; } diff --git a/apps/geometry/list/figure_parameters_controller.h b/apps/geometry/list/figure_parameters_controller.h index 4716c377d..2a00d7ab6 100644 --- a/apps/geometry/list/figure_parameters_controller.h +++ b/apps/geometry/list/figure_parameters_controller.h @@ -14,7 +14,7 @@ namespace Geometry { class FigureParametersController : public ViewController, public ListViewDataSource, public SelectableTableViewDataSource { public: FigureParametersController(Responder * parentResponder); - // void setFigureBuilder(FigureBuilder figureBuilder) { m_figureBuilder = figureBuilder; } + void setFigureBuilder(FigureBuilder figureBuilder) { m_figureBuilder = figureBuilder; } /* ViewController */ const char * title() override { return I18n::translate(I18n::Message::ParametersChoice); } @@ -46,9 +46,10 @@ private: SelectableTableView m_selectableTableView; constexpr static int k_textCells = 2; constexpr static int k_choiceCells = 3; + int m_lastSelectedRow; MessageTableCellWithEditableText m_textCells[k_textCells]; MessageTableCellWithSelector m_choicesCells[k_choiceCells]; - // FigureBuilder m_figureBuilder; + FigureBuilder m_figureBuilder; }; } diff --git a/apps/geometry/list/figure_type_controller.cpp b/apps/geometry/list/figure_type_controller.cpp index 218b32baf..e0e4c1a8c 100644 --- a/apps/geometry/list/figure_type_controller.cpp +++ b/apps/geometry/list/figure_type_controller.cpp @@ -21,6 +21,7 @@ static I18n::Message sMessages[] = { FigureTypeController::FigureTypeController(Responder * parentResponder, DefinitionTypeController * definitionTypeController) : ViewController(parentResponder), + m_lastSelectedRow(0), m_selectableTableView(this), m_definitionTypeController(definitionTypeController), m_messages(sMessages) @@ -31,7 +32,7 @@ FigureTypeController::FigureTypeController(Responder * parentResponder, Definiti } void FigureTypeController::viewWillAppear() { - //selectRow(0); + selectRow(m_lastSelectedRow); } void FigureTypeController::didBecomeFirstResponder() { @@ -41,6 +42,7 @@ void FigureTypeController::didBecomeFirstResponder() { bool FigureTypeController::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::OK || event == Ion::Events::EXE || event == Ion::Events::Right) { + m_lastSelectedRow = selectedRow(); StackViewController * stack = static_cast(parentResponder()); m_definitionTypeController->setFigureType(sTypes[selectedRow()]); stack->push(m_definitionTypeController); diff --git a/apps/geometry/list/figure_type_controller.h b/apps/geometry/list/figure_type_controller.h index 0604ce767..57078bf22 100644 --- a/apps/geometry/list/figure_type_controller.h +++ b/apps/geometry/list/figure_type_controller.h @@ -37,6 +37,7 @@ private: constexpr static KDCoordinate k_cellHeight = Metric::ParameterCellHeight; constexpr static int k_numberOfCells = 5; constexpr static int k_numberOfRows = 5; + int m_lastSelectedRow; MessageTableCellWithChevron m_cells[k_numberOfCells]; SelectableTableView m_selectableTableView; DefinitionTypeController * m_definitionTypeController; diff --git a/poincare/src/tree_handle.cpp b/poincare/src/tree_handle.cpp index 38c214fc9..714918adf 100644 --- a/poincare/src/tree_handle.cpp +++ b/poincare/src/tree_handle.cpp @@ -381,6 +381,6 @@ template VectorNormLayout TreeHandle::FixedArityBuilder(const Tuple &); // Geometry templates -template Power TreeHandle::FixedArityBuilder(const Tuple &); +template PointByCoordinates TreeHandle::FixedArityBuilder(const Tuple &); }