[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28855] trunk/blender/source/blender: Logic UI and Operators: adjusts on Layout + copy properties operator + fix on copy logic bricks operator (and moved to OBJECT_OT)

Dalai Felinto dfelinto at gmail.com
Wed May 19 11:40:46 CEST 2010


Revision: 28855
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28855
Author:   dfelinto
Date:     2010-05-19 11:40:45 +0200 (Wed, 19 May 2010)

Log Message:
-----------
Logic UI and Operators: adjusts on Layout + copy properties operator + fix on copy logic bricks operator (and moved to OBJECT_OT)

* adjusts on Layout:
 - in order to avoid much changes when copying Logics, it's nice to have the logic s/c/a always displaying even though it's not valid (e.g. edit mesh used from a camera object).
Now a message shows in the s/c/a alerting to the problem.

* logic operators under OBJECT_OT - copy properties and logics

Matt, is it possible to have the object game properties listed as a submenu from "Copy Properties" ?
So from the "Copy Game Property" menu we would have three options:
"Copy a property" -> (submenu) prop1, prop2, prop3 
"Replace all Properties"
"Merge all Properties"

For the current task list in Logic Editor:
http://www.pasteall.org/13245

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_edit.c
    trunk/blender/source/blender/editors/object/object_intern.h
    trunk/blender/source/blender/editors/object/object_ops.c
    trunk/blender/source/blender/editors/space_logic/logic_ops.c
    trunk/blender/source/blender/editors/space_logic/logic_window.c
    trunk/blender/source/blender/makesrna/intern/rna_actuator.c
    trunk/blender/source/blender/makesrna/intern/rna_sensor.c

Modified: trunk/blender/source/blender/editors/object/object_edit.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_edit.c	2010-05-19 09:22:24 UTC (rev 28854)
+++ trunk/blender/source/blender/editors/object/object_edit.c	2010-05-19 09:40:45 UTC (rev 28855)
@@ -30,6 +30,7 @@
 #include <time.h>
 #include <float.h>
 #include <ctype.h>
+#include <stddef.h> //for offsetof
 
 #include "MEM_guardedalloc.h"
 
@@ -104,6 +105,7 @@
 
 /* for menu/popup icons etc etc*/
 
+#include "UI_interface.h"
 #include "WM_api.h"
 #include "WM_types.h"
 
