Beispiel #1
0
static bool node_select_grouped_name(SpaceNode *snode, bNode *node_act, const bool from_right)
{
	bNode *node;
	bool changed = false;
	const unsigned int delims[] = {'.', '-', '_', '\0'};
	size_t index_act, index_curr;
	char *sep, *suf_act, *suf_curr;

	index_act = BLI_str_partition_ex_utf8(node_act->name, delims, &sep, &suf_act, from_right);

	if (index_act > 0) {
		for (node = snode->edittree->nodes.first; node; node = node->next) {
			if ((node->flag & SELECT) == 0) {
				index_curr = BLI_str_partition_ex_utf8(node->name, delims, &sep, &suf_curr, from_right);
				if ((from_right && STREQ(suf_act, suf_curr)) ||
				    (!from_right && (index_act == index_curr) && STREQLEN(node_act->name, node->name, index_act)))
				{
					nodeSetSelected(node, true);
					changed = true;
				}
			}
		}
	}

	return changed;
}
Beispiel #2
0
static bool node_select_grouped_name(SpaceNode *snode, bNode *node_act, const bool from_right)
{
	bNode *node;
	bool changed = false;
	const unsigned int delims[] = {'.', '-', '_', '\0'};
	size_t pref_len_act, pref_len_curr;
	const char *sep, *suf_act, *suf_curr;

	pref_len_act = BLI_str_partition_ex_utf8(node_act->name, NULL, delims, &sep, &suf_act, from_right);

	/* Note: in case we are searching for suffix, and found none, use whole name as suffix. */
	if (from_right && !(sep && suf_act)) {
		pref_len_act = 0;
		suf_act = node_act->name;
	}

	for (node = snode->edittree->nodes.first; node; node = node->next) {
		if (node->flag & SELECT) {
			continue;
		}
		pref_len_curr = BLI_str_partition_ex_utf8(node->name, NULL, delims, &sep, &suf_curr, from_right);

		/* Same as with active node name! */
		if (from_right && !(sep && suf_curr)) {
			pref_len_curr = 0;
			suf_curr = node->name;
		}

		if ((from_right && STREQ(suf_act, suf_curr)) ||
		    (!from_right && (pref_len_act == pref_len_curr) && STREQLEN(node_act->name, node->name, pref_len_act)))
		{
			nodeSetSelected(node, true);
			changed = true;
		}
	}

	return changed;
}