[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21035] branches/blender2.5/blender/source /blender: Context
Brecht Van Lommel
brecht at blender.org
Sat Jun 20 16:55:28 CEST 2009
Revision: 21035
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21035
Author: blendix
Date: 2009-06-20 16:55:28 +0200 (Sat, 20 Jun 2009)
Log Message:
-----------
Context
Python dir(context) now gives the items from the data context
too, modified context callbacks to also return a list of items
in the context.
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h
branches/blender2.5/blender/source/blender/blenkernel/intern/context.c
branches/blender2.5/blender/source/blender/editors/screen/screen_context.c
branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_context.c
branches/blender2.5/blender/source/blender/editors/space_image/space_image.c
branches/blender2.5/blender/source/blender/editors/space_node/space_node.c
branches/blender2.5/blender/source/blender/editors/space_text/space_text.c
branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c
branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h 2009-06-20 14:53:30 UTC (rev 21034)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h 2009-06-20 14:55:28 UTC (rev 21035)
@@ -126,12 +126,14 @@
/* Data Context
- - note: listbases consist of LinkData items and must be
- freed with BLI_freelistN! */
+ - listbases consist of CollectionPointerLink items and must be
+ freed with BLI_freelistN!
+ - the dir listbase consits of LinkData items */
-PointerRNA CTX_data_pointer_get(bContext *C, const char *member);
-ListBase CTX_data_collection_get(bContext *C, const char *member);
-void CTX_data_get(bContext *C, const char *member, PointerRNA *r_ptr, ListBase *r_lb);
+PointerRNA CTX_data_pointer_get(const bContext *C, const char *member);
+ListBase CTX_data_collection_get(const bContext *C, const char *member);
+ListBase CTX_data_dir_get(const bContext *C);
+void CTX_data_get(const bContext *C, const char *member, PointerRNA *r_ptr, ListBase *r_lb);
void CTX_data_id_pointer_set(bContextDataResult *result, struct ID *id);
void CTX_data_pointer_set(bContextDataResult *result, struct ID *id, StructRNA *type, void *data);
@@ -139,7 +141,10 @@
void CTX_data_id_list_add(bContextDataResult *result, struct ID *id);
void CTX_data_list_add(bContextDataResult *result, struct ID *id, StructRNA *type, void *data);
+void CTX_data_dir_set(bContextDataResult *result, const char **member);
+
int CTX_data_equals(const char *member, const char *str);
+int CTX_data_dir(const char *member);
/*void CTX_data_pointer_set(bContextDataResult *result, void *data);
void CTX_data_list_add(bContextDataResult *result, void *data);*/
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/context.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/context.c 2009-06-20 14:53:30 UTC (rev 21034)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/context.c 2009-06-20 14:55:28 UTC (rev 21035)
@@ -280,6 +280,7 @@
struct bContextDataResult {
PointerRNA ptr;
ListBase list;
+ const char **dir;
};
static int ctx_data_get(bContext *C, const char *member, bContextDataResult *result)
@@ -360,7 +361,7 @@
return 0;
}
-PointerRNA CTX_data_pointer_get(bContext *C, const char *member)
+PointerRNA CTX_data_pointer_get(const bContext *C, const char *member)
{
bContextDataResult result;
@@ -375,7 +376,7 @@
}
-ListBase CTX_data_collection_get(bContext *C, const char *member)
+ListBase CTX_data_collection_get(const bContext *C, const char *member)
{
bContextDataResult result;
@@ -389,7 +390,7 @@
}
}
-void CTX_data_get(bContext *C, const char *member, PointerRNA *r_ptr, ListBase *r_lb)
+void CTX_data_get(const bContext *C, const char *member, PointerRNA *r_ptr, ListBase *r_lb)
{
bContextDataResult result;
@@ -403,11 +404,75 @@
}
}
+static void data_dir_add(ListBase *lb, const char *member)
+{
+ LinkData *link;
+
+ if(strcmp(member, "scene") == 0) /* exception */
+ return;
+
+ for(link=lb->first; link; link=link->next)
+ if(strcmp(link->data, member) == 0)
+ return;
+
+ link= MEM_callocN(sizeof(LinkData), "LinkData");
+ link->data= (void*)member;
+ BLI_addtail(lb, link);
+}
+
+ListBase CTX_data_dir_get(const bContext *C)
+{
+ bContextDataResult result;
+ ListBase lb;
+ int a;
+
+ memset(&lb, 0, sizeof(lb));
+
+ if(C->wm.store) {
+ bContextStoreEntry *entry;
+
+ for(entry=C->wm.store->entries.first; entry; entry=entry->next)
+ data_dir_add(&lb, entry->name);
+ }
+ if(C->wm.region && C->wm.region->type && C->wm.region->type->context) {
+ memset(&result, 0, sizeof(result));
+ C->wm.region->type->context(C, "", &result);
+
+ if(result.dir)
+ for(a=0; result.dir[a]; a++)
+ data_dir_add(&lb, result.dir[a]);
+ }
+ if(C->wm.area && C->wm.area->type && C->wm.area->type->context) {
+ memset(&result, 0, sizeof(result));
+ C->wm.area->type->context(C, "", &result);
+
+ if(result.dir)
+ for(a=0; result.dir[a]; a++)
+ data_dir_add(&lb, result.dir[a]);
+ }
+ if(C->wm.screen && C->wm.screen->context) {
+ bContextDataCallback cb= C->wm.screen->context;
+ memset(&result, 0, sizeof(result));
+ cb(C, "", &result);
+
+ if(result.dir)
+ for(a=0; result.dir[a]; a++)
+ data_dir_add(&lb, result.dir[a]);
+ }
+
+ return lb;
+}
+
int CTX_data_equals(const char *member, const char *str)
{
return (strcmp(member, str) == 0);
}
+int CTX_data_dir(const char *member)
+{
+ return (strcmp(member, "") == 0);
+}
+
void CTX_data_id_pointer_set(bContextDataResult *result, ID *id)
{
RNA_id_pointer_create(id, &result->ptr);
@@ -451,6 +516,11 @@
return 0;
}
+void CTX_data_dir_set(bContextDataResult *result, const char **dir)
+{
+ result->dir= dir;
+}
+
/* data context */
Main *CTX_data_main(const bContext *C)
Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_context.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_context.c 2009-06-20 14:53:30 UTC (rev 21034)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_context.c 2009-06-20 14:55:28 UTC (rev 21035)
@@ -42,7 +42,15 @@
Scene *scene= sc->scene;
Base *base;
- if(CTX_data_equals(member, "scene")) {
+ if(CTX_data_dir(member)) {
+ static const char *dir[] = {
+ "scene", "selected_objects", "selected_bases", "active_base",
+ "active_object", "edit_object", NULL};
+
+ CTX_data_dir_set(result, dir);
+ return 1;
+ }
+ else if(CTX_data_equals(member, "scene")) {
CTX_data_id_pointer_set(result, &scene->id);
return 1;
}
Modified: branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_context.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_context.c 2009-06-20 14:53:30 UTC (rev 21034)
+++ branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_context.c 2009-06-20 14:55:28 UTC (rev 21035)
@@ -492,8 +492,17 @@
return 0;
/* here we handle context, getting data from precomputed path */
+ if(CTX_data_dir(member)) {
+ static const char *dir[] = {
+ "world", "object", "meshe", "armature", "lattice", "curve",
+ "meta_ball", "lamp", "camera", "material", "material_slot",
+ "texture", "texture_slot", "bone", "edit_bone", "particle_system",
+ "cloth", "soft_body", "fluid", NULL};
- if(CTX_data_equals(member, "world")) {
+ CTX_data_dir_set(result, dir);
+ return 1;
+ }
+ else if(CTX_data_equals(member, "world")) {
set_pointer_type(path, result, &RNA_World);
return 1;
}
Modified: branches/blender2.5/blender/source/blender/editors/space_image/space_image.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_image/space_image.c 2009-06-20 14:53:30 UTC (rev 21034)
+++ branches/blender2.5/blender/source/blender/editors/space_image/space_image.c 2009-06-20 14:55:28 UTC (rev 21035)
@@ -301,7 +301,11 @@
{
SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
- if(CTX_data_equals(member, "edit_image")) {
+ if(CTX_data_dir(member)) {
+ static const char *dir[] = {"edit_image", NULL};
+ CTX_data_dir_set(result, dir);
+ }
+ else if(CTX_data_equals(member, "edit_image")) {
CTX_data_id_pointer_set(result, (ID*)ED_space_image(sima));
return 1;
}
Modified: branches/blender2.5/blender/source/blender/editors/space_node/space_node.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_node/space_node.c 2009-06-20 14:53:30 UTC (rev 21034)
+++ branches/blender2.5/blender/source/blender/editors/space_node/space_node.c 2009-06-20 14:55:28 UTC (rev 21035)
@@ -283,7 +283,12 @@
{
SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C);
- if(CTX_data_equals(member, "selected_nodes")) {
+ if(CTX_data_dir(member)) {
+ static const char *dir[] = {"selected_nodes", NULL};
+ CTX_data_dir_set(result, dir);
+ return 1;
+ }
+ else if(CTX_data_equals(member, "selected_nodes")) {
bNode *node;
for(next_node(snode->edittree); (node=next_node(NULL));) {
Modified: branches/blender2.5/blender/source/blender/editors/space_text/space_text.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_text/space_text.c 2009-06-20 14:53:30 UTC (rev 21034)
+++ branches/blender2.5/blender/source/blender/editors/space_text/space_text.c 2009-06-20 14:55:28 UTC (rev 21035)
@@ -293,7 +293,12 @@
{
SpaceText *st= CTX_wm_space_text(C);
- if(CTX_data_equals(member, "edit_text")) {
+ if(CTX_data_dir(member)) {
+ static const char *dir[] = {"edit_text", NULL};
+ CTX_data_dir_set(result, dir);
+ return 1;
+ }
+ else if(CTX_data_equals(member, "edit_text")) {
CTX_data_id_pointer_set(result, &st->text->id);
return 1;
}
Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c 2009-06-20 14:53:30 UTC (rev 21034)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c 2009-06-20 14:55:28 UTC (rev 21035)
@@ -565,7 +565,17 @@
if(v3d==NULL) return 0;
- if(CTX_data_equals(member, "selected_objects") || CTX_data_equals(member, "selected_bases")) {
+ if(CTX_data_dir(member)) {
+ static const char *dir[] = {
+ "selected_objects", "selected_bases" "selected_editable_objects",
+ "selected_editable_bases" "visible_objects", "visible_bases",
+ "active_base", "active_object", "visible_bones", "editable_bones",
+ "selected_bones", "selected_editable_bones" "visible_pchans",
+ "selected_pchans", "active_bone", "active_pchan", NULL};
+
+ CTX_data_dir_set(result, dir);
+ }
+ 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) {
Modified: branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
===================================================================
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list