[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24032] trunk/blender: Outliner: Tweaks for Driver Operators

Joshua Leung aligorith at gmail.com
Wed Oct 21 07:59:51 CEST 2009


Revision: 24032
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24032
Author:   aligorith
Date:     2009-10-21 07:59:51 +0200 (Wed, 21 Oct 2009)

Log Message:
-----------
Outliner: Tweaks for Driver Operators

* Driver adding/removing operators in the Outliner now work properly for arrays
* Renamed these operators so that their names are more indicative of how they work (i.e. based on the data in the Outliner that is selected)
* Added a menu labelled 'Edit' in the Datablocks view which gives access to (and includes the hotkeys for) these tools.

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_outliner.py
    trunk/blender/source/blender/editors/space_outliner/outliner.c
    trunk/blender/source/blender/editors/space_outliner/outliner_intern.h
    trunk/blender/source/blender/editors/space_outliner/outliner_ops.c

Modified: trunk/blender/release/scripts/ui/space_outliner.py
===================================================================
--- trunk/blender/release/scripts/ui/space_outliner.py	2009-10-21 00:33:08 UTC (rev 24031)
+++ trunk/blender/release/scripts/ui/space_outliner.py	2009-10-21 05:59:51 UTC (rev 24032)
@@ -17,6 +17,8 @@
 		if context.area.show_menus:
 			sub = row.row(align=True)
 			sub.itemM("OUTLINER_MT_view")
+			if space.display_mode == 'DATABLOCKS':
+				sub.itemM("OUTLINER_MT_edit_datablocks")
 
 		layout.itemR(space, "display_mode", text="")
 		
@@ -26,13 +28,16 @@
 			row = layout.row(align=True)
 			row.itemO("outliner.keyingset_add_selected", icon='ICON_ZOOMIN', text="")
 			row.itemO("outliner.keyingset_remove_selected", icon='ICON_ZOOMOUT', text="")
+			
 			if ks:
+				row = layout.row(align=False)
 				row.item_pointerR(scene, "active_keying_set", scene, "keying_sets", text="")
 				
 				row = layout.row(align=True)
 				row.itemO("anim.insert_keyframe", text="", icon='ICON_KEY_HLT')
 				row.itemO("anim.delete_keyframe", text="", icon='ICON_KEY_DEHLT')
 			else:
+				row = layout.row(align=False)
 				row.itemL(text="No Keying Set active")
 
 class OUTLINER_MT_view(bpy.types.Menu):
@@ -51,6 +56,23 @@
 
 		col.itemO("outliner.show_one_level")
 		col.itemO("outliner.show_hierarchy")
+		
+class OUTLINER_MT_edit_datablocks(bpy.types.Menu):
+	__label__ = "Edit"
+	
+	def draw(self, context):
+		layout = self.layout
+		
+		col = layout.column()
 
+		col.itemO("outliner.keyingset_add_selected")
+		col.itemO("outliner.keyingset_remove_selected")
+		
+		col.itemS()
+		
+		col.itemO("outliner.drivers_add_selected")
+		col.itemO("outliner.drivers_delete_selected")
+
 bpy.types.register(OUTLINER_HT_header)
 bpy.types.register(OUTLINER_MT_view)
+bpy.types.register(OUTLINER_MT_edit_datablocks)

Modified: trunk/blender/source/blender/editors/space_outliner/outliner.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner.c	2009-10-21 00:33:08 UTC (rev 24031)
+++ trunk/blender/source/blender/editors/space_outliner/outliner.c	2009-10-21 05:59:51 UTC (rev 24032)
@@ -3771,21 +3771,39 @@
 			}
 			
 			/* only if ID and path were set, should we perform any actions */
