Hi Brecht,<br><br>It looks like you've forgotten a few files:<br>* rna_context.c is missing<br>* the linking order/depedencies for 'creator' when using scons seems broken also<br><br>Joshua <br><br><div class="gmail_quote">
On Fri, Mar 20, 2009 at 8:03 AM, Brecht Van Lommel <span dir="ltr"><<a href="mailto:brecht@blender.org">brecht@blender.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Revision: 19331<br>
<a href="http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19331" target="_blank">http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19331</a><br>
Author: blendix<br>
Date: 2009-03-19 20:03:38 +0100 (Thu, 19 Mar 2009)<br>
<br>
Log Message:<br>
-----------<br>
Context<br>
<br>
* Made it based on string lookups rather than fixed enum, to make<br>
it extensible by python scripts.<br>
* Context callbacks now also have to specify RNA type when returning<br>
pointers or collections. For non-RNA wrapped data, UnknownType can<br>
be used.<br>
* RNA wrapped context. The WM entries are fixed, for data context<br>
only main and scene are defined properties. Other data entries have<br>
to be dynamically looked up.<br>
* I've added some special code in python for the dynamic context<br>
lookups. Tried to hide it behind RNA but didn't find a clean way to<br>
do it yet. Still unused/untested.<br>
<br>
* Also minor fix for warning about propertional edit property in<br>
transform code, and fix for usage of operator poll with checking if<br>
it was NULL.<br>
<br>
Modified Paths:<br>
--------------<br>
branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h<br>
branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h<br>
branches/blender2.5/blender/source/blender/blenkernel/intern/context.c<br>
branches/blender2.5/blender/source/blender/editors/interface/interface.c<br>
branches/blender2.5/blender/source/blender/editors/screen/screen_context.c<br>
branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h<br>
branches/blender2.5/blender/source/blender/editors/space_image/space_image.c<br>
branches/blender2.5/blender/source/blender/editors/space_info/Makefile<br>
branches/blender2.5/blender/source/blender/editors/space_info/SConscript<br>
branches/blender2.5/blender/source/blender/editors/space_nla/Makefile<br>
branches/blender2.5/blender/source/blender/editors/space_nla/SConscript<br>
branches/blender2.5/blender/source/blender/editors/space_node/space_node.c<br>
branches/blender2.5/blender/source/blender/editors/space_sound/Makefile<br>
branches/blender2.5/blender/source/blender/editors/space_sound/SConscript<br>
branches/blender2.5/blender/source/blender/editors/space_text/space_text.c<br>
branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c<br>
branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c<br>
branches/blender2.5/blender/source/blender/makesrna/RNA_access.h<br>
branches/blender2.5/blender/source/blender/makesrna/RNA_types.h<br>
branches/blender2.5/blender/source/blender/makesrna/intern/CMakeLists.txt<br>
branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c<br>
branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c<br>
branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h<br>
branches/blender2.5/blender/source/blender/makesrna/intern/rna_rna.c<br>
branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c<br>
<br>
Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h<br>
===================================================================<br>
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h 2009-03-19 01:50:45 UTC (rev 19330)<br>
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h 2009-03-19 19:03:38 UTC (rev 19331)<br>
@@ -33,6 +33,7 @@<br>
#endif<br>
<br>
#include "DNA_listBase.h"<br>
+#include "RNA_types.h"<br>
<br>
struct ARegion;<br>
struct bScreen;<br>
@@ -58,6 +59,7 @@<br>
struct wmWindowManager;<br>
struct SpaceText;<br>
struct SpaceImage;<br>
+struct ID;<br>
<br>
/* Structs */<br>
<br>
@@ -67,45 +69,8 @@<br>
struct bContextDataResult;<br>
typedef struct bContextDataResult bContextDataResult;<br>
<br>
-enum {<br>
- CTX_DATA_MAIN,<br>
- CTX_DATA_SCENE,<br>
- CTX_DATA_TOOL_SETTINGS,<br>
-<br>
- CTX_DATA_SELECTED_OBJECTS,<br>
- CTX_DATA_SELECTED_BASES,<br>
- CTX_DATA_SELECTED_EDITABLE_OBJECTS,<br>
- CTX_DATA_SELECTED_EDITABLE_BASES,<br>
- CTX_DATA_VISIBLE_OBJECTS,<br>
- CTX_DATA_VISIBLE_BASES,<br>
-<br>
- CTX_DATA_ACTIVE_OBJECT,<br>
- CTX_DATA_ACTIVE_BASE,<br>
- CTX_DATA_EDIT_OBJECT,<br>
-<br>
- CTX_DATA_EDIT_IMAGE,<br>
- CTX_DATA_EDIT_IMAGE_BUFFER,<br>
-<br>
- CTX_DATA_EDIT_TEXT,<br>
-<br>
- CTX_DATA_SELECTED_NODES,<br>
-<br>
- CTX_DATA_SELECTED_BONES,<br>
- CTX_DATA_SELECTED_EDITABLE_BONES,<br>
- CTX_DATA_SELECTED_PCHANS,<br>
-<br>
- CTX_DATA_ACTIVE_BONE,<br>
- CTX_DATA_ACTIVE_PCHAN,<br>
-<br>
- CTX_DATA_VISIBLE_BONES,<br>
- CTX_DATA_EDITABLE_BONES,<br>
- CTX_DATA_VISIBLE_PCHANS,<br>
-};<br>
-<br>
-typedef int bContextDataMember;<br>
-<br>
typedef int (*bContextDataCallback)(const bContext *C,<br>
- bContextDataMember member, bContextDataResult *result);<br>
+ const char *member, bContextDataResult *result);<br>
<br>
/* Context */<br>
<br>
@@ -158,16 +123,28 @@<br>
- note: listbases consist of LinkData items and must be<br>
freed with BLI_freelistN! */<br>
<br>
-void CTX_data_pointer_set(bContextDataResult *result, void *data);<br>
-void CTX_data_list_add(bContextDataResult *result, void *data);<br>
+PointerRNA CTX_data_pointer_get(bContext *C, const char *member);<br>
+ListBase CTX_data_collection_get(bContext *C, const char *member);<br>
+void CTX_data_get(bContext *C, const char *member, PointerRNA *r_ptr, ListBase *r_lb);<br>
<br>
+void CTX_data_id_pointer_set(bContextDataResult *result, struct ID *id);<br>
+void CTX_data_pointer_set(bContextDataResult *result, struct ID *id, StructRNA *type, void *data);<br>
+<br>
+void CTX_data_id_list_add(bContextDataResult *result, struct ID *id);<br>
+void CTX_data_list_add(bContextDataResult *result, struct ID *id, StructRNA *type, void *data);<br>
+<br>
+int CTX_data_equals(const char *member, const char *str);<br>
+<br>
+/*void CTX_data_pointer_set(bContextDataResult *result, void *data);<br>
+void CTX_data_list_add(bContextDataResult *result, void *data);*/<br>
+<br>
#define CTX_DATA_BEGIN(C, Type, instance, member) \<br>
{ \<br>
ListBase ctx_data_list; \<br>
- LinkData *link; \<br>
+ CollectionPointerLink *ctx_link; \<br>
CTX_data_##member(C, &ctx_data_list); \<br>
- for(link=ctx_data_list.first; link; link=link->next) { \<br>
- Type instance= link->data;<br>
+ for(ctx_link=ctx_data_list.first; ctx_link; ctx_link=ctx_link->next) { \<br>
+ Type instance= ctx_link->ptr.data;<br>
<br>
#define CTX_DATA_END \<br>
} \<br>
@@ -202,7 +179,6 @@<br>
struct Object *CTX_data_edit_object(const bContext *C);<br>
<br>
struct Image *CTX_data_edit_image(const bContext *C);<br>
-struct ImBuf *CTX_data_edit_image_buffer(const bContext *C);<br>
<br>
struct Text *CTX_data_edit_text(const bContext *C);<br>
<br>
<br>
Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h<br>
===================================================================<br>
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h 2009-03-19 01:50:45 UTC (rev 19330)<br>
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h 2009-03-19 19:03:38 UTC (rev 19331)<br>
@@ -77,7 +77,7 @@<br>
void (*keymap)(struct wmWindowManager *);<br>
<br>
/* return context data */<br>
- int (*context)(const struct bContext *, int, struct bContextDataResult *);<br>
+ int (*context)(const struct bContext *, const char*, struct bContextDataResult *);<br>
<br>
/* region type definitions */<br>
ListBase regiontypes;<br>
@@ -117,7 +117,7 @@<br>
void (*cursor)(struct wmWindow *, struct ScrArea *, struct ARegion *ar);<br>
<br>
/* return context data */<br>
- int (*context)(const struct bContext *, int, struct bContextDataResult *);<br>
+ int (*context)(const struct bContext *, const char *, struct bContextDataResult *);<br>
<br>
/* custom drawing callbacks */<br>
ListBase drawcalls;<br>
<br>
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/context.c<br>
===================================================================<br>
--- branches/blender2.5/blender/source/blender/blenkernel/intern/context.c 2009-03-19 01:50:45 UTC (rev 19330)<br>
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/context.c 2009-03-19 19:03:38 UTC (rev 19331)<br>
@@ -27,6 +27,7 @@<br>
<br>
#include "MEM_guardedalloc.h"<br>
<br>
+#include "DNA_ID.h"<br>
#include "DNA_listBase.h"<br>
#include "DNA_scene_types.h"<br>
#include "DNA_screen_types.h"<br>
@@ -254,11 +255,11 @@<br>
/* data context utility functions */<br>
<br>
struct bContextDataResult {<br>
- void *pointer;<br>
+ PointerRNA ptr;<br>
ListBase list;<br>
};<br>
<br>
-static int ctx_data_get(bContext *C, bContextDataMember member, bContextDataResult *result)<br>
+static int ctx_data_get(bContext *C, const char *member, bContextDataResult *result)<br>
{<br>
int done= 0, recursion= C->data.recursion;<br>
<br>
@@ -292,22 +293,22 @@<br>
return done;<br>
}<br>
<br>
-static void *ctx_data_pointer_get(const bContext *C, bContextDataMember member)<br>
+static void *ctx_data_pointer_get(const bContext *C, const char *member)<br>
{<br>
bContextDataResult result;<br>
<br>
if(ctx_data_get((bContext*)C, member, &result))<br>
- return result.pointer;<br>
+ return result.ptr.data;<br>
<br>
return NULL;<br>
}<br>
<br>
-static int ctx_data_pointer_verify(const bContext *C, bContextDataMember member, void **pointer)<br>
+static int ctx_data_pointer_verify(const bContext *C, const char *member, void **pointer)<br>
{<br>
bContextDataResult result;<br>
<br>
if(ctx_data_get((bContext*)C, member, &result)) {<br>
- *pointer= result.pointer;<br>
+ *pointer= result.ptr.data;<br>
return 1;<br>
}<br>
else {<br>
@@ -316,7 +317,7 @@<br>
}<br>
}<br>
<br>
-static int ctx_data_collection_get(const bContext *C, bContextDataMember member, ListBase *list)<br>
+static int ctx_data_collection_get(const bContext *C, const char *member, ListBase *list)<br>
{<br>
bContextDataResult result;<br>
<br>
@@ -328,21 +329,84 @@<br>
return 0;<br>
}<br>
<br>
-void CTX_data_pointer_set(bContextDataResult *result, void *data)<br>
+PointerRNA CTX_data_pointer_get(bContext *C, const char *member)<br>
{<br>
- result->pointer= data;<br>
+ bContextDataResult result;<br>
+<br>
+ if(ctx_data_get((bContext*)C, member, &result)) {<br>
+ return result.ptr;<br>
+ }<br>
+ else {<br>
+ PointerRNA ptr;<br>
+ memset(&ptr, 0, sizeof(ptr));<br>
+ return ptr;<br>
+ }<br>
+<br>
}<br>
<br>
-void CTX_data_list_add(bContextDataResult *result, void *data)<br>
+ListBase CTX_data_collection_get(bContext *C, const char *member)<br>
{<br>
- LinkData *link;<br>
-<br>
- link= MEM_callocN(sizeof(LinkData), "LinkData");<br>
- link->data= data;<br>
+ bContextDataResult result;<br>
<br>
+ if(ctx_data_get((bContext*)C, member, &result)) {<br>
+ return result.list;<br>
+ }<br>
+ else {<br>
+ ListBase list;<br>
+ memset(&list, 0, sizeof(list));<br>
+ return list;<br>
+ }<br>
+}<br>
+<br>
+void CTX_data_get(bContext *C, const char *member, PointerRNA *r_ptr, ListBase *r_lb)<br>
+{<br>
+ bContextDataResult result;<br>
+<br>
+ if(ctx_data_get((bContext*)C, member, &result)) {<br>
+ *r_ptr= result.ptr;<br>
+ *r_lb= result.list;<br>
+ }<br>
+ else {<br>
+ memset(r_ptr, 0, sizeof(*r_ptr));<br>
+ memset(r_lb, 0, sizeof(*r_lb));<br>
+ }<br>
+}<br>
+<br>
+int CTX_data_equals(const char *member, const char *str)<br>
+{<br>
+ return (strcmp(member, str) == 0);<br>
+}<br>
+<br>
+void CTX_data_id_pointer_set(bContextDataResult *result, ID *id)<br>
+{<br>
+ RNA_id_pointer_create(id, &result->ptr);<br>
+}<br>
+<br>
+void CTX_data_pointer_set(bContextDataResult *result, ID *id, StructRNA *type, void *data)<br>
+{<br>
+ RNA_pointer_create(id, type, data, &result->ptr);<br>
+}<br>
+<br>
+void CTX_data_id_list_add(bContextDataResult *result, ID *id)<br>
+{<br>
+ CollectionPointerLink *link;<br>
+<br>
+ link= MEM_callocN(sizeof(CollectionPointerLink), "CTX_data_id_list_add");<br>
+ RNA_id_pointer_create(id, &link->ptr);<br>
+<br>
BLI_addtail(&result->list, link);<br>
}<br>
<br>
+void CTX_data_list_add(bContextDataResult *result, ID *id, StructRNA *type, void *data)<br>
+{<br>
+ CollectionPointerLink *link;<br>
+<br>
+ link= MEM_callocN(sizeof(CollectionPointerLink), "CTX_data_list_add");<br>
+ RNA_pointer_create(id, type, data, &link->ptr);<br>
+<br>
+ BLI_addtail(&result->list, link);<br>
+}<br>
+<br>
int ctx_data_list_count(const bContext *C, int (*func)(const bContext*, ListBase*))<br>
{<br>
ListBase list;<br>
@@ -362,7 +426,7 @@<br>
{<br>
Main *bmain;<br>
<br>
- if(ctx_data_pointer_verify(C, CTX_DATA_MAIN, (void*)&bmain))<br>
+ if(ctx_data_pointer_verify(C, "main", (void*)&bmain))<br>
return bmain;<br>
else<br>
return C->data.main;<br>
@@ -377,7 +441,7 @@<br>
{<br>
Scene *scene;<br>
<br>
- if(ctx_data_pointer_verify(C, CTX_DATA_SCENE, (void*)&scene))<br>
+ if(ctx_data_pointer_verify(C, "scene", (void*)&scene))<br>
return scene;<br>
else<br>
return C->data.scene;<br>
@@ -400,107 +464,102 @@<br>
<br>
int CTX_data_selected_nodes(const bContext *C, ListBase *list)<br>
{<br>
- return ctx_data_collection_get(C, CTX_DATA_SELECTED_NODES, list);<br>
+ return ctx_data_collection_get(C, "selected_nodes", list);<br>
}<br>
<br>
int CTX_data_selected_editable_objects(const bContext *C, ListBase *list)<br>
{<br>
- return ctx_data_collection_get(C, CTX_DATA_SELECTED_EDITABLE_OBJECTS, list);<br>
+ return ctx_data_collection_get(C, "selected_editable_objects", list);<br>
}<br>
<br>
int CTX_data_selected_editable_bases(const bContext *C, ListBase *list)<br>
{<br>
- return ctx_data_collection_get(C, CTX_DATA_SELECTED_EDITABLE_BASES, list);<br>
+ return ctx_data_collection_get(C, "selected_editable_bases", list);<br>
}<br>
<br>
int CTX_data_selected_objects(const bContext *C, ListBase *list)<br>
{<br>
- return ctx_data_collection_get(C, CTX_DATA_SELECTED_OBJECTS, list);<br>
+ return ctx_data_collection_get(C, "selected_objects", list);<br>
}<br>
<br>
int CTX_data_selected_bases(const bContext *C, ListBase *list)<br>
{<br>
- return ctx_data_collection_get(C, CTX_DATA_SELECTED_BASES, list);<br>
+ return ctx_data_collection_get(C, "selected_bases", list);<br>
}<br>
<br>
int CTX_data_visible_objects(const bContext *C, ListBase *list)<br>
{<br>
- return ctx_data_collection_get(C, CTX_DATA_VISIBLE_OBJECTS, list);<br>
+ return ctx_data_collection_get(C, "visible_objects", list);<br>
}<br>
<br>
int CTX_data_visible_bases(const bContext *C, ListBase *list)<br>
{<br>
- return ctx_data_collection_get(C, CTX_DATA_VISIBLE_BASES, list);<br>
+ return ctx_data_collection_get(C, "visible_bases", list);<br>
}<br>
<br>
struct Object *CTX_data_active_object(const bContext *C)<br>
{<br>
- return ctx_data_pointer_get(C, CTX_DATA_ACTIVE_OBJECT);<br>
+ return ctx_data_pointer_get(C, "active_object");<br>
}<br>
<br>
struct Base *CTX_data_active_base(const bContext *C)<br>
{<br>
- return ctx_data_pointer_get(C, CTX_DATA_ACTIVE_BASE);<br>
<br>
@@ Diff output truncated at 10240 characters. @@<br>
<br>
_______________________________________________<br>
Bf-blender-cvs mailing list<br>
<a href="mailto:Bf-blender-cvs@blender.org">Bf-blender-cvs@blender.org</a><br>
<a href="http://lists.blender.org/mailman/listinfo/bf-blender-cvs" target="_blank">http://lists.blender.org/mailman/listinfo/bf-blender-cvs</a><br>
</blockquote></div><br>