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

Brecht Van Lommel brecht at blender.org
Fri Nov 21 20:14:40 CET 2008


Revision: 17531
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17531
Author:   blendix
Date:     2008-11-21 20:14:38 +0100 (Fri, 21 Nov 2008)

Log Message:
-----------
RNA

* Added RNA for operators. This still uses ID properties internally,
  but through the RNA API now. The OP_get/set_* API that was used is
  replaced by the RNA API. Currently RNA properties for operators are
  defined at runtime since it means operator registration can be done
  in a single function.
* Changed the existing operators to use this system, I haven't defined
  user interface names yet though. I also think there need to be some
  conventions on which properties to expose to make these operators
  usable in macros, for example if mouse coordinates should be stored
  or not.
* When using ID properties through defined RNA properties, it now
  checks that the ID property actually matches the RNA property and
  removes/overwrites it otherwise. This ensures that you can safely
  get/set arrays for example without having to worry that some
  external thing may have changed the length.
* Documentation now has some information on RNA + ID properties.

http://wiki.blender.org/index.php/BlenderDev/Blender2.5/RNA

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/screen/Makefile
    branches/blender2.5/blender/source/blender/editors/screen/SConscript
    branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/space_outliner.c
    branches/blender2.5/blender/source/blender/editors/space_time/Makefile
    branches/blender2.5/blender/source/blender/editors/space_time/SConscript
    branches/blender2.5/blender/source/blender/editors/space_time/time_ops.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c
    branches/blender2.5/blender/source/blender/windowmanager/SConscript
    branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/Makefile
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_init_exit.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: branches/blender2.5/blender/source/blender/editors/screen/Makefile
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/Makefile	2008-11-21 18:01:12 UTC (rev 17530)
+++ branches/blender2.5/blender/source/blender/editors/screen/Makefile	2008-11-21 19:14:38 UTC (rev 17531)
@@ -44,6 +44,7 @@
 CPPFLAGS += -I../../blenkernel
 CPPFLAGS += -I../../blenlib
 CPPFLAGS += -I../../makesdna
+CPPFLAGS += -I../../makesrna
 CPPFLAGS += -I../../imbuf
 CPPFLAGS += -I../../python
 CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include

Modified: branches/blender2.5/blender/source/blender/editors/screen/SConscript
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/SConscript	2008-11-21 18:01:12 UTC (rev 17530)
+++ branches/blender2.5/blender/source/blender/editors/screen/SConscript	2008-11-21 19:14:38 UTC (rev 17531)
@@ -4,7 +4,7 @@
 sources = env.Glob('*.c')
 
 incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
-incs += ' ../../blenloader ../../windowmanager ../../python'
+incs += ' ../../blenloader ../../windowmanager ../../python ../../makesrna'
 incs += ' #/intern/guardedalloc #/extern/glew/include'
 
 env.BlenderLib ( 'bf_editors_screen', sources, Split(incs), [], libtype=['core','intern'], priority=[30, 35] )

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2008-11-21 18:01:12 UTC (rev 17530)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2008-11-21 19:14:38 UTC (rev 17531)
@@ -42,6 +42,9 @@
 #include "ED_screen.h"
 #include "ED_screen_types.h"
 
+#include "RNA_access.h"
+#include "RNA_define.h"
+
 #include "screen_intern.h"	/* own module include */
 
 /* ************** Exported Poll tests ********************** */
@@ -463,12 +466,9 @@
 	int x, y;
 
 	/* required properties */
-	if(!(OP_get_int(op, "x", &x) && OP_get_int(op, "y", &y)))
-		return 0;
+	x= RNA_int_get(op->rna, "x");
+	y= RNA_int_get(op->rna, "y");
 
-	/* default properties */
-	OP_verify_int(op, "delta", 0, NULL);
-
 	/* setup */
 	actedge= screen_find_active_scredge(C->screen, x, y);
 	if(actedge==NULL) return 0;
@@ -523,7 +523,7 @@
 	sAreaMoveData *md= op->customdata;
 	int delta;
 	
-	OP_get_int(op, "delta", &delta);
+	delta= RNA_int_get(op->rna, "delta");
 	area_move_apply_do(C, md->origval, delta, md->dir, md->bigger, md->smaller);
 }
 
@@ -552,8 +552,8 @@
 /* interaction callback */
 static int area_move_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
-	OP_verify_int(op, "x", event->x, NULL);
-	OP_verify_int(op, "y", event->y, NULL);
+	RNA_int_default(op->rna, "x", event->x);
+	RNA_int_default(op->rna, "y", event->y);
 
 	if(!area_move_init(C, op)) 
 		return OPERATOR_PASS_THROUGH;
