Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2010-04-22 22:16:56 +0400
committerTon Roosendaal <ton@blender.org>2010-04-22 22:16:56 +0400
commit7a4a0d8082d8aa22ee968476c4ec54e24cff114f (patch)
tree5c4f62b32c08d82b6c613b7c26ac577af01290c7 /source/blender
parent749f027e1dd149db74a6d9e34f6df53b736812ba (diff)
- Added search filter in outliner header. Only activates filter on enter,
should make it do 'live' search while types. - Connecting Viewer nodes sometimes didn't recalculate, depsgraph needed remade
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/space_node/node_edit.c7
-rw-r--r--source/blender/editors/space_outliner/outliner.c41
2 files changed, 44 insertions, 4 deletions
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index 767dd753766..99ac88f83a7 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -970,14 +970,13 @@ static void node_link_viewer(SpaceNode *snode, bNode *tonode)
if(link==NULL) {
nodeAddLink(snode->edittree, tonode, tonode->outputs.first, node, node->inputs.first);
- ntreeSolveOrder(snode->edittree);
- NodeTagChanged(snode->edittree, node);
}
- else if(link) {
+ else {
link->fromnode= tonode;
link->fromsock= tonode->outputs.first;
- NodeTagChanged(snode->edittree, node);
}
+ ntreeSolveOrder(snode->edittree);
+ NodeTagChanged(snode->edittree, node);
}
}
diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c
index 291c67d22ff..349a158898d 100644
--- a/source/blender/editors/space_outliner/outliner.c
+++ b/source/blender/editors/space_outliner/outliner.c
@@ -1235,6 +1235,46 @@ void add_seq_dup(SpaceOops *soops, Sequence *seq, TreeElement *te, short index)
}
}
+static int outliner_filter_has_name(TreeElement *te, char *name, int flags)
+{
+ int found= 0;
+
+ /* determine if match */
+ if(flags==OL_FIND)
+ found= BLI_strcasestr(te->name, name)!=NULL;
+ else if(flags==OL_FIND_CASE)
+ found= strstr(te->name, name)!=NULL;
+ else if(flags==OL_FIND_COMPLETE)
+ found= BLI_strcasecmp(te->name, name)==0;
+ else
+ found= strcmp(te->name, name)==0;
+
+ return found;
+}
+
+static void outliner_filter_tree(SpaceOops *soops, ListBase *lb)
+{
+ TreeElement *te, *ten;
+
+ if(soops->search_string[0]==0) return;
+
+ for (te= lb->first; te; te= ten) {
+ ten= te->next;
+
+ if(0==outliner_filter_has_name(te, soops->search_string, OL_FIND)) {
+
+ outliner_free_tree(&te->subtree);
+ BLI_remlink(lb, te);
+
+ if(te->flag & TE_FREE_NAME) MEM_freeN(te->name);
+ MEM_freeN(te);
+ }
+ else
+ outliner_filter_tree(soops, &te->subtree);
+ }
+}
+
+
static void outliner_build_tree(Main *mainvar, Scene *scene, SpaceOops *soops)
{
Base *base;
@@ -1416,6 +1456,7 @@ static void outliner_build_tree(Main *mainvar, Scene *scene, SpaceOops *soops)
}
outliner_sort(soops, &soops->tree);
+ outliner_filter_tree(soops, &soops->tree);
}
/* **************** INTERACTIVE ************* */