mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-20 14:20:39 +01:00
[apps] Modular reimplementation of application models (stores and
ranges) and of curve views/curve view controllers. Change-Id: If4ca9bf1bec024917ef540a3fc7baefa8700f7ba
This commit is contained in:
@@ -3,29 +3,21 @@
|
||||
namespace Regression {
|
||||
|
||||
GraphController::GraphController(Responder * parentResponder, HeaderViewController * headerViewController, Store * store) :
|
||||
CurveViewWindowWithBannerAndCursorController(parentResponder, headerViewController, store, &m_view),
|
||||
m_view(GraphView(store, &m_bannerView, &m_cursorView)),
|
||||
InteractiveCurveViewController(parentResponder, headerViewController, store, &m_view),
|
||||
m_bannerView(BannerView()),
|
||||
m_view(GraphView(store, &m_cursor, &m_bannerView, &m_cursorView)),
|
||||
m_store(store),
|
||||
m_initialisationParameterController(InitialisationParameterController(this, m_store)),
|
||||
m_predictionParameterController(PredictionParameterController(this, m_store))
|
||||
m_predictionParameterController(PredictionParameterController(this, m_store, &m_cursor)),
|
||||
m_selectedDotIndex(-1)
|
||||
{
|
||||
m_store->setCursor(&m_cursor);
|
||||
}
|
||||
|
||||
ViewController * GraphController::initialisationParameterController() {
|
||||
return &m_initialisationParameterController;
|
||||
}
|
||||
|
||||
void GraphController::didBecomeFirstResponder() {
|
||||
uint32_t storeChecksum = m_store->checksum();
|
||||
if (m_storeVersion != storeChecksum) {
|
||||
m_storeVersion = storeChecksum;
|
||||
m_store->initWindowParameters();
|
||||
m_store->initCursorPosition();
|
||||
}
|
||||
CurveViewWindowWithBannerAndCursorController::didBecomeFirstResponder();
|
||||
}
|
||||
|
||||
|
||||
bool GraphController::isEmpty() {
|
||||
if (m_store->numberOfPairs() < 2 || isinf(m_store->slope()) || isnan(m_store->slope())) {
|
||||
return true;
|
||||
@@ -40,8 +32,20 @@ const char * GraphController::emptyMessage() {
|
||||
return "Pas assez de donnees pour un regression";
|
||||
}
|
||||
|
||||
BannerView * GraphController::bannerView() {
|
||||
return &m_bannerView;
|
||||
}
|
||||
|
||||
CurveView * GraphController::curveView() {
|
||||
return &m_view;
|
||||
}
|
||||
|
||||
InteractiveCurveViewRange * GraphController::interactiveCurveViewRange() {
|
||||
return m_store;
|
||||
}
|
||||
|
||||
bool GraphController::handleEnter() {
|
||||
if (m_store->selectedDotIndex() == -1) {
|
||||
if (m_selectedDotIndex == -1) {
|
||||
stackController()->push(&m_predictionParameterController);
|
||||
return true;
|
||||
}
|
||||
@@ -66,9 +70,9 @@ void GraphController::reloadBannerView() {
|
||||
m_bannerView.setLegendAtIndex(buffer, 2);
|
||||
|
||||
legend = "x = ";
|
||||
float x = m_store->xCursorPosition();
|
||||
float x = m_cursor.x();
|
||||
// Display a specific legend if the mean dot is selected
|
||||
if (m_store->selectedDotIndex() == m_store->numberOfPairs()) {
|
||||
if (m_selectedDotIndex == m_store->numberOfPairs()) {
|
||||
legend = "x^ = ";
|
||||
x = m_store->meanOfColumn(0);
|
||||
}
|
||||
@@ -78,8 +82,8 @@ void GraphController::reloadBannerView() {
|
||||
m_bannerView.setLegendAtIndex(buffer, 3);
|
||||
|
||||
legend = "y = ";
|
||||
float y = m_store->yCursorPosition();
|
||||
if (m_store->selectedDotIndex() == m_store->numberOfPairs()) {
|
||||
float y = m_cursor.y();
|
||||
if (m_selectedDotIndex == m_store->numberOfPairs()) {
|
||||
legend = "y^ = ";
|
||||
y = m_store->meanOfColumn(1);
|
||||
}
|
||||
@@ -91,4 +95,66 @@ void GraphController::reloadBannerView() {
|
||||
m_bannerView.layoutSubviews();
|
||||
}
|
||||
|
||||
void GraphController::initRangeParameters() {
|
||||
m_store->setDefault();
|
||||
}
|
||||
|
||||
void GraphController::initCursorParameters() {
|
||||
float x = (m_store->xMin() + m_store->xMax())/2.0f;
|
||||
float y = m_store->yValueForXValue(x);
|
||||
m_store->moveCursorTo(x, y);
|
||||
m_selectedDotIndex = -1;
|
||||
}
|
||||
|
||||
int GraphController::moveCursorHorizontally(int direction) {
|
||||
if (m_selectedDotIndex >= 0) {
|
||||
int dotSelected = m_store->nextDot(direction, m_selectedDotIndex);
|
||||
if (dotSelected >= 0 && dotSelected < m_store->numberOfPairs()) {
|
||||
m_selectedDotIndex = dotSelected;
|
||||
return m_store->moveCursorTo(m_store->get(0, m_selectedDotIndex), m_store->get(1, m_selectedDotIndex));
|
||||
}
|
||||
if (dotSelected == m_store->numberOfPairs()) {
|
||||
m_selectedDotIndex = dotSelected;
|
||||
return m_store->moveCursorTo(m_store->meanOfColumn(0), m_store->meanOfColumn(1));
|
||||
}
|
||||
return -1;
|
||||
} else {
|
||||
float x = direction > 0 ? m_cursor.x() + m_store->xGridUnit()/InteractiveCurveViewRange::k_numberOfCursorStepsInGradUnit :
|
||||
m_cursor.x() - m_store->xGridUnit()/InteractiveCurveViewRange::k_numberOfCursorStepsInGradUnit;
|
||||
float y = m_store->yValueForXValue(x);
|
||||
return m_store->moveCursorTo(x, y);
|
||||
}
|
||||
}
|
||||
|
||||
int GraphController::moveCursorVertically(int direction) {
|
||||
float yRegressionCurve = m_store->yValueForXValue(m_cursor.x());
|
||||
if (m_selectedDotIndex >= 0) {
|
||||
if ((yRegressionCurve - m_cursor.y() > 0) == (direction > 0)) {
|
||||
m_selectedDotIndex = -1;
|
||||
return m_store->moveCursorTo(m_cursor.x(), yRegressionCurve);
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
int dotSelected = m_store->closestVerticalDot(direction, m_cursor.x());
|
||||
if (dotSelected >= 0 && dotSelected < m_store->numberOfPairs()) {
|
||||
m_selectedDotIndex = dotSelected;
|
||||
return m_store->moveCursorTo(m_store->get(0, m_selectedDotIndex), m_store->get(1, m_selectedDotIndex));
|
||||
}
|
||||
if (dotSelected == m_store->numberOfPairs()) {
|
||||
m_selectedDotIndex = dotSelected;
|
||||
return m_store->moveCursorTo(m_store->meanOfColumn(0), m_store->meanOfColumn(1));
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t GraphController::modelVersion() {
|
||||
return m_store->storeChecksum();
|
||||
}
|
||||
|
||||
uint32_t GraphController::rangeVersion() {
|
||||
return m_store->rangeChecksum();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user