@@ -1098,6 +1100,7 @@
  
 static void copymenu_properties(Scene *scene, View3D *v3d, Object *ob)
 {	
+//XXX no longer used - to be removed - replaced by game_properties_copy_exec
 	bProperty *prop;
 	Base *base;
 	int nr, tot=0;
@@ -1156,6 +1159,7 @@
 
 static void copymenu_logicbricks(Scene *scene, View3D *v3d, Object *ob)
 {
+//XXX no longer used - to be removed - replaced by logicbricks_copy_exec
 	Base *base;
 	
 	for(base= FIRSTBASE; base; base= base->next) {
@@ -2203,3 +2207,166 @@
 
 	RNA_def_int(ot->srna, "index", 0, 0, INT_MAX, "Index", "Property index to remove ", 0, INT_MAX);
 }
+static EnumPropertyItem game_properties_copy_types[] ={
+	{1, "REPLACE", 0, "Replace Properties", ""},
+	{2, "MERGE", 0, "Merge Properties", ""},
+	{3, "CLEAR", 0, "Clear All", ""},
+	{4, "COPY", 0, "Copy a Property", ""},
+	{0, NULL, 0, NULL, NULL}};
+
+static int game_property_copy_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+	Object *ob= CTX_data_active_object(C);
+	bProperty *prop;	
+	int tot=0;
+	uiPopupMenu *pup;
+	uiLayout *menu;
+
+	/* count number of available properties */	
+	prop= ob->prop.first;
+	while(prop) {
+		tot++;
+		prop= prop->next;
+	}
+
+	/* start building */
+	pup= uiPupMenuBegin(C, op->type->name, 0);
+	menu= uiPupMenuLayout(pup);
+	uiLayoutSetOperatorContext(menu, WM_OP_EXEC_DEFAULT);
+
+	if(!tot)
+		uiItemEnumO(menu, "OBJECT_OT_game_property_copy", NULL, 0, "type", 3);//CLEAR);
+	else {
+		uiItemEnumO(menu, "OBJECT_OT_game_property_copy", NULL, 0, "type", 1);//REPLACE);
+		uiItemEnumO(menu, "OBJECT_OT_game_property_copy", NULL, 0, "type", 2);//MERGE);
+
+		//Menu Separator
+		uiItemL(menu, "Copy a Property", 0);
+
+		prop= ob->prop.first;
+		while(prop) {
+			uiItemStringO(menu, prop->name, 0, "OBJECT_OT_game_property_copy", "property", prop->name);
+			prop= prop->next;
+		}
+	}
+	uiPupMenuEnd(C, pup);
+
+	/* this operator is only for a menu, not used further */
+	return OPERATOR_CANCELLED;
+}
+
+static int game_property_copy_exec(bContext *C, wmOperator *op)
+{
+	Object *ob=ED_object_active_context(C);
+	bProperty *prop;
+	char prop_name[32];
+
+	int type = RNA_enum_get(op->ptr, "type");
+	RNA_string_get(op->ptr, "property", prop_name);
+
+	if ( type == 1 || type == 2 || type == 3) {
+		CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) {
+			if (ob != ob_iter) {
+				if (ob->data != ob_iter->data){
+					if (type == 2) {/* merge */
+						for(prop = ob->prop.first; prop; prop= prop->next ) {
+							set_ob_property(ob_iter, prop);
+						}
+					} else /* replace or clear */
+						copy_properties( &ob_iter->prop, &ob->prop );
+				}
+			}
+		}
+		CTX_DATA_END;
+	}
+	else if(strlen(prop_name) > 0) { /* copy */
+		prop = (bProperty *) BLI_findstring(&ob->prop, prop_name, offsetof(bProperty, name));
+		
+		if(prop) {
+			CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) {
+				if (ob != ob_iter) {
+					if (ob->data != ob_iter->data)
+						set_ob_property(ob_iter, prop);
+				}
+			} CTX_DATA_END;
+		}
+	}
+	return OPERATOR_FINISHED;
+}
+
+void OBJECT_OT_game_property_copy(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Copy Game Property";
+	ot->idname= "OBJECT_OT_game_property_copy";
+
+	/* api callbacks */
+	ot->invoke= game_property_copy_invoke;
+	ot->exec= game_property_copy_exec;
+	ot->poll= ED_operator_object_active_editable;
+
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+	RNA_def_enum(ot->srna, "type", game_properties_copy_types, 4, "Operation", "");
+	RNA_def_string(ot->srna, "property", "", 32, "Name", "Name of the property to copy");
+}
+
+/************************ Copy Logic Bricks ***********************/
+
+static int logicbricks_copy_exec(bContext *C, wmOperator *op)
+{
+	Object *ob=ED_object_active_context(C);
+
+	CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) {
+		if(ob != ob_iter) {
+			if (ob->data != ob_iter->data){
+				/* first: free all logic */
+				free_sensors(&ob_iter->sensors);				
+				unlink_controllers(&ob_iter->controllers);
+				free_controllers(&ob_iter->controllers);
+				unlink_actuators(&ob_iter->actuators);
+				free_actuators(&ob_iter->actuators);
+			
+				/* now copy it, this also works without logicbricks! */
+				clear_sca_new_poins_ob(ob);
+				copy_sensors(&ob_iter->sensors, &ob->sensors);
+				copy_controllers(&ob_iter->controllers, &ob->controllers);
+				copy_actuators(&ob_iter->actuators, &ob->actuators);
+				set_sca_new_poins_ob(ob_iter);
+			
+				/* some menu settings */
+				ob_iter->scavisflag= ob->scavisflag;
+				ob_iter->scaflag= ob->scaflag;
+			
+				/* set the initial state */
+				ob_iter->state= ob->state;
+				ob_iter->init_state= ob->init_state;
+			}			
+			if(ob_iter->totcol==ob->totcol) {
+				ob_iter->actcol= ob->actcol;
+				WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob_iter);
+			}
+		}
+	}
+	CTX_DATA_END;
+
+	WM_event_add_notifier(C, NC_LOGIC, NULL);
+
+	return OPERATOR_FINISHED;
+}
+
+void OBJECT_OT_logic_bricks_copy(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Copy Logic Bricks to Selected";
+	ot->description = "Copy logic bricks to other selected objects.";
+	ot->idname= "OBJECT_OT_logic_bricks_copy";
+
+	/* api callbacks */
+	ot->exec= logicbricks_copy_exec;
+	ot->poll= ED_operator_object_active_editable;
+
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}

Modified: trunk/blender/source/blender/editors/object/object_intern.h
===================================================================
--- trunk/blender/source/blender/editors/object/object_intern.h	2010-05-19 09:22:24 UTC (rev 28854)
+++ trunk/blender/source/blender/editors/object/object_intern.h	2010-05-19 09:40:45 UTC (rev 28855)
@@ -85,6 +85,11 @@
 void OBJECT_OT_paths_calculate(struct wmOperatorType *ot);
 void OBJECT_OT_paths_clear(struct wmOperatorType *ot);
 
+void OBJECT_OT_game_property_new(struct wmOperatorType *ot);
+void OBJECT_OT_game_property_remove(struct wmOperatorType *ot);
+void OBJECT_OT_game_property_copy(struct wmOperatorType *ot);
+void OBJECT_OT_logic_bricks_copy(struct wmOperatorType *ot);
+
 /* object_select.c */
 void OBJECT_OT_select_all(struct wmOperatorType *ot);
 void OBJECT_OT_select_inverse(struct wmOperatorType *ot);
