Files
Upsilon/apps/regression/graph_controller.cpp
Émilie Feral 87c784e68d [apps/regression] Display a zoom view controller when clicking on the
zoom button on the graph view

Change-Id: I82607bb99675d3c7c1b0d34c64c460a08c19b340
2017-01-09 15:08:55 +01:00

132 lines
3.9 KiB
C++

#include "graph_controller.h"
namespace Regression {
GraphController::GraphController(Responder * parentResponder, HeaderViewController * headerViewController, Data * data) :
ViewController(parentResponder),
HeaderViewDelegate(headerViewController),
m_view(GraphView(data)),
m_windowParameterController(WindowParameterController(this, data)),
m_zoomParameterController(ZoomParameterController(this, data, &m_view)),
m_windowButton(this, "Axes", Invocation([](void * context, void * sender) {
GraphController * graphController = (GraphController *) context;
StackViewController * stack = graphController->stackController();
stack->push(graphController->windowParameterController());
}, this)),
m_zoomButton(this, "Zoom", Invocation([](void * context, void * sender) {
GraphController * graphController = (GraphController *) context;
StackViewController * stack = graphController->stackController();
stack->push(graphController->zoomParameterController());
}, this)),
m_defaultInitialisationButton(this, "Initialisation", Invocation([](void * context, void * sender) {}, this)),
m_data(data)
{
}
const char * GraphController::title() const {
return "Graph";
}
View * GraphController::view() {
return &m_view;
}
bool GraphController::handleEvent(Ion::Events::Event event) {
if (!m_view.isMainViewSelected()) {
if (event == Ion::Events::Down) {
headerViewController()->setSelectedButton(-1);
m_view.selectMainView(true);
m_view.reloadSelection();
return true;
}
if (event == Ion::Events::Up) {
headerViewController()->setSelectedButton(-1);
app()->setFirstResponder(tabController());
return true;
}
return false;
}
if (event == Ion::Events::Down || event == Ion::Events::Up) {
int direction = event == Ion::Events::Down ? -1 : 1;
m_view.reloadSelection();
int didMoveCursor = m_data->moveCursorVertically(direction);
if ( event == Ion::Events::Up && didMoveCursor < 0) {
m_view.selectMainView(false);
headerViewController()->setSelectedButton(0);
return true;
}
if (didMoveCursor == 0) {
m_view.reloadSelection();
} else {
m_view.reload();
}
return (didMoveCursor >= 0);
}
if (event == Ion::Events::Left || event == Ion::Events::Right) {
int direction = event == Ion::Events::Left ? -1 : 1;
m_view.reloadSelection();
int didMoveCursor = m_data->moveCursorHorizontally(direction);
if (didMoveCursor == 0) {
m_view.reloadSelection();
} else {
m_view.reload();
}
return (didMoveCursor >= 0);
}
return false;
}
void GraphController::didBecomeFirstResponder() {
headerViewController()->setSelectedButton(-1);
m_view.selectMainView(true);
// Layout view whe the graph view that might have been modified by the zoom page
headerViewController()->layoutView();
m_view.reload();
}
int GraphController::numberOfButtons() const {
return 3;
}
Button * GraphController::buttonAtIndex(int index) {
if (index == 0) {
return &m_windowButton;
}
if (index == 1) {
return &m_zoomButton;
}
return &m_defaultInitialisationButton;
}
bool GraphController::isEmpty() {
if (m_data->numberOfPairs() == 0) {
return true;
}
return false;
}
const char * GraphController::emptyMessage() {
return "Aucune donnee a tracer";
}
Responder * GraphController::defaultController() {
return tabController();
}
ViewController * GraphController::windowParameterController() {
return &m_windowParameterController;
}
ViewController * GraphController::zoomParameterController() {
return &m_zoomParameterController;
}
Responder * GraphController::tabController() const {
return (parentResponder()->parentResponder()->parentResponder()->parentResponder());
}
StackViewController * GraphController::stackController() const{
return (StackViewController *)(parentResponder()->parentResponder()->parentResponder());
}
}