[geometry] Added text field in FigureParametersController

This commit is contained in:
Laury
2021-12-19 14:54:54 +01:00
parent a3d3cbbfa5
commit d108b76a32
10 changed files with 47 additions and 40 deletions

View File

@@ -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)
{

View File

@@ -3,11 +3,12 @@
#include <escher.h>
#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

View File

@@ -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

View File

@@ -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

View File

@@ -5,7 +5,7 @@
namespace Geometry {
class PointNode : public FigureNode {
virtual FigureType type() const override { return FigureType::Point; }
};
class Point : public Figure {

View File

@@ -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<PointByCoordinates, PointByCoordinatesNode>({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

View File

@@ -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<StackViewController *>(parentResponder());
m_parametersController->setFigureBuilder(PointByCoordinatesBuilder());
m_parametersController->setParametersInfoFunctions(PointByCoordinates::numberOfParameters, PointByCoordinates::parameterTypeAtIndex);
stack->push(m_parametersController);
return true;
}

View File

@@ -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;
}*/
}
}

View File

@@ -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;
};
}

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB