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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2009-03-19 22:03:38 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2009-03-19 22:03:38 +0300
commit1b94cb752ca18aac122b444261e76dc63022f99f (patch)
treec0d4ec35be53898e07462f41bb50f7629a3d323e /source/blender/editors/screen/screen_context.c
parent77e0199dc386c26aa106a884f24b336fce82d351 (diff)
Context
* Made it based on string lookups rather than fixed enum, to make it extensible by python scripts. * Context callbacks now also have to specify RNA type when returning pointers or collections. For non-RNA wrapped data, UnknownType can be used. * RNA wrapped context. The WM entries are fixed, for data context only main and scene are defined properties. Other data entries have to be dynamically looked up. * I've added some special code in python for the dynamic context lookups. Tried to hide it behind RNA but didn't find a clean way to do it yet. Still unused/untested. * Also minor fix for warning about propertional edit property in transform code, and fix for usage of operator poll with checking if it was NULL.
Diffstat (limited to 'source/blender/editors/screen/screen_context.c')
-rw-r--r--source/blender/editors/screen/screen_context.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c
index 2406c1c5e32..11d1d019005 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -25,6 +25,7 @@
*/
#include <stdlib.h>
+#include <string.h>
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
@@ -33,44 +34,48 @@
#include "BKE_context.h"
#include "BKE_utildefines.h"
-int ed_screen_context(const bContext *C, bContextDataMember member, bContextDataResult *result)
+#include "RNA_access.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;
- if(member == CTX_DATA_SCENE) {
- CTX_data_pointer_set(result, scene);
+ if(CTX_data_equals(member, "scene")) {
+ CTX_data_id_pointer_set(result, &scene->id);
return 1;
}
- else if(ELEM(member, CTX_DATA_SELECTED_OBJECTS, CTX_DATA_SELECTED_BASES)) {
+ else if(CTX_data_equals(member, "selected_objects") || CTX_data_equals(member, "selected_bases")) {
+ int selected_objects= CTX_data_equals(member, "selected_objects");
+
for(base=scene->base.first; base; base=base->next) {
if((base->flag & SELECT) && (base->lay & scene->lay)) {
- if(member == CTX_DATA_SELECTED_OBJECTS)
- CTX_data_list_add(result, base->object);
+ if(selected_objects)
+ CTX_data_id_list_add(result, &base->object->id);
else
- CTX_data_list_add(result, base);
+ CTX_data_list_add(result, &scene->id, &RNA_UnknownType, base);
}
}
return 1;
}
- else if(member == CTX_DATA_ACTIVE_BASE) {
+ else if(CTX_data_equals(member, "active_base")) {
if(scene->basact)
- CTX_data_pointer_set(result, scene->basact);
+ CTX_data_pointer_set(result, &scene->id, &RNA_UnknownType, &scene->basact);
return 1;
}
- else if(member == CTX_DATA_ACTIVE_OBJECT) {
+ else if(CTX_data_equals(member, "active_object")) {
if(scene->basact)
- CTX_data_pointer_set(result, scene->basact->object);
+ CTX_data_id_pointer_set(result, &scene->basact->object->id);
return 1;
}
- else if(member == CTX_DATA_EDIT_OBJECT) {
+ else if(CTX_data_equals(member, "edit_object")) {
/* convenience for now, 1 object per scene in editmode */
if(scene->obedit)
- CTX_data_pointer_set(result, scene->obedit);
+ CTX_data_id_pointer_set(result, &scene->obedit->id);
return 1;
}