Files
Upsilon/apps/shared/function_go_to_parameter_controller.cpp
2019-08-29 11:07:22 +02:00

45 lines
1.8 KiB
C++

#include "function_go_to_parameter_controller.h"
#include "function_app.h"
#include <assert.h>
#include <cmath>
namespace Shared {
FunctionGoToParameterController::FunctionGoToParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor, I18n::Message symbol) :
GoToParameterController(parentResponder, inputEventHandlerDelegate, graphRange, cursor, symbol),
m_record()
{
}
const char * FunctionGoToParameterController::title() {
return I18n::translate(I18n::Message::Goto);
}
double FunctionGoToParameterController::parameterAtIndex(int index) {
assert(index == 0);
return m_cursor->t();
}
bool FunctionGoToParameterController::setParameterAtIndex(int parameterIndex, double f) {
assert(parameterIndex == 0);
FunctionApp * myApp = FunctionApp::app();
ExpiringPointer<Function> function = myApp->functionStore()->modelForRecord(m_record);
Poincare::Coordinate2D<double> xy = function->evaluateXYAtParameter(f, myApp->localContext());
m_cursor->moveTo(f, xy.x1(), xy.x2());
m_graphRange->centerAxisAround(CurveViewRange::Axis::X, m_cursor->x());
m_graphRange->centerAxisAround(CurveViewRange::Axis::Y, m_cursor->y());
/* The range might have evolved to center around the cursor but we don't want
* to reinit the cursor position when displaying the graph controller. To
* prevent this, we update the snapshot range version in order to make the
* graph controller as if the range has not evolved since last appearance. */
uint32_t * snapshotRangeVersion = static_cast<FunctionApp::Snapshot *>(myApp->snapshot())->rangeVersion();
*snapshotRangeVersion = m_graphRange->rangeChecksum();
return true;
}
void FunctionGoToParameterController::setRecord(Ion::Storage::Record record) {
m_record = record;
}
}