[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19331] branches/blender2.5/blender/source /blender: Context

Brecht Van Lommel brecht at blender.org
Thu Mar 19 20:03:38 CET 2009


Revision: 19331
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19331
Author:   blendix
Date:     2009-03-19 20:03:38 +0100 (Thu, 19 Mar 2009)

Log Message:
-----------
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.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/context.c
    branches/blender2.5/blender/source/blender/editors/interface/interface.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_context.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h
    branches/blender2.5/blender/source/blender/editors/space_image/space_image.c
    branches/blender2.5/blender/source/blender/editors/space_info/Makefile
    branches/blender2.5/blender/source/blender/editors/space_info/SConscript
    branches/blender2.5/blender/source/blender/editors/space_nla/Makefile
    branches/blender2.5/blender/source/blender/editors/space_nla/SConscript
    branches/blender2.5/blender/source/blender/editors/space_node/space_node.c
    branches/blender2.5/blender/source/blender/editors/space_sound/Makefile
    branches/blender2.5/blender/source/blender/editors/space_sound/SConscript
    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/editors/transform/transform_ops.c
    branches/blender2.5/blender/source/blender/makesrna/RNA_access.h
    branches/blender2.5/blender/source/blender/makesrna/RNA_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/CMakeLists.txt
    branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_rna.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-03-19 01:50:45 UTC (rev 19330)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h	2009-03-19 19:03:38 UTC (rev 19331)
@@ -33,6 +33,7 @@
 #endif
 
 #include "DNA_listBase.h"
+#include "RNA_types.h"
 
 struct ARegion;
 struct bScreen;
@@ -58,6 +59,7 @@
 struct wmWindowManager;
 struct SpaceText;
 struct SpaceImage;
+struct ID;
 
 /* Structs */
 
@@ -67,45 +69,8 @@
 struct bContextDataResult;
 typedef struct bContextDataResult bContextDataResult;
 
-enum {
-	CTX_DATA_MAIN,
-	CTX_DATA_SCENE,
-	CTX_DATA_TOOL_SETTINGS,
-
-	CTX_DATA_SELECTED_OBJECTS,
-	CTX_DATA_SELECTED_BASES,
-	CTX_DATA_SELECTED_EDITABLE_OBJECTS,
-	CTX_DATA_SELECTED_EDITABLE_BASES,
-	CTX_DATA_VISIBLE_OBJECTS,
-	CTX_DATA_VISIBLE_BASES,
-
-	CTX_DATA_ACTIVE_OBJECT,
-	CTX_DATA_ACTIVE_BASE,
-	CTX_DATA_EDIT_OBJECT,
-
-	CTX_DATA_EDIT_IMAGE,
-	CTX_DATA_EDIT_IMAGE_BUFFER,
-
-	CTX_DATA_EDIT_TEXT,
-
-	CTX_DATA_SELECTED_NODES,
-	
-	CTX_DATA_SELECTED_BONES,
-	CTX_DATA_SELECTED_EDITABLE_BONES,
-	CTX_DATA_SELECTED_PCHANS,
-	
-	CTX_DATA_ACTIVE_BONE,
-	CTX_DATA_ACTIVE_PCHAN,
-	
-	CTX_DATA_VISIBLE_BONES,
-	CTX_DATA_EDITABLE_BONES,
-	CTX_DATA_VISIBLE_PCHANS,
-};
-
-typedef int bContextDataMember;
-
 typedef int (*bContextDataCallback)(const bContext *C,
-	bContextDataMember member, bContextDataResult *result);
+	const char *member, bContextDataResult *result);
 
 /* Context */
 
@@ -158,16 +123,28 @@
    - note: listbases consist of LinkData items and must be
      freed with BLI_freelistN! */
 
-void CTX_data_pointer_set(bContextDataResult *result, void *data);
-void CTX_data_list_add(bContextDataResult *result, void *data);
+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);
 
