[shared] Factorize GraphController::initCursorParameters of Graph and

Sequence
This commit is contained in:
Émilie Feral
2018-07-06 13:46:12 +02:00
committed by EmilieNumworks
parent 9dc775295b
commit 66d920a280
6 changed files with 24 additions and 29 deletions

View File

@@ -79,21 +79,6 @@ bool GraphController::moveCursorHorizontally(int direction) {
return privateMoveCursorHorizontally(m_cursor, direction, m_graphRange, k_numberOfCursorStepsInGradUnit, f, myApp, k_cursorTopMarginRatio, k_cursorRightMarginRatio, k_cursorBottomMarginRatio, k_cursorLeftMarginRatio);
}
void GraphController::initCursorParameters() {
double x = (interactiveCurveViewRange()->xMin()+interactiveCurveViewRange()->xMax())/2.0f;
TextFieldDelegateApp * myApp = (TextFieldDelegateApp *)app();
int functionIndex = 0;
double y = 0;
do {
CartesianFunction * firstFunction = functionStore()->activeFunctionAtIndex(functionIndex++);
y = firstFunction->evaluateAtAbscissa(x, myApp->localContext());
} while ((std::isnan(y) || std::isinf(y)) && functionIndex < functionStore()->numberOfActiveFunctions());
m_cursor->moveTo(x, y);
functionIndex = (std::isnan(y) || std::isinf(y)) ? 0 : functionIndex - 1;
selectFunctionWithCursor(functionIndex);
interactiveCurveViewRange()->panToMakePointVisible(x, y, k_cursorTopMarginRatio, k_cursorRightMarginRatio, k_cursorBottomMarginRatio, k_cursorLeftMarginRatio);
}
InteractiveCurveViewRange * GraphController::interactiveCurveViewRange() {
return m_graphRange;
}

View File

@@ -26,7 +26,6 @@ private:
BannerView * bannerView() override;
void reloadBannerView() override;
bool moveCursorHorizontally(int direction) override;
void initCursorParameters() override;
Shared::InteractiveCurveViewRange * interactiveCurveViewRange() override;
CartesianFunctionStore * functionStore() const override;
GraphView * functionGraphView() override;

View File

@@ -61,18 +61,8 @@ bool GraphController::moveCursorHorizontally(int direction) {
return true;
}
void GraphController::initCursorParameters() {
double x = std::round((interactiveCurveViewRange()->xMin()+interactiveCurveViewRange()->xMax())/2.0);
selectFunctionWithCursor(0);
TextFieldDelegateApp * myApp = (TextFieldDelegateApp *)app();
int functionIndex = 0;
double y = 0;
do {
Sequence * firstFunction = m_sequenceStore->activeFunctionAtIndex(functionIndex++);
y = firstFunction->evaluateAtAbscissa(x, myApp->localContext());
} while (std::isnan(y) && functionIndex < m_sequenceStore->numberOfActiveFunctions());
m_cursor->moveTo(x, y);
m_graphRange->panToMakePointVisible(x, y, k_cursorTopMarginRatio, k_cursorRightMarginRatio, k_cursorBottomMarginRatio, k_cursorLeftMarginRatio);
double GraphController::defaultCursorAbscissa() {
return std::round(Shared::FunctionGraphController::defaultCursorAbscissa());
}
CurveViewRange * GraphController::interactiveCurveViewRange() {

View File

@@ -21,7 +21,7 @@ private:
BannerView * bannerView() override;
bool handleEnter() override;
bool moveCursorHorizontally(int direction) override;
void initCursorParameters() override;
double defaultCursorAbscissa() override;
CurveViewRange * interactiveCurveViewRange() override;
SequenceStore * functionStore() const override;
GraphView * functionGraphView() override;

View File

@@ -108,6 +108,25 @@ void FunctionGraphController::initRangeParameters() {
selectFunctionWithCursor(0);
}
double FunctionGraphController::defaultCursorAbscissa() {
return (interactiveCurveViewRange()->xMin()+interactiveCurveViewRange()->xMax())/2.0f;
}
void FunctionGraphController::initCursorParameters() {
double x = defaultCursorAbscissa();
TextFieldDelegateApp * myApp = (TextFieldDelegateApp *)app();
int functionIndex = 0;
double y = 0;
do {
Function * firstFunction = functionStore()->activeFunctionAtIndex(functionIndex++);
y = firstFunction->evaluateAtAbscissa(x, myApp->localContext());
} while ((std::isnan(y) || std::isinf(y)) && functionIndex < functionStore()->numberOfActiveFunctions());
m_cursor->moveTo(x, y);
functionIndex = (std::isnan(y) || std::isinf(y)) ? 0 : functionIndex - 1;
selectFunctionWithCursor(functionIndex);
interactiveCurveViewRange()->panToMakePointVisible(x, y, k_displayTopMarginRatio, k_cursorRightMarginRatio, k_displayBottomMarginRatio, k_cursorLeftMarginRatio);
}
bool FunctionGraphController::moveCursorVertically(int direction) {
Function * actualFunction = functionStore()->activeFunctionAtIndex(indexFunctionSelectedByCursor());
TextFieldDelegateApp * myApp = (TextFieldDelegateApp *)app();

View File

@@ -26,6 +26,7 @@ protected:
return *m_indexFunctionSelectedByCursor;
}
virtual void selectFunctionWithCursor(int functionIndex);
virtual double defaultCursorAbscissa();
private:
/* When y auto is ticked, we use a display margin to be ensure that the user
* can move the cursor along the curve without panning the window */
@@ -36,6 +37,7 @@ private:
float addMargin(float x, float range, bool isMin) override;
void initRangeParameters() override;
void initCursorParameters() override;
bool moveCursorVertically(int direction) override;
CurveView * curveView() override;
uint32_t modelVersion() override;