diff options
Diffstat (limited to 'source/blender/editors/screen/screen_context.c')
-rw-r--r-- | source/blender/editors/screen/screen_context.c | 72 |
1 files changed, 68 insertions, 4 deletions
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c index 1ea6f8baceb..17c51a7b7d3 100644 --- a/source/blender/editors/screen/screen_context.c +++ b/source/blender/editors/screen/screen_context.c @@ -33,19 +33,29 @@ #include "BKE_context.h" #include "BKE_utildefines.h" +#include "BKE_global.h" #include "RNA_access.h" +#include "ED_object.h" + int ed_screen_context(const bContext *C, const char *member, bContextDataResult *result) { bScreen *sc= CTX_wm_screen(C); Scene *scene= sc->scene; Base *base; + Object *ob = NULL; + + if(scene && scene->basact) + ob = scene->basact->object; if(CTX_data_dir(member)) { static const char *dir[] = { - "scene", "selected_objects", "selected_bases", "active_base", - "active_object", "edit_object", NULL}; + "scene", "selected_objects", "selected_bases", + "selected_editable_objects", "selected_editable_bases" + "active_base", "active_object", "edit_object", + "sculpt_object", "vertex_paint_object", "weight_paint_object", + "texture_paint_object", "brush", "particle_edit_object", NULL}; CTX_data_dir_set(result, dir); return 1; @@ -68,9 +78,27 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult return 1; } + else if(CTX_data_equals(member, "selected_editable_objects") || CTX_data_equals(member, "selected_editable_bases")) { + int selected_editable_objects= CTX_data_equals(member, "selected_editable_objects"); + + for(base=scene->base.first; base; base=base->next) { + if((base->flag & SELECT) && (base->lay & scene->lay)) { + if((base->object->restrictflag & OB_RESTRICT_VIEW)==0) { + if(0==object_is_libdata(base->object)) { + if(selected_editable_objects) + CTX_data_id_list_add(result, &base->object->id); + else + CTX_data_list_add(result, &scene->id, &RNA_UnknownType, base); + } + } + } + } + + return 1; + } else if(CTX_data_equals(member, "active_base")) { if(scene->basact) - CTX_data_pointer_set(result, &scene->id, &RNA_UnknownType, &scene->basact); + CTX_data_pointer_set(result, &scene->id, &RNA_UnknownType, scene->basact); return 1; } @@ -80,6 +108,12 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult return 1; } + else if(CTX_data_equals(member, "object")) { + if(scene->basact) + CTX_data_id_pointer_set(result, &scene->basact->object->id); + + return 1; + } else if(CTX_data_equals(member, "edit_object")) { /* convenience for now, 1 object per scene in editmode */ if(scene->obedit) @@ -87,7 +121,37 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult return 1; } - + else if(CTX_data_equals(member, "sculpt_object")) { + if(ob && (ob->mode & OB_MODE_SCULPT)) + CTX_data_id_pointer_set(result, &ob->id); + + return 1; + } + else if(CTX_data_equals(member, "vertex_paint_object")) { + if(ob && (ob->mode & OB_MODE_VERTEX_PAINT)) + CTX_data_id_pointer_set(result, &ob->id); + + return 1; + } + else if(CTX_data_equals(member, "weight_paint_object")) { + if(ob && (ob->mode & OB_MODE_WEIGHT_PAINT)) + CTX_data_id_pointer_set(result, &ob->id); + + return 1; + } + else if(CTX_data_equals(member, "texture_paint_object")) { + if(ob && (ob->mode & OB_MODE_TEXTURE_PAINT)) + CTX_data_id_pointer_set(result, &ob->id); + + return 1; + } + else if(CTX_data_equals(member, "particle_edit_object")) { + if(ob && (ob->mode & OB_MODE_PARTICLE_EDIT)) + CTX_data_id_pointer_set(result, &ob->id); + + return 1; + } + return 0; } |