diff options
author | Ton Roosendaal <ton@blender.org> | 2010-04-22 22:16:56 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2010-04-22 22:16:56 +0400 |
commit | 7a4a0d8082d8aa22ee968476c4ec54e24cff114f (patch) | |
tree | 5c4f62b32c08d82b6c613b7c26ac577af01290c7 /source/blender | |
parent | 749f027e1dd149db74a6d9e34f6df53b736812ba (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.c | 7 | ||||
-rw-r--r-- | source/blender/editors/space_outliner/outliner.c | 41 |
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 ************* */ |