diff --git a/apps/graph/Makefile b/apps/graph/Makefile index f83315e96..27661cb44 100644 --- a/apps/graph/Makefile +++ b/apps/graph/Makefile @@ -16,6 +16,7 @@ app_objs += $(addprefix apps/graph/,\ values/title_cell.o\ values/value_cell.o\ values/values_controller.o\ + values/values_parameter_controller.o\ ) inline_images += apps/graph/graph_icon.png diff --git a/apps/graph/values/values_parameter_controller.cpp b/apps/graph/values/values_parameter_controller.cpp new file mode 100644 index 000000000..908de9d5a --- /dev/null +++ b/apps/graph/values/values_parameter_controller.cpp @@ -0,0 +1,72 @@ +#include "values_parameter_controller.h" +#include + +ValuesParameterController::ValuesParameterController(Responder * parentResponder) : + ViewController(parentResponder), + m_intervalStartCell(TableViewCell((char*)"X Debut")), + m_intervalEndCell(TableViewCell((char*)"X Fin")), + m_intervalStepCell(TableViewCell((char*)"Pas")), + m_listView(ListView(this,Metric::TopMargin, Metric::RightMargin, + Metric::BottomMargin, Metric::LeftMargin)), + m_activeCell(0) +{ +} + +const char * ValuesParameterController::title() const { + return "Regler l'intervalle"; +} + +View * ValuesParameterController::view() { + return &m_listView; +} + +void ValuesParameterController::didBecomeFirstResponder() { + setActiveCell(0); +} + +void ValuesParameterController::setActiveCell(int index) { + if (index < 0 || index >= k_totalNumberOfCell) { + return; + } + TableViewCell * previousCell = (TableViewCell *)(m_listView.cellAtIndex(m_activeCell)); + previousCell->setHighlighted(false); + + m_activeCell = index; + m_listView.scrollToRow(index); + TableViewCell * cell = (TableViewCell *)(m_listView.cellAtIndex(index)); + cell->setHighlighted(true); +} + +bool ValuesParameterController::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 ValuesParameterController::numberOfRows() { + return k_totalNumberOfCell; +}; + +View * ValuesParameterController::reusableCell(int index) { + assert(index >= 0); + assert(index < k_totalNumberOfCell); + View * cells[] = {&m_intervalStartCell, &m_intervalEndCell, &m_intervalStepCell}; + return cells[index]; +} + +int ValuesParameterController::reusableCellCount() { + return k_totalNumberOfCell; +} + +KDCoordinate ValuesParameterController::cellHeight() { + return 35; +} diff --git a/apps/graph/values/values_parameter_controller.h b/apps/graph/values/values_parameter_controller.h new file mode 100644 index 000000000..9f85e744b --- /dev/null +++ b/apps/graph/values/values_parameter_controller.h @@ -0,0 +1,29 @@ +#ifndef GRAPH_VALUES_PARAM_CONTROLLER_H +#define GRAPH_VALUES_PARAM_CONTROLLER_H + +#include + +class ValuesParameterController : public ViewController, public ListViewDataSource { +public: + ValuesParameterController(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; + TableViewCell m_intervalStartCell; + TableViewCell m_intervalEndCell; + TableViewCell m_intervalStepCell; + ListView m_listView; + int m_activeCell; +}; + +#endif