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:
Diffstat (limited to 'source/blender/editors/screen/screen_context.c')
-rw-r--r--source/blender/editors/screen/screen_context.c72
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;
}