[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27738] trunk/blender/source/blender: More assorted Keying Sets changes for Cessen (mainly api stuff):

Joshua Leung aligorith at gmail.com
Thu Mar 25 12:34:20 CET 2010


Revision: 27738
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27738
Author:   aligorith
Date:     2010-03-25 12:34:18 +0100 (Thu, 25 Mar 2010)

Log Message:
-----------
More assorted Keying Sets changes for Cessen (mainly api stuff):

* Added operator (Ctrl Shift Alt I) to show menu for changing the active Keying Set in the 3D view (todo item from last commit)

* KeyingSetInfo (i.e. the Builtin Keying Set classes) can now be accessed from Keying Set instances with  ks.type_info
* Added ks.remove_all_paths() function to remove all the paths for a Keying Set. 

---

These two changes mean that builtin Keying Sets could be refreshed in response to context changes by doing:
<code>
ks = bpy.context.scene.active_keying_set
if ks.absolute==False and ks.type_info:
    ksi = ks.type_info

    # remove existing paths to fill with new
    ks.remove_all_paths()

    # check if Keying Set can be used in current context
    if ksi.poll(bpy.context):
        # call iterator() which calls generate() and re-populates paths list
        ksi.iterator(bpy.context, ks) 
</code>

And then, once this has been done, the paths that the Keying Set will operate on can be accessed as
<code>
paths = bpy.context.scene.active_keying_set.paths
</code>

Modified Paths:
--------------
    trunk/blender/source/blender/editors/animation/anim_intern.h
    trunk/blender/source/blender/editors/animation/anim_ops.c
    trunk/blender/source/blender/editors/animation/keyframing.c
    trunk/blender/source/blender/editors/animation/keyingsets.c
    trunk/blender/source/blender/editors/armature/armature_ops.c
    trunk/blender/source/blender/editors/include/ED_keyframing.h
    trunk/blender/source/blender/editors/object/object_ops.c
    trunk/blender/source/blender/makesrna/intern/rna_animation.c
    trunk/blender/source/blender/makesrna/intern/rna_animation_api.c

Modified: trunk/blender/source/blender/editors/animation/anim_intern.h
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_intern.h	2010-03-25 10:43:55 UTC (rev 27737)
+++ trunk/blender/source/blender/editors/animation/anim_intern.h	2010-03-25 11:34:18 UTC (rev 27738)
@@ -65,6 +65,9 @@
 void ANIM_OT_keying_set_path_add(struct wmOperatorType *ot);
 void ANIM_OT_keying_set_path_remove(struct wmOperatorType *ot);
 
+/* KeyingSet general operators */
+void ANIM_OT_keying_set_active_set(struct wmOperatorType *ot);
+
 /* .......... */
 
 /* Driver management operators for UI buttons (RMB menu) */

Modified: trunk/blender/source/blender/editors/animation/anim_ops.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_ops.c	2010-03-25 10:43:55 UTC (rev 27737)
+++ trunk/blender/source/blender/editors/animation/anim_ops.c	2010-03-25 11:34:18 UTC (rev 27738)
@@ -361,6 +361,8 @@
 	WM_operatortype_append(ANIM_OT_keying_set_remove);
 	WM_operatortype_append(ANIM_OT_keying_set_path_add);
 	WM_operatortype_append(ANIM_OT_keying_set_path_remove);
+	
+	WM_operatortype_append(ANIM_OT_keying_set_active_set);
 }
 
 void ED_keymap_anim(wmKeyConfig *keyconf)

Modified: trunk/blender/source/blender/editors/animation/keyframing.c
===================================================================
--- trunk/blender/source/blender/editors/animation/keyframing.c	2010-03-25 10:43:55 UTC (rev 27737)
+++ trunk/blender/source/blender/editors/animation/keyframing.c	2010-03-25 11:34:18 UTC (rev 27738)
@@ -1144,52 +1144,9 @@
 
 /* Insert Key Operator (With Menu) ------------------------ */
 /* This operator checks if a menu should be shown for choosing the KeyingSet to use, 
- * then calls the  
+ * then calls the menu if necessary before 
  */
 