@@ -568,7 +568,7 @@
 {
 	WM_event_remove_modal_handler(&C->window->handlers, op);				
 
-	OP_set_int(op, "delta", 0);
+	RNA_int_set(op->rna, "delta", 0);
 	area_move_apply(C, op);
 	area_move_exit(C, op);
 
@@ -583,14 +583,14 @@
 
 	md= op->customdata;
 
-	OP_get_int(op, "x", &x);
-	OP_get_int(op, "y", &y);
+	x= RNA_int_get(op->rna, "x");
+	y= RNA_int_get(op->rna, "y");
 
 	/* execute the events */
 	switch(event->type) {
 		case MOUSEMOVE:
 			delta= (md->dir == 'v')? event->x - x: event->y - y;
-			OP_set_int(op, "delta", delta);
+			RNA_int_set(op->rna, "delta", delta);
 
 			area_move_apply(C, op);
 			break;
@@ -612,6 +612,8 @@
 
 void ED_SCR_OT_area_move(wmOperatorType *ot)
 {
+	PropertyRNA *prop;
+
 	/* identifiers */
 	ot->name= "Move area edges";
 	ot->idname= "ED_SCR_OT_area_move";
@@ -622,6 +624,11 @@
 	ot->modal= area_move_modal;
 
 	ot->poll= ED_operator_screen_mainwinactive; /* when mouse is over area-edge */
+
+	/* rna */
+	prop= RNA_def_property(ot->rna, "x", PROP_INT, PROP_NONE);
+	prop= RNA_def_property(ot->rna, "y", PROP_INT, PROP_NONE);
+	prop= RNA_def_property(ot->rna, "delta", PROP_INT, PROP_NONE);
 }
 
 /* ************** split area operator *********************************** */
@@ -687,8 +694,7 @@
 	if(C->area==NULL) return 0;
 	
 	/* required properties */
-	OP_verify_float(op, "fac", 0.5f, NULL);
-	OP_verify_int(op, "dir", 'h', &dir);
+	dir= RNA_enum_get(op->rna, "dir");
 	
 	/* minimal size */
 	if(dir=='v' && C->area->winx < 2*AREAMINX) return 0;
@@ -740,8 +746,8 @@
 	float fac;
 	int dir;
 	
-	OP_get_float(op, "fac", &fac);
-	OP_get_int(op, "dir", &dir);
+	fac= RNA_float_get(op->rna, "fac");
+	dir= RNA_enum_get(op->rna, "dir");
 
 	sd->narea= area_split(C->window, C->screen, sd->sarea, dir, fac);
 	
@@ -801,13 +807,13 @@
 		/* prepare operator state vars */
 		if(sad->gesture_dir==AZONE_N || sad->gesture_dir==AZONE_S) {
 			dir= 'h';
-			OP_set_float(op, "fac", ((float)(event->x - sad->sa1->v1->vec.x)) / (float)sad->sa1->winx);
+			RNA_float_set(op->rna, "fac", ((float)(event->x - sad->sa1->v1->vec.x)) / (float)sad->sa1->winx);
 		}
 		else {
 			dir= 'v';
-			OP_set_float(op, "fac", ((float)(event->y - sad->sa1->v1->vec.y)) / (float)sad->sa1->winy);
+			RNA_float_set(op->rna, "fac", ((float)(event->y - sad->sa1->v1->vec.y)) / (float)sad->sa1->winy);
 		}
-		OP_set_int(op, "dir", dir);
+		RNA_enum_set(op->rna, "dir", dir);
 
 		/* general init, also non-UI case, adds customdata, sets area and defaults */
 		if(!area_split_init(C, op))
@@ -870,9 +876,8 @@
 	/* execute the events */
 	switch(event->type) {
 		case MOUSEMOVE:
+			dir= RNA_enum_get(op->rna, "dir");
 			
-			OP_get_int(op, "dir", &dir);
-			
 			sd->delta= (dir == 'v')? event->x - sd->origval: event->y - sd->origval;
 			area_move_apply_do(C, sd->origval, sd->delta, dir, sd->bigger, sd->smaller);
 			
@@ -896,6 +901,9 @@
 
 void ED_SCR_OT_area_split(wmOperatorType *ot)
 {
+	PropertyRNA *prop;
+    static EnumPropertyItem prop_direction_items[] = {{'h', "HORIZONTAL", "Horizontal"}, {'v', "VERTICAL", "Vertical"}, {0, NULL, NULL}};
+
 	ot->name = "Split area";
 	ot->idname = "ED_SCR_OT_area_split";
 	
@@ -904,6 +912,15 @@
 	ot->modal= area_split_modal;
 	
 	ot->poll= ED_operator_screenactive; /* XXX should be area active */
+
+	/* rna */
+	prop= RNA_def_property(ot->rna, "dir", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_items(prop, prop_direction_items);
+	RNA_def_property_enum_default(prop, 'h');
+
+	prop= RNA_def_property(ot->rna, "fac", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_range(prop, 0.0, 1.0);
+	RNA_def_property_float_default(prop, 0.5f);
 }
 
 /* ************** join area operator ********************************************** */
@@ -956,10 +973,10 @@
 	int x2, y2;
 
 	/* required properties, make negative to get return 0 if not set by caller */
-	OP_verify_int(op, "x1", -100, &x1);
-	OP_verify_int(op, "y1", -100, &y1);
-	OP_verify_int(op, "x2", -100, &x2);
-	OP_verify_int(op, "y2", -100, &y2);
+	x1= RNA_int_get(op->rna, "x1");
+	y1= RNA_int_get(op->rna, "y1");
+	x2= RNA_int_get(op->rna, "x2");
+	y2= RNA_int_get(op->rna, "y2");
 	
 	sa1 = screen_areahascursor(C->screen, x1, y1);
 	sa2 = screen_areahascursor(C->screen, x2, y2);
@@ -1035,10 +1052,10 @@
 			return OPERATOR_PASS_THROUGH;
 		
 		/* prepare operator state vars */
-		OP_set_int(op, "x1", sad->x);
-		OP_set_int(op, "y1", sad->y);
-		OP_set_int(op, "x2", event->x);
-		OP_set_int(op, "y2", event->y);
+		RNA_int_set(op->rna, "x1", sad->x);
+		RNA_int_set(op->rna, "y1", sad->y);
+		RNA_int_set(op->rna, "x2", event->x);
+		RNA_int_set(op->rna, "y2", event->y);
 
 		if(!area_join_init(C, op)) 
 			return OPERATOR_PASS_THROUGH;
@@ -1163,6 +1180,8 @@
 /* Operator for joining two areas (space types) */
 void ED_SCR_OT_area_join(wmOperatorType *ot)
 {
+	PropertyRNA *prop;
+
 	/* identifiers */
 	ot->name= "Join area";
 	ot->idname= "ED_SCR_OT_area_join";
@@ -1173,6 +1192,16 @@
 	ot->modal= area_join_modal;
 
 	ot->poll= ED_operator_screenactive;
+
+	/* rna */
+	prop= RNA_def_property(ot->rna, "x1", PROP_INT, PROP_NONE);
+	RNA_def_property_int_default(prop, -100);
+	prop= RNA_def_property(ot->rna, "y1", PROP_INT, PROP_NONE);
+	RNA_def_property_int_default(prop, -100);
+	prop= RNA_def_property(ot->rna, "x2", PROP_INT, PROP_NONE);
+	RNA_def_property_int_default(prop, -100);
+	prop= RNA_def_property(ot->rna, "y2", PROP_INT, PROP_NONE);
+	RNA_def_property_int_default(prop, -100);
 }
 
 /* ************** border select operator (test only) ***************************** */

Modified: branches/blender2.5/blender/source/blender/editors/space_outliner/space_outliner.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_outliner/space_outliner.c	2008-11-21 18:01:12 UTC (rev 17530)
+++ branches/blender2.5/blender/source/blender/editors/space_outliner/space_outliner.c	2008-11-21 19:14:38 UTC (rev 17531)
@@ -511,6 +511,9 @@
 {
 	SpaceOops *soutliner= (SpaceOops *)sl;
 	SpaceOops *soutlinern= MEM_dupallocN(soutliner);
+
+	if(soutlinern->rnapath)
+		soutlinern->rnapath= MEM_dupallocN(soutlinern->rnapath);
 	
 	return (SpaceLink *)soutlinern;
 }

Modified: branches/blender2.5/blender/source/blender/editors/space_time/Makefile
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_time/Makefile	2008-11-21 18:01:12 UTC (rev 17530)
+++ branches/blender2.5/blender/source/blender/editors/space_time/Makefile	2008-11-21 19:14:38 UTC (rev 17531)
@@ -44,6 +44,7 @@
 CPPFLAGS += -I../../blenkernel
 CPPFLAGS += -I../../blenlib
 CPPFLAGS += -I../../makesdna
+CPPFLAGS += -I../../makesrna
 CPPFLAGS += -I../../imbuf
 CPPFLAGS += -I../../python
 CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include

Modified: branches/blender2.5/blender/source/blender/editors/space_time/SConscript
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_time/SConscript	2008-11-21 18:01:12 UTC (rev 17530)
+++ branches/blender2.5/blender/source/blender/editors/space_time/SConscript	2008-11-21 19:14:38 UTC (rev 17531)
@@ -4,6 +4,7 @@
 sources = env.Glob('*.c')
 
 incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
-incs += '../../windowmanager #/intern/guardedalloc #/extern/glew/include'
+incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
+incs += ' ../../makesrna'
 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list