diff --git a/apps/graph/Makefile b/apps/graph/Makefile index 22a67789d..b3c5b74af 100644 --- a/apps/graph/Makefile +++ b/apps/graph/Makefile @@ -12,6 +12,7 @@ app_objs += $(addprefix apps/graph/,\ list/function_name_view.o\ list/list_controller.o\ list/parameter_controller.o\ + values/abscissa_parameter_controller.o\ values/function_title_cell.o\ values/interval.o\ values/title_cell.o\ diff --git a/apps/graph/values/abscissa_parameter_controller.cpp b/apps/graph/values/abscissa_parameter_controller.cpp new file mode 100644 index 000000000..d8a3119b9 --- /dev/null +++ b/apps/graph/values/abscissa_parameter_controller.cpp @@ -0,0 +1,76 @@ +#include "abscissa_parameter_controller.h" +#include + +namespace Graph { + +AbscissaParameterController::AbscissaParameterController(Responder * parentResponder) : + ViewController(parentResponder), + m_deleteColumn(ListViewCell((char*)"Effacer la colonne")), + m_copyColumn(ListViewCell((char*)"Copier la colonne dans une liste")), + m_setInterval(ListViewCell((char*)"Regler l'intervalle")), + m_listView(ListView(this,Metric::TopMargin, Metric::RightMargin, + Metric::BottomMargin, Metric::LeftMargin)), + m_activeCell(0) +{ +} + +const char * AbscissaParameterController::title() const { + return "Colonne x"; +} + +View * AbscissaParameterController::view() { + return &m_listView; +} + +void AbscissaParameterController::didBecomeFirstResponder() { + setActiveCell(m_activeCell); +} + +void AbscissaParameterController::setActiveCell(int index) { + if (index < 0 || index >= k_totalNumberOfCell) { + return; + } + ListViewCell * previousCell = (ListViewCell *)(m_listView.cellAtIndex(m_activeCell)); + previousCell->setHighlighted(false); + + m_activeCell = index; + m_listView.scrollToRow(index); + ListViewCell * cell = (ListViewCell *)(m_listView.cellAtIndex(index)); + cell->setHighlighted(true); +} + +bool AbscissaParameterController::handleEvent(Ion::Events::Event event) { + switch (event) { + case Ion::Events::Event::DOWN_ARROW: + setActiveCell(m_activeCell+1); + return true; + case Ion::Events::Event::UP_ARROW: + setActiveCell(m_activeCell-1); + return true; + case Ion::Events::Event::ENTER: + return true; + default: + return false; + } +} + +int AbscissaParameterController::numberOfRows() { + return k_totalNumberOfCell; +}; + +View * AbscissaParameterController::reusableCell(int index) { + assert(index >= 0); + assert(index < k_totalNumberOfCell); + View * cells[] = {&m_deleteColumn, &m_copyColumn, &m_setInterval}; + return cells[index]; +} + +int AbscissaParameterController::reusableCellCount() { + return k_totalNumberOfCell; +} + +KDCoordinate AbscissaParameterController::cellHeight() { + return 35; +} + +} diff --git a/apps/graph/values/abscissa_parameter_controller.h b/apps/graph/values/abscissa_parameter_controller.h new file mode 100644 index 000000000..31cf2cf1f --- /dev/null +++ b/apps/graph/values/abscissa_parameter_controller.h @@ -0,0 +1,32 @@ +#ifndef GRAPH_ABSCISSA_PARAM_CONTROLLER_H +#define GRAPH_ABSCISSA_PARAM_CONTROLLER_H + +#include + +namespace Graph { +class AbscissaParameterController : public ViewController, public ListViewDataSource { +public: + AbscissaParameterController(Responder * parentResponder); + + View * view() override; + const char * title() const override; + bool handleEvent(Ion::Events::Event event) override; + void didBecomeFirstResponder() override; + + void setActiveCell(int index); + int numberOfRows() override; + KDCoordinate cellHeight() override; + View * reusableCell(int index) override; + int reusableCellCount() override; +private: + constexpr static int k_totalNumberOfCell = 3; + ListViewCell m_deleteColumn; + ListViewCell m_copyColumn; + ListViewCell m_setInterval; + ListView m_listView; + int m_activeCell; +}; + +} + +#endif