-static void insert_key_menu_prompt (bContext *C)
-{
-	Scene *scene= CTX_data_scene(C);
-	KeyingSet *ks;
-	uiPopupMenu *pup;
-	uiLayout *layout;
-	int i = 0;
-	
-	pup= uiPupMenuBegin(C, "Insert Keyframe", 0);
-	layout= uiPupMenuLayout(pup);
-	
-	/* active Keying Set 
-	 *	- only include entry if it exists
-	 */
-	if (scene->active_keyingset) {
-		uiItemIntO(layout, "Active Keying Set", 0, "ANIM_OT_keyframe_insert_menu", "type", i++);
-		uiItemS(layout);
-	}
-	else
-		i++;
-	
-	/* user-defined Keying Sets 
-	 *	- these are listed in the order in which they were defined for the active scene
-	 */
-	if (scene->keyingsets.first) {
-		for (ks= scene->keyingsets.first; ks; ks= ks->next) {
-			if (ANIM_keyingset_context_ok_poll(C, ks))
-				uiItemIntO(layout, ks->name, 0, "ANIM_OT_keyframe_insert_menu", "type", i++);
-		}
-		uiItemS(layout);
-	}
-	
-	/* builtin Keying Sets */
-	i= -1;
-	for (ks= builtin_keyingsets.first; ks; ks= ks->next) {
-		/* only show KeyingSet if context is suitable */
-		if (ANIM_keyingset_context_ok_poll(C, ks))
-			uiItemIntO(layout, ks->name, 0, "ANIM_OT_keyframe_insert_menu", "type", i--);
-	}
-	
-	uiPupMenuEnd(C, pup);
-} 
-
 static int insert_key_menu_invoke (bContext *C, wmOperator *op, wmEvent *event)
 {
 	Scene *scene= CTX_data_scene(C);
@@ -1197,7 +1154,7 @@
 	/* if prompting or no active Keying Set, show the menu */
 	if ((scene->active_keyingset == 0) || RNA_boolean_get(op->ptr, "always_prompt")) {
 		/* call the menu, which will call this operator again, hence the cancelled */
-		insert_key_menu_prompt(C);
+		ANIM_keying_sets_menu_setup(C, op->type->name, "ANIM_OT_keyframe_insert_menu");
 		return OPERATOR_CANCELLED;
 	}
 	else {

Modified: trunk/blender/source/blender/editors/animation/keyingsets.c
===================================================================
--- trunk/blender/source/blender/editors/animation/keyingsets.c	2010-03-25 10:43:55 UTC (rev 27737)
+++ trunk/blender/source/blender/editors/animation/keyingsets.c	2010-03-25 11:34:18 UTC (rev 27738)
@@ -45,6 +45,7 @@
 
 #include "BKE_animsys.h"
 #include "BKE_action.h"
+#include "BKE_context.h"
 #include "BKE_constraint.h"
 #include "BKE_depsgraph.h"
 #include "BKE_fcurve.h"
@@ -55,6 +56,7 @@
 #include "BKE_material.h"
 
 #include "ED_keyframing.h"
+#include "ED_screen.h"
 
 #include "UI_interface.h"
 
@@ -450,6 +452,55 @@
 }
 
 /* ******************************************* */
+
+/* Change Active KeyingSet Operator ------------------------ */
+/* This operator checks if a menu should be shown for choosing the KeyingSet to make the active one */
+
+static int keyingset_active_menu_invoke (bContext *C, wmOperator *op, wmEvent *event)
+{
+	/* call the menu, which will call this operator again, hence the cancelled */
+	ANIM_keying_sets_menu_setup(C, op->type->name, "ANIM_OT_keying_set_active_set");
+	return OPERATOR_CANCELLED;
+}
+
+static int keyingset_active_menu_exec (bContext *C, wmOperator *op)
+{
+	Scene *scene= CTX_data_scene(C);
+	int type= RNA_int_get(op->ptr, "type");
+	
+	/* simply set the scene's active keying set index, unless the type == 0 
+	 * (i.e. which happens if we want the current active to be maintained) 
+	 */
+	if (type)
+		scene->active_keyingset= type;
+		
+	/* send notifiers */
+	WM_event_add_notifier(C, NC_SCENE|ND_KEYINGSET, NULL);
+	
+	return OPERATOR_FINISHED;
+}
+ 
+void ANIM_OT_keying_set_active_set (wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Set Active Keying Set";
+	ot->idname= "ANIM_OT_keying_set_active_set";
+	
+	/* callbacks */
+	ot->invoke= keyingset_active_menu_invoke;
+	ot->exec= keyingset_active_menu_exec; 
+	ot->poll= ED_operator_areaactive;
+	
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+	
+	/* keyingset to use
+	 *	- here the type is int not enum, since many of the indicies here are determined dynamically
+	 */
+	RNA_def_int(ot->srna, "type", 0, INT_MIN, INT_MAX, "Keying Set Number", "Index (determined internally) of the Keying Set to use", 0, 1);
+}
+
+/* ******************************************* */
 /* REGISTERED KEYING SETS */
 
 /* Keying Set Type Info declarations */
@@ -569,6 +620,8 @@
 /* ******************************************* */
 /* KEYING SETS API (for UI) */
 
+/* Getters for Active/Indices ----------------------------- */
+
 /* Get the active Keying Set for the Scene provided */
 KeyingSet *ANIM_scene_get_active_keyingset (Scene *scene)
 {
@@ -617,6 +670,57 @@
 		return 0;
 }
 
+/* Menu of All Keying Sets ----------------------------- */
+
+/* Create (and show) a menu containing all the Keying Sets which can be used in the current context */
+void ANIM_keying_sets_menu_setup (bContext *C, char title[], char op_name[])
+{
+	Scene *scene= CTX_data_scene(C);
+	KeyingSet *ks;
+	uiPopupMenu *pup;
+	uiLayout *layout;
+	int i = 0;
+	
+	pup= uiPupMenuBegin(C, title, 0);
+	layout= uiPupMenuLayout(pup);
+	
+	/* active Keying Set 
+	 *	- only include entry if it exists
+	 */
+	if (scene->active_keyingset) {
+		uiItemIntO(layout, "Active Keying Set", 0, op_name, "type", i++);
+		uiItemS(layout);
+	}
+	else
+		i++;
+	
+	/* user-defined Keying Sets 
+	 *	- these are listed in the order in which they were defined for the active scene
+	 */
+	if (scene->keyingsets.first) {
+		for (ks= scene->keyingsets.first; ks; ks= ks->next) {
+			if (ANIM_keyingset_context_ok_poll(C, ks))
+				uiItemIntO(layout, ks->name, 0, op_name, "type", i++);
+		}
+		uiItemS(layout);
+	}
+	
+	/* builtin Keying Sets */
+	i= -1;
+	for (ks= builtin_keyingsets.first; ks; ks= ks->next) {
+		/* only show KeyingSet if context is suitable */
+		if (ANIM_keyingset_context_ok_poll(C, ks))
+			uiItemIntO(layout, ks->name, 0, op_name, "type", i--);
+	}
+	
+	uiPupMenuEnd(C, pup);
+} 
+
+/* ******************************************* */
+/* KEYFRAME MODIFICATION */
+
+/* Polling API ----------------------------------------------- */
+
 /* Check if KeyingSet can be used in the current context */
 short ANIM_keyingset_context_ok_poll (bContext *C, KeyingSet *ks)
 {
@@ -635,9 +739,6 @@
 	return 1;
 }
 
-/* ******************************************* */
-/* KEYFRAME MODIFICATION */
-
 /* Special 'Overrides' Iterator for Relative KeyingSets ------ */
 
 /* 'Data Sources' for relative Keying Set 'overrides' 

Modified: trunk/blender/source/blender/editors/armature/armature_ops.c
===================================================================
--- trunk/blender/source/blender/editors/armature/armature_ops.c	2010-03-25 10:43:55 UTC (rev 27737)
+++ trunk/blender/source/blender/editors/armature/armature_ops.c	2010-03-25 11:34:18 UTC (rev 27738)
@@ -339,6 +339,7 @@
 	// XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith
 	WM_keymap_verify_item(keymap, "ANIM_OT_keyframe_insert_menu", IKEY, KM_PRESS, 0, 0);
 	WM_keymap_verify_item(keymap, "ANIM_OT_keyframe_delete_v3d", IKEY, KM_PRESS, KM_ALT, 0);
+	WM_keymap_verify_item(keymap, "ANIM_OT_keying_set_active_set", IKEY, KM_PRESS, KM_CTRL|KM_SHIFT|KM_ALT, 0);
 	
 	/* Pose -> PoseLib ------------- */
 	/* only set in posemode, by space_view3d listener */

Modified: trunk/blender/source/blender/editors/include/ED_keyframing.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_keyframing.h	2010-03-25 10:43:55 UTC (rev 27737)
+++ trunk/blender/source/blender/editors/include/ED_keyframing.h	2010-03-25 11:34:18 UTC (rev 27738)
@@ -193,6 +193,9 @@
 /* Get the index of the Keying Set provided, for the given Scene */
 int ANIM_scene_get_keyingset_index(struct Scene *scene, struct KeyingSet *ks);
 
+/* Create (and show) a menu containing all the Keying Sets which can be used in the current context */
+void ANIM_keying_sets_menu_setup(struct bContext *C, char title[], char op_name[]);
+
 /* Check if KeyingSet can be used in the current context */
 short ANIM_keyingset_context_ok_poll(struct bContext *C, struct KeyingSet *ks);
 

Modified: trunk/blender/source/blender/editors/object/object_ops.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_ops.c	2010-03-25 10:43:55 UTC (rev 27737)
+++ trunk/blender/source/blender/editors/object/object_ops.c	2010-03-25 11:34:18 UTC (rev 27738)
@@ -337,6 +337,7 @@
 	// XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith
 	WM_keymap_verify_item(keymap, "ANIM_OT_keyframe_insert_menu", IKEY, KM_PRESS, 0, 0);
 	WM_keymap_verify_item(keymap, "ANIM_OT_keyframe_delete_v3d", IKEY, KM_PRESS, KM_ALT, 0);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list