diff --git a/src/blackmisc/simulation/interpolatormulti.cpp b/src/blackmisc/simulation/interpolatormulti.cpp index 9522722ef..425fc89a3 100644 --- a/src/blackmisc/simulation/interpolatormulti.cpp +++ b/src/blackmisc/simulation/interpolatormulti.cpp @@ -30,6 +30,8 @@ namespace BlackMisc return m_linear.getInterpolatedSituation(currentTimeSinceEpoc, setup, hints, status); case ModeSpline: return m_spline.getInterpolatedSituation(currentTimeSinceEpoc, setup, hints, status); + default: + break; } return {}; } @@ -43,6 +45,8 @@ namespace BlackMisc return m_linear.getInterpolatedParts(cutoffTime, setup, partsStatus, log); case ModeSpline: return m_spline.getInterpolatedParts(cutoffTime, setup, partsStatus, log); + default: + break; } return {}; } @@ -59,6 +63,7 @@ namespace BlackMisc { case ModeLinear: return m_linear.hasAircraftSituations(); case ModeSpline: return m_spline.hasAircraftSituations(); + default: break; } return false; } @@ -75,6 +80,7 @@ namespace BlackMisc { case ModeLinear: return m_linear.hasAircraftParts(); case ModeSpline: return m_spline.hasAircraftParts(); + default: break; } return false; } @@ -98,5 +104,44 @@ namespace BlackMisc #endif return false; } + + bool CInterpolatorMulti::setMode(const QString &mode) + { + Mode m = modeFromString(mode); + if (m == ModeUnkown) { return false; } + return setMode(m); + } + + void CInterpolatorMulti::toggleMode() + { + switch (m_mode) + { + case ModeSpline: m_mode = ModeLinear; break; + case ModeLinear: m_mode = ModeSpline; break; + default: m_mode = ModeSpline; break; + } + } + + CInterpolatorMulti::Mode CInterpolatorMulti::modeFromString(const QString &mode) + { + if (mode.contains("spli"), Qt::CaseInsensitive) { return ModeSpline; } + if (mode.contains("lin"), Qt::CaseInsensitive) { return ModeLinear; } + return ModeUnkown; + } + + const QString &CInterpolatorMulti::modeToString(CInterpolatorMulti::Mode mode) + { + static const QString l("linear"); + static const QString s("spline"); + static const QString u("unknown"); + + switch (mode) + { + case ModeLinear: return l; + case ModeSpline: return s; + case ModeUnkown: + default: return u; + } + } } } diff --git a/src/blackmisc/simulation/interpolatormulti.h b/src/blackmisc/simulation/interpolatormulti.h index 6e59d7d84..c21b40cc3 100644 --- a/src/blackmisc/simulation/interpolatormulti.h +++ b/src/blackmisc/simulation/interpolatormulti.h @@ -56,15 +56,28 @@ namespace BlackMisc enum Mode { ModeSpline, //!< spline interpolation mode - ModeLinear //!< linear interpolation mode + ModeLinear, //!< linear interpolation mode + ModeUnkown }; //! Set interpolation mode. Return true if mode was changed. Mode will not be changed in release build. bool setMode(Mode mode); + //! Set interpolation mode. Return true if mode was changed. Mode will not be changed in release build. + bool setMode(const QString &mode); + //! Get active interpolation mode. Mode getMode() const { return m_mode; } + //! Toogle interpolator Mode + void toggleMode(); + + //! Mode from string + static Mode modeFromString(const QString &mode); + + //! Mode to string + static const QString &modeToString(Mode mode); + private: Mode m_mode = ModeSpline; CInterpolatorSpline m_spline;