mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-27 01:29:58 +01:00
[apps] Factorize the graph view controller of regression and graph apps
Change-Id: Ib586376c3afc0738ea39dd86fb693ec08811281e
This commit is contained in:
@@ -14,6 +14,7 @@ app_objs += $(addprefix apps/,\
|
||||
curve_view.o\
|
||||
curve_view_with_banner.o\
|
||||
curve_view_with_banner_and_cursor.o\
|
||||
curve_view_with_banner_and_cursor_controller.o\
|
||||
curve_view_window.o\
|
||||
curve_view_window_with_cursor.o\
|
||||
data.o\
|
||||
|
||||
146
apps/curve_view_with_banner_and_cursor_controller.cpp
Normal file
146
apps/curve_view_with_banner_and_cursor_controller.cpp
Normal file
@@ -0,0 +1,146 @@
|
||||
#include "curve_view_with_banner_and_cursor_controller.h"
|
||||
#include <assert.h>
|
||||
#include <math.h>
|
||||
|
||||
CurveViewWindowWithBannerAndCursorController::CurveViewWindowWithBannerAndCursorController(Responder * parentResponder,
|
||||
HeaderViewController * header, CurveViewWindowWithCursor * graphWindow, CurveViewWithBannerAndCursor * graphView) :
|
||||
ViewController(parentResponder),
|
||||
HeaderViewDelegate(header),
|
||||
m_graphWindow(graphWindow),
|
||||
m_graphView(graphView),
|
||||
m_windowParameterController(WindowParameterController(this, m_graphWindow)),
|
||||
m_zoomParameterController(ZoomParameterController(this, m_graphWindow, m_graphView)),
|
||||
m_windowButton(this, "Axes", Invocation([](void * context, void * sender) {
|
||||
CurveViewWindowWithBannerAndCursorController * graphController = (CurveViewWindowWithBannerAndCursorController *) context;
|
||||
StackViewController * stack = graphController->stackController();
|
||||
stack->push(graphController->windowParameterController());
|
||||
}, this)),
|
||||
m_zoomButton(this, "Zoom", Invocation([](void * context, void * sender) {
|
||||
CurveViewWindowWithBannerAndCursorController * graphController = (CurveViewWindowWithBannerAndCursorController *) context;
|
||||
StackViewController * stack = graphController->stackController();
|
||||
stack->push(graphController->zoomParameterController());
|
||||
}, this)),
|
||||
m_defaultInitialisationButton(this, "Initialisation", Invocation([](void * context, void * sender) {
|
||||
CurveViewWindowWithBannerAndCursorController * graphController = (CurveViewWindowWithBannerAndCursorController *) context;
|
||||
StackViewController * stack = graphController->stackController();
|
||||
stack->push(graphController->initialisationParameterController());
|
||||
}, this))
|
||||
{
|
||||
}
|
||||
|
||||
const char * CurveViewWindowWithBannerAndCursorController::title() const {
|
||||
return "Graphique";
|
||||
}
|
||||
|
||||
View * CurveViewWindowWithBannerAndCursorController::view() {
|
||||
return m_graphView;
|
||||
}
|
||||
|
||||
bool CurveViewWindowWithBannerAndCursorController::handleEvent(Ion::Events::Event event) {
|
||||
if (!m_graphView->isMainViewSelected()) {
|
||||
if (event == Ion::Events::Down) {
|
||||
headerViewController()->setSelectedButton(-1);
|
||||
m_graphView->selectMainView(true);
|
||||
m_graphView->reloadSelection();
|
||||
return true;
|
||||
}
|
||||
if (event == Ion::Events::Up) {
|
||||
headerViewController()->setSelectedButton(-1);
|
||||
app()->setFirstResponder(tabController());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (event == Ion::Events::Plus) {
|
||||
m_graphWindow->zoom(1.0f/3.0f);
|
||||
m_graphView->reload();
|
||||
return true;
|
||||
}
|
||||
if (event == Ion::Events::Minus) {
|
||||
m_graphWindow->zoom(3.0f/4.0f);
|
||||
m_graphView->reload();
|
||||
return true;
|
||||
}
|
||||
if (event == Ion::Events::Left || event == Ion::Events::Right) {
|
||||
int direction = event == Ion::Events::Left ? -1 : 1;
|
||||
m_graphView->reloadSelection();
|
||||
int didMoveCursor = m_graphWindow->moveCursorHorizontally(direction);
|
||||
if (didMoveCursor == 0) {
|
||||
m_graphView->reloadSelection();
|
||||
} else {
|
||||
m_graphView->reload();
|
||||
}
|
||||
return (didMoveCursor >= 0);
|
||||
}
|
||||
if (event == Ion::Events::Down || event == Ion::Events::Up) {
|
||||
int direction = event == Ion::Events::Down ? -1 : 1;
|
||||
m_graphView->reloadSelection();
|
||||
int didMoveCursor = m_graphWindow->moveCursorVertically(direction);
|
||||
if (didMoveCursor < 0) {
|
||||
if (event == Ion::Events::Down) {
|
||||
return false;
|
||||
}
|
||||
m_graphView->selectMainView(false);
|
||||
headerViewController()->setSelectedButton(0);
|
||||
return true;
|
||||
}
|
||||
if (didMoveCursor == 0) {
|
||||
m_graphView->reloadSelection();
|
||||
}
|
||||
if (didMoveCursor == 1) {
|
||||
m_graphView->reload();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (event == Ion::Events::OK) {
|
||||
return handleEnter();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void CurveViewWindowWithBannerAndCursorController::didBecomeFirstResponder() {
|
||||
headerViewController()->setSelectedButton(-1);
|
||||
m_graphView->selectMainView(true);
|
||||
// Layout view whe the graph view that might have been modified by the zoom page
|
||||
headerViewController()->layoutView();
|
||||
// Reload graph view
|
||||
m_graphView->reload();
|
||||
}
|
||||
|
||||
ViewController * CurveViewWindowWithBannerAndCursorController::windowParameterController() {
|
||||
return &m_windowParameterController;
|
||||
}
|
||||
|
||||
ViewController * CurveViewWindowWithBannerAndCursorController::zoomParameterController() {
|
||||
return &m_zoomParameterController;
|
||||
}
|
||||
|
||||
int CurveViewWindowWithBannerAndCursorController::numberOfButtons() const {
|
||||
return 3;
|
||||
}
|
||||
|
||||
Button * CurveViewWindowWithBannerAndCursorController::buttonAtIndex(int index) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
return &m_windowButton;
|
||||
case 1:
|
||||
return &m_zoomButton;
|
||||
case 2:
|
||||
return &m_defaultInitialisationButton;
|
||||
default:
|
||||
assert(false);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Responder * CurveViewWindowWithBannerAndCursorController::defaultController() {
|
||||
return tabController();
|
||||
}
|
||||
|
||||
Responder * CurveViewWindowWithBannerAndCursorController::tabController() const{
|
||||
return (parentResponder()->parentResponder()->parentResponder()->parentResponder());
|
||||
}
|
||||
|
||||
StackViewController * CurveViewWindowWithBannerAndCursorController::stackController() const{
|
||||
return (StackViewController *)(parentResponder()->parentResponder()->parentResponder());
|
||||
}
|
||||
39
apps/curve_view_with_banner_and_cursor_controller.h
Normal file
39
apps/curve_view_with_banner_and_cursor_controller.h
Normal file
@@ -0,0 +1,39 @@
|
||||
#ifndef APPS_CURVE_VIEW_WINDOW_WITH_BANNER_AND_CURSOR_CONTROLLER_H
|
||||
#define APPS_CURVE_VIEW_WINDOW_WITH_BANNER_AND_CURSOR_CONTROLLER_H
|
||||
|
||||
#include <escher.h>
|
||||
#include "curve_view_window_with_cursor.h"
|
||||
#include "curve_view_with_banner_and_cursor.h"
|
||||
#include "window_parameter_controller.h"
|
||||
#include "zoom_parameter_controller.h"
|
||||
|
||||
class CurveViewWindowWithBannerAndCursorController : public ViewController, public HeaderViewDelegate, public AlternateEmptyViewDelegate {
|
||||
public:
|
||||
CurveViewWindowWithBannerAndCursorController(Responder * parentResponder, HeaderViewController * header, CurveViewWindowWithCursor * graphWindow, CurveViewWithBannerAndCursor * graphView);
|
||||
View * view() override;
|
||||
const char * title() const override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
void didBecomeFirstResponder() override;
|
||||
|
||||
ViewController * windowParameterController();
|
||||
ViewController * zoomParameterController();
|
||||
virtual ViewController * initialisationParameterController() = 0;
|
||||
|
||||
int numberOfButtons() const override;
|
||||
Button * buttonAtIndex(int index) override;
|
||||
|
||||
Responder * defaultController() override;
|
||||
protected:
|
||||
virtual bool handleEnter() = 0;
|
||||
Responder * tabController() const;
|
||||
StackViewController * stackController() const;
|
||||
CurveViewWindowWithCursor * m_graphWindow;
|
||||
CurveViewWithBannerAndCursor * m_graphView;
|
||||
WindowParameterController m_windowParameterController;
|
||||
ZoomParameterController m_zoomParameterController;
|
||||
Button m_windowButton;
|
||||
Button m_zoomButton;
|
||||
Button m_defaultInitialisationButton;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -6,29 +6,11 @@
|
||||
namespace Graph {
|
||||
|
||||
GraphController::GraphController(Responder * parentResponder, FunctionStore * functionStore, HeaderViewController * header) :
|
||||
ViewController(parentResponder),
|
||||
HeaderViewDelegate(header),
|
||||
CurveViewWindowWithBannerAndCursorController(parentResponder, header, &m_graphWindow, &m_view),
|
||||
m_view(GraphView(functionStore, &m_graphWindow)),
|
||||
m_graphWindow(functionStore),
|
||||
m_windowParameterController(WindowParameterController(this, &m_graphWindow)),
|
||||
m_zoomParameterController(ZoomParameterController(this, &m_graphWindow, &m_view)),
|
||||
m_initialisationParameterController(InitialisationParameterController(this, &m_graphWindow)),
|
||||
m_curveParameterController(CurveParameterController(&m_view, &m_graphWindow)),
|
||||
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) {
|
||||
GraphController * graphController = (GraphController *) context;
|
||||
StackViewController * stack = graphController->stackController();
|
||||
stack->push(graphController->initialisationParameterController());
|
||||
}, this)),
|
||||
m_functionStore(functionStore)
|
||||
{
|
||||
}
|
||||
@@ -40,10 +22,6 @@ View * GraphController::view() {
|
||||
return &m_view;
|
||||
}
|
||||
|
||||
const char * GraphController::title() const {
|
||||
return "Graphique";
|
||||
}
|
||||
|
||||
bool GraphController::isEmpty() {
|
||||
if (m_functionStore->numberOfActiveFunctions() == 0) {
|
||||
return true;
|
||||
@@ -58,48 +36,10 @@ const char * GraphController::emptyMessage() {
|
||||
return "Aucune fonction selectionnee";
|
||||
}
|
||||
|
||||
Responder * GraphController::defaultController() {
|
||||
return tabController();
|
||||
}
|
||||
|
||||
Responder * GraphController::tabController() const{
|
||||
return (parentResponder()->parentResponder()->parentResponder()->parentResponder());
|
||||
}
|
||||
|
||||
StackViewController * GraphController::stackController() const{
|
||||
return (StackViewController *)(parentResponder()->parentResponder()->parentResponder());
|
||||
}
|
||||
|
||||
ViewController * GraphController::windowParameterController() {
|
||||
return &m_windowParameterController;
|
||||
}
|
||||
|
||||
ViewController * GraphController::zoomParameterController() {
|
||||
return &m_zoomParameterController;
|
||||
}
|
||||
|
||||
ViewController * GraphController::initialisationParameterController() {
|
||||
return &m_initialisationParameterController;
|
||||
}
|
||||
|
||||
int GraphController::numberOfButtons() const {
|
||||
return 3;
|
||||
}
|
||||
|
||||
Button * GraphController::buttonAtIndex(int index) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
return &m_windowButton;
|
||||
case 1:
|
||||
return &m_zoomButton;
|
||||
case 2:
|
||||
return &m_defaultInitialisationButton;
|
||||
default:
|
||||
assert(false);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void GraphController::didBecomeFirstResponder() {
|
||||
if (m_view.context() == nullptr) {
|
||||
App * graphApp = (Graph::App *)app();
|
||||
@@ -113,74 +53,15 @@ void GraphController::didBecomeFirstResponder() {
|
||||
if (m_graphWindow.computeYaxis()) {
|
||||
m_graphWindow.initCursorPosition();
|
||||
}
|
||||
headerViewController()->setSelectedButton(-1);
|
||||
m_view.selectMainView(true);
|
||||
// Layout view whe the graph view that might have been modified by the zoom page
|
||||
headerViewController()->layoutView();
|
||||
// Reload graph view
|
||||
m_view.reload();
|
||||
CurveViewWindowWithBannerAndCursorController::didBecomeFirstResponder();
|
||||
}
|
||||
|
||||
bool GraphController::handleEvent(Ion::Events::Event event) {
|
||||
if (!m_view.isMainViewSelected()) {
|
||||
if (event == Ion::Events::Down) {
|
||||
headerViewController()->setSelectedButton(-1);
|
||||
app()->setFirstResponder(this);
|
||||
m_view.selectMainView(true);
|
||||
return true;
|
||||
}
|
||||
if (event == Ion::Events::Up) {
|
||||
headerViewController()->setSelectedButton(-1);
|
||||
app()->setFirstResponder(tabController());
|
||||
}
|
||||
return headerViewController()->handleEvent(event);
|
||||
} else {
|
||||
if (event == Ion::Events::Plus) {
|
||||
m_graphWindow.zoom(1.0f/3.0f);
|
||||
m_view.reload();
|
||||
return true;
|
||||
}
|
||||
if (event == Ion::Events::Minus) {
|
||||
m_graphWindow.zoom(3.0f/4.0f);
|
||||
m_view.reload();
|
||||
return true;
|
||||
}
|
||||
if (event == Ion::Events::Right || event == Ion::Events::Left) {
|
||||
int direction = event == Ion::Events::Left ? -1 : 1;
|
||||
m_view.reloadSelection();
|
||||
if (m_graphWindow.moveCursorHorizontally(direction)) {
|
||||
m_view.reload();
|
||||
} else {
|
||||
m_view.reloadSelection();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (event == Ion::Events::Up || event == Ion::Events::Down) {
|
||||
int direction = event == Ion::Events::Down ? -1 : 1;
|
||||
int result = m_graphWindow.moveCursorVertically(direction);
|
||||
if (result < 0) {
|
||||
if (event == Ion::Events::Down) {
|
||||
return false;
|
||||
}
|
||||
m_view.selectMainView(false);
|
||||
headerViewController()->setSelectedButton(0);
|
||||
}
|
||||
if (result == 0) {
|
||||
m_view.reloadSelection();
|
||||
}
|
||||
if (result == 1) {
|
||||
m_view.reload();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (event == Ion::Events::OK) {
|
||||
Function * f = m_graphWindow.functionSelectedByCursor();
|
||||
m_curveParameterController.setFunction(f);
|
||||
StackViewController * stack = stackController();
|
||||
stack->push(&m_curveParameterController);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
bool GraphController::handleEnter() {
|
||||
Function * f = m_graphWindow.functionSelectedByCursor();
|
||||
m_curveParameterController.setFunction(f);
|
||||
StackViewController * stack = stackController();
|
||||
stack->push(&m_curveParameterController);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,43 +4,28 @@
|
||||
#include <escher.h>
|
||||
#include "graph_view.h"
|
||||
#include "graph_window.h"
|
||||
#include "../../window_parameter_controller.h"
|
||||
#include "curve_parameter_controller.h"
|
||||
#include "initialisation_parameter_controller.h"
|
||||
#include "../../zoom_parameter_controller.h"
|
||||
#include "../../curve_view_with_banner_and_cursor_controller.h"
|
||||
#include "../function_store.h"
|
||||
|
||||
namespace Graph {
|
||||
class GraphController : public ViewController, public HeaderViewDelegate, public AlternateEmptyViewDelegate {
|
||||
class GraphController : public CurveViewWindowWithBannerAndCursorController {
|
||||
public:
|
||||
GraphController(Responder * parentResponder, FunctionStore * functionStore, HeaderViewController * header);
|
||||
const char * title() const override;
|
||||
View * view() override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
void didBecomeFirstResponder() override;
|
||||
ViewController * windowParameterController();
|
||||
ViewController * zoomParameterController();
|
||||
ViewController * initialisationParameterController();
|
||||
|
||||
int numberOfButtons() const override;
|
||||
Button * buttonAtIndex(int index) override;
|
||||
ViewController * initialisationParameterController() override;
|
||||
|
||||
bool isEmpty() override;
|
||||
const char * emptyMessage() override;
|
||||
Responder * defaultController() override;
|
||||
|
||||
private:
|
||||
Responder * tabController() const;
|
||||
StackViewController * stackController() const;
|
||||
bool handleEnter() override;
|
||||
GraphView m_view;
|
||||
GraphWindow m_graphWindow;
|
||||
WindowParameterController m_windowParameterController;
|
||||
ZoomParameterController m_zoomParameterController;
|
||||
InitialisationParameterController m_initialisationParameterController;
|
||||
CurveParameterController m_curveParameterController;
|
||||
Button m_windowButton;
|
||||
Button m_zoomButton;
|
||||
Button m_defaultInitialisationButton;
|
||||
FunctionStore * m_functionStore;
|
||||
};
|
||||
|
||||
|
||||
@@ -3,98 +3,14 @@
|
||||
namespace Regression {
|
||||
|
||||
GraphController::GraphController(Responder * parentResponder, HeaderViewController * headerViewController, Data * data) :
|
||||
ViewController(parentResponder),
|
||||
HeaderViewDelegate(headerViewController),
|
||||
CurveViewWindowWithBannerAndCursorController(parentResponder, headerViewController, data, &m_view),
|
||||
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;
|
||||
ViewController * GraphController::initialisationParameterController() {
|
||||
return &m_windowParameterController;
|
||||
}
|
||||
|
||||
bool GraphController::isEmpty() {
|
||||
@@ -108,24 +24,8 @@ 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());
|
||||
bool GraphController::handleEnter() {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,38 +4,21 @@
|
||||
#include <escher.h>
|
||||
#include "data.h"
|
||||
#include "graph_view.h"
|
||||
#include "../window_parameter_controller.h"
|
||||
#include "../zoom_parameter_controller.h"
|
||||
#include "../curve_view_with_banner_and_cursor_controller.h"
|
||||
|
||||
namespace Regression {
|
||||
|
||||
class GraphController : public ViewController, public HeaderViewDelegate, public AlternateEmptyViewDelegate {
|
||||
class GraphController : public CurveViewWindowWithBannerAndCursorController {
|
||||
|
||||
public:
|
||||
GraphController(Responder * parentResponder, HeaderViewController * headerViewController, Data * data);
|
||||
const char * title() const override;
|
||||
View * view() override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
void didBecomeFirstResponder() override;
|
||||
|
||||
int numberOfButtons() const override;
|
||||
Button * buttonAtIndex(int index) override;
|
||||
ViewController * initialisationParameterController() override;
|
||||
|
||||
bool isEmpty() override;
|
||||
const char * emptyMessage() override;
|
||||
Responder * defaultController() override;
|
||||
|
||||
ViewController * windowParameterController();
|
||||
ViewController * zoomParameterController();
|
||||
private:
|
||||
Responder * tabController() const;
|
||||
StackViewController * stackController() const;
|
||||
bool handleEnter() override;
|
||||
GraphView m_view;
|
||||
WindowParameterController m_windowParameterController;
|
||||
ZoomParameterController m_zoomParameterController;
|
||||
Button m_windowButton;
|
||||
Button m_zoomButton;
|
||||
Button m_defaultInitialisationButton;
|
||||
Data * m_data;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user