diff --git a/apps/graph/Makefile b/apps/graph/Makefile index 7f185f9f8..96aa7d57d 100644 --- a/apps/graph/Makefile +++ b/apps/graph/Makefile @@ -10,6 +10,7 @@ app_objs += $(addprefix apps/graph/,\ graph/cursor_view.o\ graph/graph_controller.o\ graph/graph_view.o\ + graph/initialisation_parameter_controller.o\ graph/zoom_parameter_controller.o\ list/function_expression_view.o\ list/new_function_cell.o\ diff --git a/apps/graph/graph/initialisation_parameter_controller.cpp b/apps/graph/graph/initialisation_parameter_controller.cpp new file mode 100644 index 000000000..f79478c28 --- /dev/null +++ b/apps/graph/graph/initialisation_parameter_controller.cpp @@ -0,0 +1,98 @@ +#include "initialisation_parameter_controller.h" +#include +#include + +namespace Graph { + +InitialisationParameterController::InitialisationParameterController(Responder * parentResponder, AxisInterval * axisInterval) : + ViewController(parentResponder), + m_selectableTableView(SelectableTableView(this, this, Metric::TopMargin, Metric::RightMargin, + Metric::BottomMargin, Metric::LeftMargin)), + m_axisInterval(axisInterval) +{ + m_cells[0].setText("Trigonometrique"); + m_cells[1].setText("Abscisses entieres"); + m_cells[2].setText("Orthonorme"); + m_cells[3].setText("Reglage de base"); + +} + +const char * InitialisationParameterController::title() const { + return "Zoom predefini"; +} + +View * InitialisationParameterController::view() { + return &m_selectableTableView; +} + +void InitialisationParameterController::didBecomeFirstResponder() { + m_selectableTableView.selectCellAtLocation(0, 0); + app()->setFirstResponder(&m_selectableTableView); +} + +bool InitialisationParameterController::handleEvent(Ion::Events::Event event) { + if (event == Ion::Events::OK) { + switch (m_selectableTableView.selectedRow()) { + case 0: + // TODO: if mode == degree, xmin = -600, xmax = 600 + m_axisInterval->setXMin(-10.5f); + m_axisInterval->setXMax(10.5f); + m_axisInterval->setYAuto(false); + m_axisInterval->setYMin(-1.6f); + m_axisInterval->setYMax(1.6f); + break; + case 1: + { + float xMin = m_axisInterval->xMin(); + float xMax =m_axisInterval->xMax(); + m_axisInterval->setXMin(roundf((xMin+xMax)/2) - 160.0f); + m_axisInterval->setXMax(roundf((xMin+xMax)/2) + 159.0f); + break; + } + case 2: + { + float xMin = m_axisInterval->xMin(); + float xMax =m_axisInterval->xMax(); + float yMin = m_axisInterval->yMin(); + float yMax =m_axisInterval->yMax(); + m_axisInterval->setXMin((xMin+xMax)/2 - 5.3f); + m_axisInterval->setXMax((xMin+xMax)/2 + 5.3f); + m_axisInterval->setYMin((yMin+yMax)/2 - 3.1f); + m_axisInterval->setYMax((yMin+yMax)/2 + 3.1f); + break; + } + case 3: + m_axisInterval->setXMin(-10.0f); + m_axisInterval->setXMax(10.0f); + m_axisInterval->setYAuto(true); + break; + default: + return false; + } + StackViewController * stack = (StackViewController *)parentResponder(); + stack->pop(); + return true; + } + return false; +} + +int InitialisationParameterController::numberOfRows() { + return k_totalNumberOfCells; +}; + + +TableViewCell * InitialisationParameterController::reusableCell(int index) { + assert(index >= 0); + assert(index < k_totalNumberOfCells); + return &m_cells[index]; +} + +int InitialisationParameterController::reusableCellCount() { + return k_totalNumberOfCells; +} + +KDCoordinate InitialisationParameterController::cellHeight() { + return 35; +} + +} diff --git a/apps/graph/graph/initialisation_parameter_controller.h b/apps/graph/graph/initialisation_parameter_controller.h new file mode 100644 index 000000000..232bc5f56 --- /dev/null +++ b/apps/graph/graph/initialisation_parameter_controller.h @@ -0,0 +1,29 @@ +#ifndef GRAPH_GRAPH_INITIALISATION_PARAMETER_CONTROLLER_H +#define GRAPH_GRAPH_INITIALISATION_PARAMETER_CONTROLLER_H + +#include +#include "axis_interval.h" + +namespace Graph { + +class InitialisationParameterController : public ViewController, public SimpleListViewDataSource { +public: + InitialisationParameterController(Responder * parentResponder, AxisInterval * axisInterval); + View * view() override; + const char * title() const override; + bool handleEvent(Ion::Events::Event event) override; + void didBecomeFirstResponder() override; + int numberOfRows() override; + KDCoordinate cellHeight() override; + TableViewCell * reusableCell(int index) override; + int reusableCellCount() override; +private: + constexpr static int k_totalNumberOfCells = 4; + MenuListCell m_cells[k_totalNumberOfCells]; + SelectableTableView m_selectableTableView; + AxisInterval * m_axisInterval; +}; + +} + +#endif