Example #1
0
/* STreeNode::getChildren
 * Returns a list of all the node's children matching [name]. Also
 * handles paths as per getChild
 *******************************************************************/
vector<STreeNode*> STreeNode::getChildren(string name)
{
	// Init return vector
	vector<STreeNode*> ret;

	// Check name was given
	if (name.IsEmpty())
		return ret;

	// If name ends with /, remove it
	if (name.EndsWith("/"))
		name.RemoveLast(1);

	// Convert name to path for processing
	wxFileName fn(name);

	// If no directories were given
	if (fn.GetDirCount() == 0)
	{
		// Find child of this node
		for (unsigned a = 0; a < children.size(); a++)
		{
			if (S_CMPNOCASE(name, children[a]->getName()))
				ret.push_back(children[a]);
		}
	}
	else
	{
		// Directories were given, get the first directory
		string dir = fn.GetDirs()[0];

		// See if it is a child of this node
		STreeNode* child = getChild(dir);
		if (child)
		{
			// It is, remove the first directory and continue searching that child
			fn.RemoveDir(0);
			return child->getChildren(fn.GetFullPath(wxPATH_UNIX));
		}
	}

	return ret;
}