[apps/graph/values] Add IntervalParameterSelectorController

This commit is contained in:
Ruben Dashyan
2019-09-03 11:50:28 +02:00
parent e76bbd91cc
commit 90014f0062
5 changed files with 99 additions and 1 deletions

View File

@@ -26,6 +26,7 @@ app_graph_src = $(addprefix apps/graph/,\
list/type_parameter_controller.cpp \
values/derivative_parameter_controller.cpp \
values/function_parameter_controller.cpp \
values/interval_parameter_selector_controller.cpp \
values/values_controller.cpp \
)

View File

@@ -0,0 +1,63 @@
#include "interval_parameter_selector_controller.h"
#include "../../shared/interval_parameter_controller.h"
#include "../app.h"
#include <apps/i18n.h>
#include <assert.h>
namespace Graph {
IntervalParameterSelectorController::IntervalParameterSelectorController() :
ViewController(nullptr),
m_selectableTableView(this, this, this)
{
}
const char * IntervalParameterSelectorController::title() {
return I18n::translate(I18n::Message::IntervalSet);
}
void IntervalParameterSelectorController::didBecomeFirstResponder() {
if (selectedRow() < 0) {
selectCellAtLocation(0, 0);
}
Container::activeApp()->setFirstResponder(&m_selectableTableView);
}
bool IntervalParameterSelectorController::handleEvent(Ion::Events::Event event) {
if (event == Ion::Events::OK || event == Ion::Events::EXE || event == Ion::Events::Right) {
StackViewController * stack = (StackViewController *)parentResponder();
Shared::IntervalParameterController * controller = App::app()->valuesController()->intervalParameterController();
controller->setTitle(messageAtIndex(selectedRow()));
stack->push(controller);
return true;
}
return false;
}
int IntervalParameterSelectorController::numberOfRows() {
return MaxNumberOfRows;
};
HighlightCell * IntervalParameterSelectorController::reusableCell(int index) {
assert(0 <= index && index < reusableCellCount());
return m_intervalParameterCell + index;
}
int IntervalParameterSelectorController::reusableCellCount() {
return MaxNumberOfRows;
}
void IntervalParameterSelectorController::willDisplayCellForIndex(HighlightCell * cell, int index) {
assert(0 <= index && index < MaxNumberOfRows);
static_cast<MessageTableCellWithChevron *>(cell)->setMessage(messageAtIndex(index));
}
I18n::Message IntervalParameterSelectorController::messageAtIndex(int index) {
assert(0 <= index && index < MaxNumberOfRows);
constexpr I18n::Message message[MaxNumberOfRows] = {
I18n::Message::IntervalX
};
return message[index];
}
}

View File

@@ -0,0 +1,29 @@
#ifndef GRAPH_INTERVAL_PARAMETER_SELECTOR_CONTROLLER
#define GRAPH_INTERVAL_PARAMETER_SELECTOR_CONTROLLER
#include <escher.h>
namespace Graph {
class IntervalParameterSelectorController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource {
public:
IntervalParameterSelectorController();
const char * title() override;
View * view() override { return &m_selectableTableView; }
bool handleEvent(Ion::Events::Event event) override;
void didBecomeFirstResponder() override;
int numberOfRows() override;
KDCoordinate cellHeight() override { return Metric::ParameterCellHeight; }
int reusableCellCount() override;
HighlightCell * reusableCell(int index) override;
void willDisplayCellForIndex(HighlightCell * cell, int index) override;
private:
static constexpr int MaxNumberOfRows = 1;
I18n::Message messageAtIndex(int index);
MessageTableCellWithChevron m_intervalParameterCell[MaxNumberOfRows];
SelectableTableView m_selectableTableView;
};
}
#endif

View File

@@ -18,7 +18,7 @@ ValuesController::ValuesController(Responder * parentResponder, InputEventHandle
m_setIntervalButton(this, I18n::Message::IntervalSet, Invocation([](void * context, void * sender) {
ValuesController * valuesController = (ValuesController *) context;
StackViewController * stack = ((StackViewController *)valuesController->stackController());
stack->push(valuesController->intervalParameterController());
stack->push(valuesController->intervalParameterSelectorController());
return true;
}, this), k_font)
{

View File

@@ -5,6 +5,7 @@
#include "../../shared/buffer_function_title_cell.h"
#include "../../shared/values_controller.h"
#include "../../shared/interval_parameter_controller.h"
#include "interval_parameter_selector_controller.h"
#include "derivative_parameter_controller.h"
#include "function_parameter_controller.h"
@@ -21,6 +22,9 @@ public:
Shared::IntervalParameterController * intervalParameterController() override {
return &m_intervalParameterController;
}
IntervalParameterSelectorController * intervalParameterSelectorController() {
return &m_intervalParameterSelectorController;
}
void updateNumberOfColumns() override;
private:
constexpr static int k_maxNumberOfCells = 50;
@@ -41,6 +45,7 @@ private:
EvenOddBufferTextCell m_floatCells[k_maxNumberOfCells];
FunctionParameterController m_functionParameterController;
Shared::IntervalParameterController m_intervalParameterController;
IntervalParameterSelectorController m_intervalParameterSelectorController;
DerivativeParameterController m_derivativeParameterController;
Button m_setIntervalButton;
};