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

Brecht Van Lommel brecht at blender.org
Sun Apr 19 19:12:16 CEST 2009


Revision: 19792
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19792
Author:   blendix
Date:     2009-04-19 19:12:16 +0200 (Sun, 19 Apr 2009)

Log Message:
-----------
RNA:
* Wrapped HeaderType/Header.
* Some tweaks to get type properties wrapped with less code.
* Made Panel space and region types enum instead of string.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
    branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
    branches/blender2.5/blender/source/blender/editors/space_text/text_header.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h	2009-04-19 16:35:20 UTC (rev 19791)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h	2009-04-19 17:12:16 UTC (rev 19792)
@@ -37,6 +37,7 @@
 struct bScreen;
 struct ListBase;
 struct Panel;
+struct Header;
 struct ScrArea;
 struct SpaceType;
 struct wmNotifier;
@@ -149,8 +150,8 @@
 	char		idname[BKE_ST_MAXNAME];		/* unique name */
 	char		label[BKE_ST_MAXNAME];		/* for panel header */
 	char		context[BKE_ST_MAXNAME];	/* for buttons window */
-	char		space_type[BKE_ST_MAXNAME];
-	char		region_type[BKE_ST_MAXNAME];
+	int			space_type;
+	int			region_type;
 
 	/* verify if the panel should draw or not */
 	int			(*poll)(const struct bContext *, struct PanelType *);
@@ -169,14 +170,17 @@
 typedef struct HeaderType {
 	struct HeaderType *next, *prev;
 
-	char		*idname;	/* unique name */
-	char		*name;		/* for UI */
+	char		idname[BKE_ST_MAXNAME];	/* unique name */
+	int 		space_type;
 
 	/* draw entirely, view changes should be handled here */
-	void		(*draw)(const struct bContext *, struct uiLayout *);	
+	void		(*draw)(const struct bContext *, struct Header *);	
 
 	/* python integration */
-	void		*py_data;
+	void				*py_data;
+	struct StructRNA	*py_srna;
+	int					(*py_call)(struct PointerRNA *, struct FunctionRNA *, struct ParameterList *);
+	void				(*py_free)(void *py_data);
 } HeaderType;
 
 /* spacetypes */

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c	2009-04-19 16:35:20 UTC (rev 19791)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c	2009-04-19 17:12:16 UTC (rev 19792)
@@ -1262,6 +1262,7 @@
 	uiBlock *block;
 	uiLayout *layout;
 	HeaderType *ht;
+	Header header = {};
 	float col[3];
 	int xco, yco;
 
@@ -1287,8 +1288,11 @@
 		block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
 		layout= uiLayoutBegin(UI_LAYOUT_HORIZONTAL, xco, yco, 24, 1);
 
-		if(ht->draw)
-			ht->draw(C, layout);
+		if(ht->draw) {
+			header.type= ht;
+			header.layout= layout;
+			ht->draw(C, &header);
+		}
 
 		uiLayoutEnd(C, block, layout, &xco, &yco);
 		uiEndBlock(C, block);

Modified: branches/blender2.5/blender/source/blender/editors/space_text/text_header.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_text/text_header.c	2009-04-19 16:35:20 UTC (rev 19791)
+++ branches/blender2.5/blender/source/blender/editors/space_text/text_header.c	2009-04-19 17:12:16 UTC (rev 19792)
@@ -357,12 +357,13 @@
 
 /********************** header buttons ***********************/
 
-static void text_header_draw(const bContext *C, uiLayout *layout)
+static void text_header_draw(const bContext *C, Header *header)
 {
 	bScreen *sc= CTX_wm_screen(C);
 	SpaceText *st= (SpaceText*)CTX_wm_space_data(C);
 	PointerRNA spaceptr;
 	Text *text= st->text;
+	uiLayout *layout= header->layout;
 	
 	RNA_pointer_create(&sc->id, &RNA_SpaceTextEditor, st, &spaceptr);
 
@@ -421,8 +422,7 @@
 
 	/* header */
 	ht= MEM_callocN(sizeof(HeaderType), "spacetype text header");
-	ht->idname= "TEXT_HT_header";
-	ht->name= "Header";
+	strcpy(ht->idname, "TEXT_HT_header");
 	ht->draw= text_header_draw;
 	BLI_addhead(&art->headertypes, ht);
 }