@@ -201,9 +206,6 @@
 void OBJECT_OT_vertex_group_sort(struct wmOperatorType *ot);
 void OBJECT_OT_vertex_group_move(struct wmOperatorType *ot);
 
-void OBJECT_OT_game_property_new(struct wmOperatorType *ot);
-void OBJECT_OT_game_property_remove(struct wmOperatorType *ot);
-
 /* object_shapekey.c */
 void OBJECT_OT_shape_key_add(struct wmOperatorType *ot);
 void OBJECT_OT_shape_key_remove(struct wmOperatorType *ot);

Modified: trunk/blender/source/blender/editors/object/object_ops.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_ops.c	2010-05-19 09:22:24 UTC (rev 28854)
+++ trunk/blender/source/blender/editors/object/object_ops.c	2010-05-19 09:40:45 UTC (rev 28855)
@@ -183,6 +183,8 @@
 
 	WM_operatortype_append(OBJECT_OT_game_property_new);
 	WM_operatortype_append(OBJECT_OT_game_property_remove);
+	WM_operatortype_append(OBJECT_OT_game_property_copy);
+	WM_operatortype_append(OBJECT_OT_logic_bricks_copy);
 
 	WM_operatortype_append(OBJECT_OT_shape_key_add);
 	WM_operatortype_append(OBJECT_OT_shape_key_remove);

Modified: trunk/blender/source/blender/editors/space_logic/logic_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_logic/logic_ops.c	2010-05-19 09:22:24 UTC (rev 28854)
+++ trunk/blender/source/blender/editors/space_logic/logic_ops.c	2010-05-19 09:40:45 UTC (rev 28855)
@@ -533,48 +533,6 @@
 	prop= RNA_def_string(ot->srna, "name", "", 32, "Name", "Name of the Actuator to add");
 }
 
-/* Copy Routines */
-
-static int logicbricks_copy_exec(bContext *C, wmOperator *op)
-{
-	Object *ob=ED_object_active_context(C);
-
-	CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) {
-		if(ob != ob_iter) {
-			if (ob->data != ob_iter->data){
-				copy_sensors(&ob_iter->sensors, &ob->sensors);
-				copy_controllers(&ob_iter->controllers, &ob->controllers);
-				copy_actuators(&ob_iter->actuators, &ob->actuators);
-			}
-			
-			if(ob_iter->totcol==ob->totcol) {
-				ob_iter->actcol= ob->actcol;
-				WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob_iter);
-			}
-		}
-	}
-	CTX_DATA_END;
-
-	WM_event_add_notifier(C, NC_LOGIC, NULL);
-
-	return OPERATOR_FINISHED;
-}
-
-void LOGIC_OT_bricks_copy(wmOperatorType *ot)
-{
-	/* identifiers */
-	ot->name= "Copy Logic Bricks to Selected";
-	ot->description = "Copy logic bricks to other selected objects.";
-	ot->idname= "LOGIC_OT_bricks_copy";
-
-	/* api callbacks */
-	ot->exec= logicbricks_copy_exec;
-	ot->poll= ED_operator_object_active_editable;
-
-	/* flags */
-	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
-}
-
 void ED_operatortypes_logic(void)
 {
 	WM_operatortype_append(LOGIC_OT_sensor_remove);
@@ -583,5 +541,4 @@
 	WM_operatortype_append(LOGIC_OT_controller_add);
 	WM_operatortype_append(LOGIC_OT_actuator_remove);
 	WM_operatortype_append(LOGIC_OT_actuator_add);
-	WM_operatortype_append(LOGIC_OT_bricks_copy);
 }

Modified: trunk/blender/source/blender/editors/space_logic/logic_window.c
===================================================================
--- trunk/blender/source/blender/editors/space_logic/logic_window.c	2010-05-19 09:22:24 UTC (rev 28854)
+++ trunk/blender/source/blender/editors/space_logic/logic_window.c	2010-05-19 09:40:45 UTC (rev 28855)
@@ -3224,6 +3224,11 @@
 	PropertyRNA *bones_prop;
 	uiLayout *row;
 
+	if(ob->type != OB_ARMATURE){
+		uiItemL(layout, "Sensor only available for armatures", 0);
+		return;
+	}
+
 	if (ob->pose) {
 		RNA_pointer_create((ID *)ob, &RNA_Pose, ob->pose, &pose_ptr);
 		bones_prop = RNA_struct_find_property(&pose_ptr, "bones");
@@ -3588,6 +3593,10 @@
 	PointerRNA settings_ptr;
 	uiLayout *row;
 
+	if(ob->type != OB_ARMATURE){

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list