diff --git a/apps/geometry/app.cpp b/apps/geometry/app.cpp index 33dfe487d..7213d79cb 100644 --- a/apps/geometry/app.cpp +++ b/apps/geometry/app.cpp @@ -33,7 +33,7 @@ App::Descriptor * App::Snapshot::descriptor() } App::App(Snapshot * snapshot) : - ::App(snapshot, &m_stackViewController), + TextFieldDelegateApp(snapshot, &m_stackViewController), m_figuresController(&m_stackViewController), m_stackViewController(&m_modalViewController, &m_figuresController) { diff --git a/apps/geometry/app.h b/apps/geometry/app.h index fee49f23e..8d3f903c1 100644 --- a/apps/geometry/app.h +++ b/apps/geometry/app.h @@ -3,11 +3,12 @@ #include #include "list/figures_controller.h" +#include "../shared/text_field_delegate_app.h" namespace Geometry { -class App : public ::App +class App : public Shared::TextFieldDelegateApp { public: class Descriptor : public ::App::Descriptor diff --git a/apps/geometry/figures/figure.h b/apps/geometry/figures/figure.h index 7cd632b89..31771f071 100644 --- a/apps/geometry/figures/figure.h +++ b/apps/geometry/figures/figure.h @@ -14,7 +14,7 @@ public: virtual int numberOfChildren() const override { return 0; } virtual FigureType type() const = 0; - virtual FigureType subtype() const = 0; + virtual FigureDefinitionType definitionType() const = 0; }; class Figure : public TreeHandle { @@ -22,12 +22,6 @@ public: Figure(const FigureNode * node) : TreeHandle(node) {} }; -class FigureBuilder { -public: - virtual int numberOfParameters() const = 0; - virtual FigureType parameterTypeAtIndex() const = 0; -}; - } #endif diff --git a/apps/geometry/figures/figure_type.h b/apps/geometry/figures/figure_type.h index dbf980daf..bd4fddefc 100644 --- a/apps/geometry/figures/figure_type.h +++ b/apps/geometry/figures/figure_type.h @@ -8,7 +8,6 @@ enum class FigureType { Expression, // It's not a real figure type but we use it to build figures like points Point, - PointByCoordinates, Line, Circle, @@ -16,6 +15,10 @@ enum class FigureType { Indicator }; +enum class FigureDefinitionType { + PointByCoordinates +}; + } #endif diff --git a/apps/geometry/figures/point.h b/apps/geometry/figures/point.h index bfb97b106..e100f4272 100644 --- a/apps/geometry/figures/point.h +++ b/apps/geometry/figures/point.h @@ -5,7 +5,7 @@ namespace Geometry { class PointNode : public FigureNode { - + virtual FigureType type() const override { return FigureType::Point; } }; class Point : public Figure { diff --git a/apps/geometry/figures/point_by_coordinates.h b/apps/geometry/figures/point_by_coordinates.h index c1c4e285d..e06ffed68 100644 --- a/apps/geometry/figures/point_by_coordinates.h +++ b/apps/geometry/figures/point_by_coordinates.h @@ -10,8 +10,7 @@ class PointByCoordinatesNode : public PointNode { public: virtual size_t size() const override { return sizeof(PointByCoordinatesNode); } virtual int numberOfChildren() const override { return 2; } - virtual FigureType type() const override { return FigureType::Point; } - virtual FigureType subtype() const override { return FigureType::PointByCoordinates; } + virtual FigureDefinitionType definitionType() const override { return FigureDefinitionType::PointByCoordinates; } #if POINCARE_TREE_LOG void logNodeName(std::ostream & stream) const override { stream << "PointByCoordinates"; @@ -23,16 +22,10 @@ class PointByCoordinates : public Figure { public: PointByCoordinates(const PointByCoordinatesNode * n) : Figure(n) {} static PointByCoordinates Builder(Expression x, Expression y) { return TreeHandle::FixedArityBuilder({x, x}); } - + static int numberOfParameters() { return 2; } + static FigureType parameterTypeAtIndex(int i) { return FigureType::Expression; } }; -class PointByCoordinatesBuilder : public FigureBuilder { -public: - virtual int numberOfParameters() const override { return 2; } - virtual FigureType parameterTypeAtIndex() const override { return FigureType::Expression; } -private: - Expression m_x; - Expression m_y; -}; +} #endif diff --git a/apps/geometry/list/definition_type_controller.cpp b/apps/geometry/list/definition_type_controller.cpp index 329dd7cf9..69be1cd7a 100644 --- a/apps/geometry/list/definition_type_controller.cpp +++ b/apps/geometry/list/definition_type_controller.cpp @@ -74,7 +74,7 @@ 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->setParametersInfoFunctions(PointByCoordinates::numberOfParameters, PointByCoordinates::parameterTypeAtIndex); stack->push(m_parametersController); return true; } diff --git a/apps/geometry/list/figure_parameters_controller.cpp b/apps/geometry/list/figure_parameters_controller.cpp index bef3097f9..1a9bee70a 100644 --- a/apps/geometry/list/figure_parameters_controller.cpp +++ b/apps/geometry/list/figure_parameters_controller.cpp @@ -2,6 +2,7 @@ #include "../app.h" namespace Geometry { + FigureParametersController::FigureParametersController(Responder * parentResponder): ViewController(parentResponder), m_lastSelectedRow(0), @@ -10,6 +11,16 @@ FigureParametersController::FigureParametersController(Responder * parentRespond for (int i = 0; i < k_choiceCells; i++) { m_choicesCells[i].setParentResponder(&m_selectableTableView); } + for (int i = 0; i < k_textCells; i++) { + m_textCells[i].setParentResponder(&m_selectableTableView); + m_textCells[i].textField()->setDelegates(this, this); + } +} + + +void FigureParametersController::setParametersInfoFunctions(NumberOfParametersFunction numberOfParametersFunction, TypeOfParametersAtIndexFunction typeOfParametersAtIndexFunction) { + m_numberOfParametersFunction = numberOfParametersFunction; + m_typeOfParametersAtIndexFunction = typeOfParametersAtIndexFunction; } void FigureParametersController::didBecomeFirstResponder() { @@ -33,22 +44,22 @@ bool FigureParametersController::handleEvent(Ion::Events::Event event) { /* ListViewDataSource */ int FigureParametersController::typeAtLocation(int i, int j) { - return m_figureBuilder.parameterTypeAtIndex(j); + return (int) m_typeOfParametersAtIndexFunction(i); } int FigureParametersController::reusableCellCount(int type) { - return type == FigureType.Expression ? k_textCells: k_choiceCells; + return type == (int) FigureType::Expression ? k_textCells: k_choiceCells; } HighlightCell * FigureParametersController::reusableCell(int index, int type) { - if (type == FigureType.Expression) { + if (type == (int) FigureType::Expression) { return &m_textCells[index]; } return &m_choicesCells[index]; } int FigureParametersController::numberOfRows() const { - return 2; + return m_numberOfParametersFunction(); } KDCoordinate FigureParametersController::rowHeight(int j) { return Metric::ParameterCellHeight; @@ -66,14 +77,14 @@ void FigureParametersController::willDisplayCellForIndex(HighlightCell * cell, i } -/*bool FigureParametersController::textFieldShouldFinishEditing(TextField * textField, Ion::Events::Event event) { - return (event == Ion::Events::Up); - /*return (event == Ion::Events::Down && selectedRow() < numberOfRows()-1) +bool FigureParametersController::textFieldShouldFinishEditing(TextField * textField, Ion::Events::Event event) { + return (event == Ion::Events::Down && selectedRow() < numberOfRows()-1) || (event == Ion::Events::Up && selectedRow() > 0) - || TextFieldDelegate::textFieldShouldFinishEditing(textField, event);*//* + || TextFieldDelegate::textFieldShouldFinishEditing(textField, event); } + bool FigureParametersController::textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) { return true; -}*/ +} } diff --git a/apps/geometry/list/figure_parameters_controller.h b/apps/geometry/list/figure_parameters_controller.h index 2a00d7ab6..203ff81de 100644 --- a/apps/geometry/list/figure_parameters_controller.h +++ b/apps/geometry/list/figure_parameters_controller.h @@ -5,16 +5,21 @@ #include "apps/i18n.h" #include "message_table_cell_with_selector.h" #include "../figures/figure.h" - +#include "../../shared/parameter_text_field_delegate.h" +#include "../../shared/input_event_handler_delegate.h" namespace Geometry { + +typedef int (*NumberOfParametersFunction)(); +typedef FigureType (*TypeOfParametersAtIndexFunction)(int); + /** * \brief Controller returnig the parameter choosen by the user to define the figure */ -class FigureParametersController : public ViewController, public ListViewDataSource, public SelectableTableViewDataSource { +class FigureParametersController : public ViewController, public ListViewDataSource, public SelectableTableViewDataSource, public Shared::ParameterTextFieldDelegate, public Shared::InputEventHandlerDelegate { public: FigureParametersController(Responder * parentResponder); - void setFigureBuilder(FigureBuilder figureBuilder) { m_figureBuilder = figureBuilder; } + void setParametersInfoFunctions(NumberOfParametersFunction numberOfParametersFunction, TypeOfParametersAtIndexFunction typeOfParametersAtIndexFunction); /* ViewController */ const char * title() override { return I18n::translate(I18n::Message::ParametersChoice); } @@ -35,12 +40,11 @@ public: KDCoordinate rowHeight(int j) override; KDCoordinate cumulatedHeightFromIndex(int j) override; int indexFromCumulatedHeight(KDCoordinate offsetY) override; - void willDisplayCellForIndex(HighlightCell * cell, int index) override; - + void willDisplayCellForIndex(HighlightCell * cell, int index) override; /* InputEventHandlerDelegate */ - //bool textFieldShouldFinishEditing(TextField * textField, Ion::Events::Event event) override; - //bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override; + bool textFieldShouldFinishEditing(TextField * textField, Ion::Events::Event event) override; + bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override; private: SelectableTableView m_selectableTableView; @@ -49,7 +53,8 @@ private: int m_lastSelectedRow; MessageTableCellWithEditableText m_textCells[k_textCells]; MessageTableCellWithSelector m_choicesCells[k_choiceCells]; - FigureBuilder m_figureBuilder; + NumberOfParametersFunction m_numberOfParametersFunction; + TypeOfParametersAtIndexFunction m_typeOfParametersAtIndexFunction; }; } diff --git a/themes/themes/local/omega_dark/apps/reader_icon.png b/themes/themes/local/build/apps/reader_icon.png similarity index 100% rename from themes/themes/local/omega_dark/apps/reader_icon.png rename to themes/themes/local/build/apps/reader_icon.png