Modified: branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h	2009-04-19 16:35:20 UTC (rev 19791)
+++ branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h	2009-04-19 17:12:16 UTC (rev 19792)
@@ -39,6 +39,7 @@
 struct ARegion;
 struct ARegionType;
 struct PanelType;
+struct HeaderType;
 struct Scene;
 struct uiLayout;
 struct wmTimer;
@@ -104,6 +105,11 @@
 	void *activedata;			/* runtime for panel manipulation */
 } Panel;
 
+typedef struct Header {
+	struct HeaderType *type;	/* runtime */
+	struct uiLayout *layout;	/* runtime for drawing */
+} Header;
+
 typedef struct ScrArea {
 	struct ScrArea *next, *prev;
 	

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2009-04-19 16:35:20 UTC (rev 19791)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2009-04-19 17:12:16 UTC (rev 19792)
@@ -299,12 +299,6 @@
 			DefRNA.error= 1;
 			return NULL;
 		}
-
-		if(prop->type == PROP_STRING && ((StringPropertyRNA*)prop)->maxlength == 0) {
-			fprintf(stderr, "rna_def_property_get_func: string %s.%s has max length 0.\n", srna->identifier, prop->identifier);
-			DefRNA.error= 1;
-			return NULL;
-		}
 	}
 
 	func= rna_alloc_function_name(srna->identifier, prop->identifier, "get");
@@ -319,7 +313,10 @@
 			}
 			else {
 				rna_print_data_get(f, dp);
-				fprintf(f, "	BLI_strncpy(value, data->%s, %d);\n", dp->dnaname, sprop->maxlength);
+				if(sprop->maxlength)
+					fprintf(f, "	BLI_strncpy(value, data->%s, %d);\n", dp->dnaname, sprop->maxlength);
+				else
+					fprintf(f, "	BLI_strncpy(value, data->%s, sizeof(data->%s));\n", dp->dnaname, dp->dnaname);
 			}
 			fprintf(f, "}\n\n");
 			break;
@@ -484,7 +481,10 @@
 			}
 			else {
 				rna_print_data_get(f, dp);
-				fprintf(f, "	BLI_strncpy(data->%s, value, %d);\n", dp->dnaname, sprop->maxlength);
+				if(sprop->maxlength)
+					fprintf(f, "	BLI_strncpy(data->%s, value, %d);\n", dp->dnaname, sprop->maxlength);
+				else
+					fprintf(f, "	BLI_strncpy(data->%s, value, sizeof(data->%s));\n", dp->dnaname, dp->dnaname);
 			}
 			fprintf(f, "}\n\n");
 			break;

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c	2009-04-19 16:35:20 UTC (rev 19791)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c	2009-04-19 17:12:16 UTC (rev 19792)
@@ -311,12 +311,26 @@
 			return 1;
 		}
 		else if(cmp == 2) {
+			smember->type= "";
+			smember->name= dnaname;
+			smember->pointerlevel= 0;
+			smember->arraylength= 0;
+
 			membername= strstr(membername, ".") + strlen(".");
-			return rna_find_sdna_member(sdna, sdna->types[sp[0]], membername, smember);
+			rna_find_sdna_member(sdna, sdna->types[sp[0]], membername, smember);
+
+			return 1;
 		}
 		else if(cmp == 3) {
+			smember->type= "";
+			smember->name= dnaname;
+			smember->pointerlevel= 0;
+			smember->arraylength= 0;
+
 			membername= strstr(membername, "->") + strlen("->");
-			return rna_find_sdna_member(sdna, sdna->types[sp[0]], membername, smember);
+			rna_find_sdna_member(sdna, sdna->types[sp[0]], membername, smember);
+
+			return 1;
 		}
 	}
 

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui.c	2009-04-19 16:35:20 UTC (rev 19791)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui.c	2009-04-19 17:12:16 UTC (rev 19792)
@@ -28,13 +28,13 @@
 #include "RNA_types.h"
 
 #include "rna_internal.h"
