diff options
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 11 | ||||
-rw-r--r-- | source/blender/editors/space_outliner/outliner_intern.h | 61 | ||||
-rw-r--r-- | source/blender/editors/space_outliner/space_outliner.c | 31 |
3 files changed, 102 insertions, 1 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 93cacaf61a1..d62c4e62535 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -4510,8 +4510,17 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, int flag, ID allocname= dataname(GS(id->name)); /* read all data */ + while(bhead && bhead->code==DATA) { - void *data= read_struct(fd, bhead, allocname); + void *data; + /* XXX BAD DEBUGGING OPTION TO GIVE NAMES */ + short *sp= fd->filesdna->structs[bhead->SDNAnr]; + char *allocname = fd->filesdna->types[ sp[0] ]; + char *tmp= malloc(100); + + strcpy(tmp, allocname); + + data= read_struct(fd, bhead, tmp); if (data) { oldnewmap_insert(fd->datamap, bhead->old, data, 0); diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h index dcc81ad5f9d..50c5156f4df 100644 --- a/source/blender/editors/space_outliner/outliner_intern.h +++ b/source/blender/editors/space_outliner/outliner_intern.h @@ -33,6 +33,67 @@ struct wmWindowManager; +struct TreeStoreElem; + +typedef struct TreeElement { + struct TreeElement *next, *prev, *parent; + ListBase subtree; + float xs, ys; // do selection + int store_index; // offset in tree store + short flag, index; // flag for non-saved stuff, index for data arrays + short idcode; // from TreeStore id + short xend; // width of item display, for select + char *name; + void *directdata; // Armature Bones, Base, Sequence, Strip... +} TreeElement; + +/* TreeElement->flag */ +#define TE_ACTIVE 1 +#define TE_ICONROW 2 + +/* TreeStoreElem types */ +#define TSE_NLA 1 +#define TSE_NLA_ACTION 2 +#define TSE_DEFGROUP_BASE 3 +#define TSE_DEFGROUP 4 +#define TSE_BONE 5 +#define TSE_EBONE 6 +#define TSE_CONSTRAINT_BASE 7 +#define TSE_CONSTRAINT 8 +#define TSE_MODIFIER_BASE 9 +#define TSE_MODIFIER 10 +#define TSE_LINKED_OB 11 +#define TSE_SCRIPT_BASE 12 +#define TSE_POSE_BASE 13 +#define TSE_POSE_CHANNEL 14 +/*#ifdef WITH_VERSE*/ +#define TSE_VERSE_SESSION 15 +#define TSE_VERSE_OBJ_NODE 16 +#define TSE_VERSE_GEOM_NODE 17 +/*#endif*/ +#define TSE_PROXY 18 +#define TSE_R_LAYER_BASE 19 +#define TSE_R_LAYER 20 +#define TSE_R_PASS 21 +#define TSE_LINKED_MAT 22 +/* NOTE, is used for light group */ +#define TSE_LINKED_LAMP 23 +#define TSE_POSEGRP_BASE 24 +#define TSE_POSEGRP 25 +#define TSE_SEQUENCE 26 +#define TSE_SEQ_STRIP 27 +#define TSE_SEQUENCE_DUP 28 + +/* outliner search flags */ +#define OL_FIND 0 +#define OL_FIND_CASE 1 +#define OL_FIND_COMPLETE 2 +#define OL_FIND_COMPLETE_CASE 3 + +/* button events */ +#define OL_NAMEBUTTON 1 + + /* outliner_ops.c */ void outliner_operatortypes(void); void outliner_keymap(struct wmWindowManager *wm); diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c index c687ca17907..b53e5ce427d 100644 --- a/source/blender/editors/space_outliner/space_outliner.c +++ b/source/blender/editors/space_outliner/space_outliner.c @@ -492,15 +492,46 @@ static SpaceLink *outliner_new(void) return (SpaceLink*)soutliner; } +static void free_oops(Oops *oops) /* also oops itself */ +{ + BLI_freelistN(&oops->link); + MEM_freeN(oops); +} + +static void outliner_free_tree(ListBase *lb) +{ + + while(lb->first) { + TreeElement *te= lb->first; + + outliner_free_tree(&te->subtree); + BLI_remlink(lb, te); + MEM_freeN(te); + } +} + /* not spacelink itself */ static void outliner_free(SpaceLink *sl) { SpaceOops *soutliner= (SpaceOops*)sl; + Oops *oops; if(soutliner->rnapath) { MEM_freeN(soutliner->rnapath); soutliner->rnapath= NULL; } + + while( (oops= soutliner->oops.first) ) { + BLI_remlink(&soutliner->oops, oops); + free_oops(oops); + } + + outliner_free_tree(&soutliner->tree); + if(soutliner->treestore) { + if(soutliner->treestore->data) MEM_freeN(soutliner->treestore->data); + MEM_freeN(soutliner->treestore); + } + } /* spacetype; init callback */ |