From 9b52d0d1f9cb97f0564992ed6fa745955b68a223 Mon Sep 17 00:00:00 2001 From: Ruben Dashyan Date: Wed, 26 Jun 2019 09:56:24 +0200 Subject: [PATCH] [apps/graph/list] Define TypeParameterController class --- apps/graph/Makefile | 1 + apps/graph/list/type_parameter_controller.cpp | 72 +++++++++++++++++++ apps/graph/list/type_parameter_controller.h | 44 ++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 apps/graph/list/type_parameter_controller.cpp create mode 100644 apps/graph/list/type_parameter_controller.h diff --git a/apps/graph/Makefile b/apps/graph/Makefile index 67c70667d..2395b6acd 100644 --- a/apps/graph/Makefile +++ b/apps/graph/Makefile @@ -22,6 +22,7 @@ app_graph_src = $(addprefix apps/graph/,\ list/list_parameter_controller.cpp \ list/text_field_function_title_cell.cpp \ list/type_helper.cpp \ + list/type_parameter_controller.cpp \ values/derivative_parameter_controller.cpp \ values/function_parameter_controller.cpp \ values/values_controller.cpp \ diff --git a/apps/graph/list/type_parameter_controller.cpp b/apps/graph/list/type_parameter_controller.cpp new file mode 100644 index 000000000..cf662c257 --- /dev/null +++ b/apps/graph/list/type_parameter_controller.cpp @@ -0,0 +1,72 @@ +#include "type_parameter_controller.h" +#include "type_helper.h" +#include +#include "../app.h" +#include + +namespace Graph { + +TypeParameterController::TypeParameterController(Responder * parentResponder) : + ViewController(parentResponder), + m_selectableTableView(this, this, this, nullptr), + m_record() +{ +} + +void TypeParameterController::didBecomeFirstResponder() { + Container::activeApp()->setFirstResponder(&m_selectableTableView); +} + +bool TypeParameterController::handleEvent(Ion::Events::Event event) { + if (event == Ion::Events::OK || event == Ion::Events::EXE) { + assert(!m_record.isNull()); + Shared::CartesianFunction::PlotType plotType = static_cast(selectedRow()); + App * myApp = App::app(); + assert(!m_record.isNull()); + Shared::ExpiringPointer function = myApp->functionStore()->modelForRecord(m_record); + function->setPlotType(plotType); + StackViewController * stack = stackController(); + stack->pop(); + return true; + } + if (event == Ion::Events::Left && !m_record.isNull()) { + stackController()->pop(); + return true; + } + return false; +} + +const char * TypeParameterController::title() { + return I18n::translate(I18n::Message::CurveType); +} + +void TypeParameterController::viewWillAppear() { + App * myApp = App::app(); + assert(!m_record.isNull()); + Shared::ExpiringPointer function = myApp->functionStore()->modelForRecord(m_record); + int row = static_cast(function->plotType()); + selectCellAtLocation(0, row); + m_selectableTableView.reloadData(); +} + +KDCoordinate TypeParameterController::rowHeight(int j) { + return PlotTypeHelper::Layout(j).layoutSize().height() + 15; +} + +void TypeParameterController::willDisplayCellForIndex(HighlightCell * cell, int index) { + assert(0 <= index && index < k_numberOfTypes); + MessageTableCellWithExpression * myCell = static_cast(cell); + myCell->setMessage(PlotTypeHelper::Message(index)); + myCell->setLayout(PlotTypeHelper::Layout(index)); +} + +MessageTableCellWithExpression * TypeParameterController::reusableCell(int index, int type) { + assert(0 <= index && index < reusableCellCount(type)); + return &m_cells[index]; +} + +StackViewController * TypeParameterController::stackController() const { + return static_cast(parentResponder()); +} + +} diff --git a/apps/graph/list/type_parameter_controller.h b/apps/graph/list/type_parameter_controller.h new file mode 100644 index 000000000..fbcc06867 --- /dev/null +++ b/apps/graph/list/type_parameter_controller.h @@ -0,0 +1,44 @@ +#ifndef GRAPH_LIST_TYPE_PARAMATER_CONTROLLER_H +#define GRAPH_LIST_TYPE_PARAMATER_CONTROLLER_H + +#include +#include +#include +#include +#include +#include + +namespace Graph { + +class TypeParameterController : public ViewController, public ListViewDataSource, public SelectableTableViewDataSource { +public: + TypeParameterController(Responder * parentResponder); + + void didBecomeFirstResponder() override; + bool handleEvent(Ion::Events::Event event) override; + + // ViewController + const char * title() override; + View * view() override { return &m_selectableTableView; } + void viewWillAppear() override; + + // ListViewDataSource + int numberOfRows() override { return k_numberOfTypes; } + KDCoordinate rowHeight(int j) override; + void willDisplayCellForIndex(HighlightCell * cell, int index) override; + MessageTableCellWithExpression * reusableCell(int index, int type) override; + int reusableCellCount(int type) override { return k_numberOfTypes; } + int typeAtLocation(int i, int j) override { return 0; } + + void setRecord(Ion::Storage::Record record) { m_record = record; } +private: + constexpr static int k_numberOfTypes = 3; + StackViewController * stackController() const; + SelectableTableView m_selectableTableView; + MessageTableCellWithExpression m_cells[k_numberOfTypes]; + Ion::Storage::Record m_record; +}; + +} + +#endif