+			// FIXME: if whole array flag is set, mus add the entire array
 			if (id && path) {
-				/* action depends on mode */
-				switch (mode) {
-					case DRIVERS_EDITMODE_ADD:
-					{
-						/* add a new driver with the information obtained (only if valid) */
-						ANIM_add_driver(id, path, array_index, flag, DRIVER_TYPE_AVERAGE);
+				int arraylen, i;
+				
+				/* array checks */
+				if (flag & KSP_FLAG_WHOLE_ARRAY) {
+					/* entire array was selected, so add drivers for all */
+					arraylen= RNA_property_array_length(&te->rnaptr, te->directdata);
+				}
+				else
+					arraylen= array_index;
+				
+				/* we should do at least one step */
+				if (arraylen == array_index)
+					arraylen++;
+				
+				/* for each array element we should affect, add driver */
+				for (; array_index < arraylen; array_index++) {
+					/* action depends on mode */
+					switch (mode) {
+						case DRIVERS_EDITMODE_ADD:
+						{
+							/* add a new driver with the information obtained (only if valid) */
+							ANIM_add_driver(id, path, array_index, flag, DRIVER_TYPE_PYTHON);
+						}
+							break;
+						case DRIVERS_EDITMODE_REMOVE:
+						{
+							/* remove driver matching the information obtained (only if valid) */
+							ANIM_remove_driver(id, path, array_index, flag);
+						}
+							break;
 					}
-						break;
-					case DRIVERS_EDITMODE_REMOVE:
-					{
-						/* remove driver matching the information obtained (only if valid) */
-						ANIM_remove_driver(id, path, array_index, flag);
-					}
-						break;
 				}
 				
 				/* free path, since it had to be generated */
@@ -3815,16 +3833,16 @@
 	do_outliner_drivers_editop(soutliner, &soutliner->tree, DRIVERS_EDITMODE_ADD);
 	
 	/* send notifiers */
-	WM_event_add_notifier(C, NC_SCENE|ND_KEYINGSET, NULL);
+	WM_event_add_notifier(C, ND_KEYS, NULL); // XXX
 	
 	return OPERATOR_FINISHED;
 }
 
-void OUTLINER_OT_drivers_add(wmOperatorType *ot)
+void OUTLINER_OT_drivers_add_selected(wmOperatorType *ot)
 {
 	/* api callbacks */
-	ot->idname= "OUTLINER_OT_drivers_add";
-	ot->name= "Add Drivers";
+	ot->idname= "OUTLINER_OT_drivers_add_selected";
+	ot->name= "Add Drivers for Selected";
 	ot->description= "Add drivers to selected items.";
 	
 	/* api callbacks */
@@ -3850,16 +3868,16 @@
 	do_outliner_drivers_editop(soutliner, &soutliner->tree, DRIVERS_EDITMODE_REMOVE);
 	
 	/* send notifiers */
-	WM_event_add_notifier(C, NC_SCENE|ND_KEYINGSET, NULL);
+	WM_event_add_notifier(C, ND_KEYS, NULL); // XXX
 	
 	return OPERATOR_FINISHED;
 }
 
-void OUTLINER_OT_drivers_delete(wmOperatorType *ot)
+void OUTLINER_OT_drivers_delete_selected(wmOperatorType *ot)
 {
 	/* identifiers */
-	ot->idname= "OUTLINER_OT_drivers_delete";
-	ot->name= "Delete Drivers";
+	ot->idname= "OUTLINER_OT_drivers_delete_selected";
+	ot->name= "Delete Drivers for Selected";
 	ot->description= "Delete drivers assigned to selected items.";
 	
 	/* api callbacks */

Modified: trunk/blender/source/blender/editors/space_outliner/outliner_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner_intern.h	2009-10-21 00:33:08 UTC (rev 24031)
+++ trunk/blender/source/blender/editors/space_outliner/outliner_intern.h	2009-10-21 05:59:51 UTC (rev 24032)
@@ -143,8 +143,8 @@
 void OUTLINER_OT_keyingset_add_selected(struct wmOperatorType *ot);
 void OUTLINER_OT_keyingset_remove_selected(struct wmOperatorType *ot);
 
-void OUTLINER_OT_drivers_add(struct wmOperatorType *ot);
-void OUTLINER_OT_drivers_delete(struct wmOperatorType *ot);
+void OUTLINER_OT_drivers_add_selected(struct wmOperatorType *ot);
+void OUTLINER_OT_drivers_delete_selected(struct wmOperatorType *ot);
 
 #if 0
 extern void outliner_mouse_event(Scene *scene, ARegion *ar, SpaceOops *soops, short event);

Modified: trunk/blender/source/blender/editors/space_outliner/outliner_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner_ops.c	2009-10-21 00:33:08 UTC (rev 24031)
+++ trunk/blender/source/blender/editors/space_outliner/outliner_ops.c	2009-10-21 05:59:51 UTC (rev 24032)
@@ -70,8 +70,8 @@
 	WM_operatortype_append(OUTLINER_OT_keyingset_add_selected);
 	WM_operatortype_append(OUTLINER_OT_keyingset_remove_selected);
 	
-	WM_operatortype_append(OUTLINER_OT_drivers_add);
-	WM_operatortype_append(OUTLINER_OT_drivers_delete);
+	WM_operatortype_append(OUTLINER_OT_drivers_add_selected);
+	WM_operatortype_append(OUTLINER_OT_drivers_delete_selected);
 }
 
 void outliner_keymap(wmKeyConfig *keyconf)
@@ -110,7 +110,7 @@
 	WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe", IKEY, KM_PRESS, 0, 0);
 	WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe", IKEY, KM_PRESS, KM_ALT, 0);
 	
-	WM_keymap_verify_item(keymap, "OUTLINER_OT_drivers_add", DKEY, KM_PRESS, 0, 0);
-	WM_keymap_verify_item(keymap, "OUTLINER_OT_drivers_delete", DKEY, KM_PRESS, KM_ALT, 0);
+	WM_keymap_verify_item(keymap, "OUTLINER_OT_drivers_add_selected", DKEY, KM_PRESS, 0, 0);
+	WM_keymap_verify_item(keymap, "OUTLINER_OT_drivers_delete_selected", DKEY, KM_PRESS, KM_ALT, 0);
 }
 





More information about the Bf-blender-cvs mailing list