+ /**
+ * Set relative node to given value and afterwards make read only.
+ *
+ * @param relative_path Path to node
+ * @param value Value to set
+ *
+ * @return whether value could be set
+ */
+ template<typename T>
+ bool setValueReadOnly(const std::string& relative_path, const T& value)
+ {
+ SGPropertyNode* node = getNode(relative_path, true);
+ bool ret = node->setValue(value);
+ node->setAttributes(READ);
+ return ret;
+ }
+
+#if !PROPS_STANDALONE
+ /**
+ * Interpolate current value to target value within given time.
+ *
+ * @param type Type of interpolation ("numeric", "color", etc.)
+ * @param target Node containing target value
+ * @param duration Duration of interpolation (in seconds)
+ * @param easing Easing function (http://easings.net/)
+ */
+ bool interpolate( const std::string& type,
+ const SGPropertyNode& target,
+ double duration = 0.6,
+ const std::string& easing = "swing" );
+
+ /**
+ * Interpolate current value to a series of values within given durations.
+ *
+ * @param type Type of interpolation ("numeric", "color", etc.)
+ * @param values Nodes containing intermediate and target values
+ * @param deltas Durations for each interpolation step (in seconds)
+ * @param easing Easing function (http://easings.net/)
+ */
+ bool interpolate( const std::string& type,
+ const simgear::PropertyList& values,
+ const double_list& deltas,
+ const std::string& easing = "swing" );
+
+ /**
+ * Set the interpolation manager used by the interpolate methods.
+ */
+ static void setInterpolationMgr(simgear::PropertyInterpolationMgr* mgr);
+
+ /**
+ * Get the interpolation manager
+ */
+ static simgear::PropertyInterpolationMgr* getInterpolationMgr();
+#endif
+