Hi Brecht,<br><br>It looks like you&#39;ve forgotten a few files:<br>* rna_context.c is missing<br>* the linking order/depedencies for &#39;creator&#39; 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">&lt;<a href="mailto:brecht@blender.org">brecht@blender.org</a>&gt;</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&amp;root=bf-blender&amp;revision=19331" target="_blank">http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&amp;root=bf-blender&amp;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&#39;ve added some special code in python for the dynamic context<br>
  lookups. Tried to hide it behind RNA but didn&#39;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 &quot;DNA_listBase.h&quot;<br>
+#include &quot;RNA_types.h&quot;<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, &amp;ctx_data_list); \<br>
-               for(link=ctx_data_list.first; link; link=link-&gt;next) { \<br>
-                       Type instance= link-&gt;data;<br>
+               for(ctx_link=ctx_data_list.first; ctx_link; ctx_link=ctx_link-&gt;next) { \<br>
+                       Type instance= ctx_link-&gt;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 &quot;MEM_guardedalloc.h&quot;<br>
<br>
+#include &quot;DNA_ID.h&quot;<br>
 #include &quot;DNA_listBase.h&quot;<br>
 #include &quot;DNA_scene_types.h&quot;<br>
 #include &quot;DNA_screen_types.h&quot;<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-&gt;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, &amp;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, &amp;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-&gt;pointer= data;<br>
+       bContextDataResult result;<br>
+<br>
+       if(ctx_data_get((bContext*)C, member, &amp;result)) {<br>
+               return result.ptr;<br>
+       }<br>
+       else {<br>
+               PointerRNA ptr;<br>
+               memset(&amp;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), &quot;LinkData&quot;);<br>
-       link-&gt;data= data;<br>
+       bContextDataResult result;<br>
<br>
+       if(ctx_data_get((bContext*)C, member, &amp;result)) {<br>
+               return result.list;<br>
+       }<br>
+       else {<br>
+               ListBase list;<br>
+               memset(&amp;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, &amp;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, &amp;result-&gt;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, &amp;result-&gt;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), &quot;CTX_data_id_list_add&quot;);<br>
+       RNA_id_pointer_create(id, &amp;link-&gt;ptr);<br>
+<br>
        BLI_addtail(&amp;result-&gt;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), &quot;CTX_data_list_add&quot;);<br>
+       RNA_pointer_create(id, type, data, &amp;link-&gt;ptr);<br>
+<br>
+       BLI_addtail(&amp;result-&gt;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*)&amp;bmain))<br>
+       if(ctx_data_pointer_verify(C, &quot;main&quot;, (void*)&amp;bmain))<br>
                return bmain;<br>
        else<br>
                return C-&gt;data.main;<br>
@@ -377,7 +441,7 @@<br>
 {<br>
        Scene *scene;<br>
<br>
-       if(ctx_data_pointer_verify(C, CTX_DATA_SCENE, (void*)&amp;scene))<br>
+       if(ctx_data_pointer_verify(C, &quot;scene&quot;, (void*)&amp;scene))<br>
                return scene;<br>
        else<br>
                return C-&gt;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, &quot;selected_nodes&quot;, 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, &quot;selected_editable_objects&quot;, 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, &quot;selected_editable_bases&quot;, 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, &quot;selected_objects&quot;, 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, &quot;selected_bases&quot;, 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, &quot;visible_objects&quot;, 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, &quot;visible_bases&quot;, 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, &quot;active_object&quot;);<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>