+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);
+
+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);
+
+int CTX_data_equals(const char *member, const char *str);
+
+/*void CTX_data_pointer_set(bContextDataResult *result, void *data);
+void CTX_data_list_add(bContextDataResult *result, void *data);*/
+
 #define CTX_DATA_BEGIN(C, Type, instance, member) \
 	{ \
 		ListBase ctx_data_list; \
-		LinkData *link; \
+		CollectionPointerLink *ctx_link; \
 		CTX_data_##member(C, &ctx_data_list); \
-		for(link=ctx_data_list.first; link; link=link->next) { \
-			Type instance= link->data;
+		for(ctx_link=ctx_data_list.first; ctx_link; ctx_link=ctx_link->next) { \
+			Type instance= ctx_link->ptr.data;
 
 #define CTX_DATA_END \
 		} \
@@ -202,7 +179,6 @@
 struct Object *CTX_data_edit_object(const bContext *C);
 
 struct Image *CTX_data_edit_image(const bContext *C);
-struct ImBuf *CTX_data_edit_image_buffer(const bContext *C);
 
 struct Text *CTX_data_edit_text(const bContext *C);
 

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h	2009-03-19 01:50:45 UTC (rev 19330)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h	2009-03-19 19:03:38 UTC (rev 19331)
@@ -77,7 +77,7 @@
 	void		(*keymap)(struct wmWindowManager *);
 
 	/* return context data */
-	int			(*context)(const struct bContext *, int, struct bContextDataResult *);
+	int			(*context)(const struct bContext *, const char*, struct bContextDataResult *);
 
 	/* region type definitions */
 	ListBase	regiontypes;
@@ -117,7 +117,7 @@
 	void		(*cursor)(struct wmWindow *, struct ScrArea *, struct ARegion *ar);
 
 	/* return context data */
-	int			(*context)(const struct bContext *, int, struct bContextDataResult *);
+	int			(*context)(const struct bContext *, const char *, struct bContextDataResult *);
 
 	/* custom drawing callbacks */
 	ListBase	drawcalls;

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/context.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/context.c	2009-03-19 01:50:45 UTC (rev 19330)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/context.c	2009-03-19 19:03:38 UTC (rev 19331)
@@ -27,6 +27,7 @@
 
 #include "MEM_guardedalloc.h"
 
+#include "DNA_ID.h"
 #include "DNA_listBase.h"
 #include "DNA_scene_types.h"
 #include "DNA_screen_types.h"
@@ -254,11 +255,11 @@
 /* data context utility functions */
 
 struct bContextDataResult {
-	void *pointer;
+	PointerRNA ptr;
 	ListBase list;
 };
 
-static int ctx_data_get(bContext *C, bContextDataMember member, bContextDataResult *result)
+static int ctx_data_get(bContext *C, const char *member, bContextDataResult *result)
 {
 	int done= 0, recursion= C->data.recursion;
 
@@ -292,22 +293,22 @@
 	return done;
 }
 
-static void *ctx_data_pointer_get(const bContext *C, bContextDataMember member)
+static void *ctx_data_pointer_get(const bContext *C, const char *member)
 {
 	bContextDataResult result;
 
 	if(ctx_data_get((bContext*)C, member, &result))
-		return result.pointer;
+		return result.ptr.data;
 
 	return NULL;
 }
 
-static int ctx_data_pointer_verify(const bContext *C, bContextDataMember member, void **pointer)
+static int ctx_data_pointer_verify(const bContext *C, const char *member, void **pointer)
 {
 	bContextDataResult result;
 
 	if(ctx_data_get((bContext*)C, member, &result)) {
-		*pointer= result.pointer;
+		*pointer= result.ptr.data;
 		return 1;
 	}
 	else {
@@ -316,7 +317,7 @@
 	}
 }
 
-static int ctx_data_collection_get(const bContext *C, bContextDataMember member, ListBase *list)
+static int ctx_data_collection_get(const bContext *C, const char *member, ListBase *list)
 {
 	bContextDataResult result;
 
@@ -328,21 +329,84 @@
 	return 0;
 }
 
-void CTX_data_pointer_set(bContextDataResult *result, void *data)
+PointerRNA CTX_data_pointer_get(bContext *C, const char *member)
 {
-	result->pointer= data;
+	bContextDataResult result;
+
+	if(ctx_data_get((bContext*)C, member, &result)) {
+		return result.ptr;
+	}
+	else {
+		PointerRNA ptr;
+		memset(&ptr, 0, sizeof(ptr));
+		return ptr;
+	}
+
 }
 
-void CTX_data_list_add(bContextDataResult *result, void *data)
+ListBase CTX_data_collection_get(bContext *C, const char *member)
 {
-	LinkData *link;
-	
-	link= MEM_callocN(sizeof(LinkData), "LinkData");
-	link->data= data;
+	bContextDataResult result;
 
+	if(ctx_data_get((bContext*)C, member, &result)) {
+		return result.list;
+	}
+	else {
+		ListBase list;
+		memset(&list, 0, sizeof(list));
+		return list;
+	}
+}
+
+void CTX_data_get(bContext *C, const char *member, PointerRNA *r_ptr, ListBase *r_lb)
+{
+	bContextDataResult result;
+
+	if(ctx_data_get((bContext*)C, member, &result)) {
+		*r_ptr= result.ptr;
+		*r_lb= result.list;
+	}
+	else {
+		memset(r_ptr, 0, sizeof(*r_ptr));
+		memset(r_lb, 0, sizeof(*r_lb));
+	}
+}
+
+int CTX_data_equals(const char *member, const char *str)
+{
+	return (strcmp(member, str) == 0);
+}
+
+void CTX_data_id_pointer_set(bContextDataResult *result, ID *id)
+{
+	RNA_id_pointer_create(id, &result->ptr);
+}
+
+void CTX_data_pointer_set(bContextDataResult *result, ID *id, StructRNA *type, void *data)
+{
+	RNA_pointer_create(id, type, data, &result->ptr);
+}
+
+void CTX_data_id_list_add(bContextDataResult *result, ID *id)
+{
+	CollectionPointerLink *link;
+
+	link= MEM_callocN(sizeof(CollectionPointerLink), "CTX_data_id_list_add");
+	RNA_id_pointer_create(id, &link->ptr);
+
 	BLI_addtail(&result->list, link);
 }
 
+void CTX_data_list_add(bContextDataResult *result, ID *id, StructRNA *type, void *data)
+{
+	CollectionPointerLink *link;
+
+	link= MEM_callocN(sizeof(CollectionPointerLink), "CTX_data_list_add");
+	RNA_pointer_create(id, type, data, &link->ptr);
+
+	BLI_addtail(&result->list, link);
+}
+
 int ctx_data_list_count(const bContext *C, int (*func)(const bContext*, ListBase*))
 {
 	ListBase list;
@@ -362,7 +426,7 @@
 {
 	Main *bmain;
 
-	if(ctx_data_pointer_verify(C, CTX_DATA_MAIN, (void*)&bmain))
+	if(ctx_data_pointer_verify(C, "main", (void*)&bmain))
 		return bmain;
 	else
 		return C->data.main;
@@ -377,7 +441,7 @@
 {
 	Scene *scene;
 
-	if(ctx_data_pointer_verify(C, CTX_DATA_SCENE, (void*)&scene))
+	if(ctx_data_pointer_verify(C, "scene", (void*)&scene))
 		return scene;
 	else
 		return C->data.scene;
@@ -400,107 +464,102 @@
 
 int CTX_data_selected_nodes(const bContext *C, ListBase *list)
 {
-	return ctx_data_collection_get(C, CTX_DATA_SELECTED_NODES, list);
+	return ctx_data_collection_get(C, "selected_nodes", list);
 }
 
 int CTX_data_selected_editable_objects(const bContext *C, ListBase *list)
 {
-	return ctx_data_collection_get(C, CTX_DATA_SELECTED_EDITABLE_OBJECTS, list);
+	return ctx_data_collection_get(C, "selected_editable_objects", list);
 }
 
 int CTX_data_selected_editable_bases(const bContext *C, ListBase *list)
 {
-	return ctx_data_collection_get(C, CTX_DATA_SELECTED_EDITABLE_BASES, list);
+	return ctx_data_collection_get(C, "selected_editable_bases", list);
 }
 
 int CTX_data_selected_objects(const bContext *C, ListBase *list)
 {
-	return ctx_data_collection_get(C, CTX_DATA_SELECTED_OBJECTS, list);
+	return ctx_data_collection_get(C, "selected_objects", list);
 }
 
 int CTX_data_selected_bases(const bContext *C, ListBase *list)
 {
-	return ctx_data_collection_get(C, CTX_DATA_SELECTED_BASES, list);
+	return ctx_data_collection_get(C, "selected_bases", list);
 }
 
 int CTX_data_visible_objects(const bContext *C, ListBase *list)
 {
-	return ctx_data_collection_get(C, CTX_DATA_VISIBLE_OBJECTS, list);
+	return ctx_data_collection_get(C, "visible_objects", list);
 }
 
 int CTX_data_visible_bases(const bContext *C, ListBase *list)
 {
-	return ctx_data_collection_get(C, CTX_DATA_VISIBLE_BASES, list);
+	return ctx_data_collection_get(C, "visible_bases", list);
 }
 
 struct Object *CTX_data_active_object(const bContext *C)
 {
-	return ctx_data_pointer_get(C, CTX_DATA_ACTIVE_OBJECT);
+	return ctx_data_pointer_get(C, "active_object");
 }
 
 struct Base *CTX_data_active_base(const bContext *C)
 {
-	return ctx_data_pointer_get(C, CTX_DATA_ACTIVE_BASE);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list