return node;
}
+ /**
+ * Get vector of properties
+ */
+ template<typename T, typename T_get /* = T */> // TODO use C++11 or traits
+ std::vector<T> getVectorFromChildren( const SGPropertyNode* parent,
+ const char* child_name )
+ {
+ const simgear::PropertyList& props = parent->getChildren(child_name);
+ std::vector<T> values( props.size() );
+
+ for( size_t i = 0; i < props.size(); ++i )
+ values[i] = getValue<T_get>(props[i]);
+
+ return values;
+ }
+
+ /**
+ * Split a string by a delimter and convert the values to float
+ *
+ * TODO do we need other types than float?
+ */
+ std::vector<float> splitAndConvert(const char del[], const std::string& str);
+
+ /**
+ * Parse a (CSS) color
+ */
+ osg::Vec4 parseColor(std::string str);
+
/**
* @param name Name of color node
* @param parent Parent for color channel nodes
* @param nodes Vector to push color nodes into
* @param def Default color
*
+ * @deprecated Use only a single property instead and parse with #parseColor
+ *
* <name>
* <red type="float">def[0] or existing value</red>
* <green type="float">def[1] or existing value</green>
void linkColorNodes( const char* name,
SGPropertyNode* parent,
std::vector<SGPropertyNode_ptr>& nodes,
- const osg::Vec4& def = osg::Vec4(0,0,0,0) );
+ const osg::Vec4& def = osg::Vec4(0,0,0,1) );
+
+ /**
+ * Trigger a childAdded and valueChanged event for every child of node
+ * (Unlimited depth) and node itself.
+ */
+ void triggerChangeRecursive(SGPropertyNode* node);
+
+ /**
+ * Trigger a childRemoved event for every child of node (Unlimited depth) and
+ * node itself.
+ */
+ void triggerRemoveRecursive(SGPropertyNode* node);
} // namespace canvas