+#include "RNA_enum_types.h"
 
 #ifdef RNA_RUNTIME
 
 #include "MEM_guardedalloc.h"
 
 #include "RNA_access.h"
-#include "RNA_enum_types.h"
 
 #include "DNA_screen_types.h"
 
@@ -49,44 +49,29 @@
 #include "WM_api.h"
 #include "WM_types.h"
 
-#define RNA_STRING_FUNCTIONS(fname, member) \
-static void fname##_get(PointerRNA *ptr, char *value) \
-{ \
-	BLI_strncpy(value, member, sizeof(member)); \
-} \
-\
-static int fname##_length(PointerRNA *ptr) \
-{ \
-	return strlen(member); \
-} \
-\
-static void fname##_set(PointerRNA *ptr, const char *value) \
-{ \
-	BLI_strncpy(member, value, sizeof(member)); \
-} \
-
-RNA_STRING_FUNCTIONS(rna_Panel_idname, ((Panel*)ptr->data)->type->idname)
-RNA_STRING_FUNCTIONS(rna_Panel_label, ((Panel*)ptr->data)->type->label)
-RNA_STRING_FUNCTIONS(rna_Panel_context, ((Panel*)ptr->data)->type->context)
-RNA_STRING_FUNCTIONS(rna_Panel_space_type, ((Panel*)ptr->data)->type->space_type)
-RNA_STRING_FUNCTIONS(rna_Panel_region_type, ((Panel*)ptr->data)->type->region_type)
-
-static void panel_draw(const bContext *C, Panel *pnl)
+static ARegionType *region_type_find(ReportList *reports, int space_type, int region_type)
 {
-	PointerRNA ptr;
-	ParameterList *list;
-	FunctionRNA *func;
+	SpaceType *st;
+	ARegionType *art;
 
-	RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->py_srna, pnl, &ptr);
-	func= RNA_struct_find_function(&ptr, "draw");
+	st= BKE_spacetype_from_id(space_type);
 
-	list= RNA_parameter_list_create(&ptr, func);
-	RNA_parameter_set_lookup(list, "context", &C);
-	pnl->type->py_call(&ptr, func, list);
+	for(art= (st)? st->regiontypes.first: NULL; art; art= art->next) {
+		if (art->regionid==region_type)
+			break;
+	}
+	
+	/* region type not found? abort */
+	if (art==NULL) {
+		BKE_report(reports, RPT_ERROR, "Region not found in spacetype.");
+		return NULL;
+	}
 
-	RNA_parameter_list_free(list);
+	return art;
 }
 
+/* Panel */
+
 static int panel_poll(const bContext *C, PanelType *pt)
 {
 	PointerRNA ptr;
@@ -110,76 +95,49 @@
 	return visible;
 }
 
-static char *enum_as_string(EnumPropertyItem *item)
+static void panel_draw(const bContext *C, Panel *pnl)
 {
-	DynStr *dynstr= BLI_dynstr_new();
-	EnumPropertyItem *e;
-	char *cstring;
+	PointerRNA ptr;
+	ParameterList *list;
+	FunctionRNA *func;
 
-	for (e= item; item->identifier; item++) {
-		BLI_dynstr_appendf(dynstr, (e==item)?"'%s'":", '%s'", item->identifier);
-	}
+	RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->py_srna, pnl, &ptr);
+	func= RNA_struct_find_function(&ptr, "draw");
 
-	cstring = BLI_dynstr_get_cstring(dynstr);
-	BLI_dynstr_free(dynstr);
-	return cstring;
+	list= RNA_parameter_list_create(&ptr, func);
+	RNA_parameter_set_lookup(list, "context", &C);
+	pnl->type->py_call(&ptr, func, list);
+
+	RNA_parameter_list_free(list);
 }
 
-static int space_region_type_from_panel(PanelType *pt, ReportList *reports, SpaceType **r_st, ARegionType **r_art)
+static void rna_Panel_unregister(const bContext *C, StructRNA *type)
 {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list