[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22146] branches/blender2.5/blender/source /blender: NLA Tweaks:

Joshua Leung aligorith at gmail.com
Sun Aug 2 15:15:21 CEST 2009


Revision: 22146
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22146
Author:   aligorith
Date:     2009-08-02 15:15:20 +0200 (Sun, 02 Aug 2009)

Log Message:
-----------
NLA Tweaks:

* "Pushing down" the action to make a new strip will now make the new strip the 'active' one. 

* 'Active Action' field in Animation Data panel is now editable as long as we aren't in "tweakmode"

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_nla.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/nla.c
    branches/blender2.5/blender/source/blender/editors/space_nla/nla_buttons.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_animation.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_pose.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_nla.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_nla.h	2009-08-02 12:52:02 UTC (rev 22145)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_nla.h	2009-08-02 13:15:20 UTC (rev 22146)
@@ -80,6 +80,7 @@
 /* ............ */
 
 struct NlaStrip *BKE_nlastrip_find_active(struct NlaTrack *nlt);
+void BKE_nlastrip_set_active(struct AnimData *adt, struct NlaStrip *strip);
 
 short BKE_nlastrip_within_bounds(struct NlaStrip *strip, float min, float max);
 

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/nla.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/nla.c	2009-08-02 12:52:02 UTC (rev 22145)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/nla.c	2009-08-02 13:15:20 UTC (rev 22146)
@@ -993,6 +993,28 @@
 	return NULL;
 }
 
+/* Make the given NLA-Strip the active one within the given block */
+void BKE_nlastrip_set_active (AnimData *adt, NlaStrip *strip)
+{
+	NlaTrack *nlt;
+	NlaStrip *nls;
+	
+	/* sanity checks */
+	if (adt == NULL)
+		return;
+	
+	/* loop over tracks, deactivating*/
+	for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) {
+		for (nls= nlt->strips.first; nls; nls= nls->next)  {
+			if (nls != strip)
+				nls->flag &= ~NLASTRIP_FLAG_ACTIVE;
+			else
+				nls->flag |= NLASTRIP_FLAG_ACTIVE;
+		}
+	}
+}
+
+
 /* Does the given NLA-strip fall within the given bounds (times)? */
 short BKE_nlastrip_within_bounds (NlaStrip *strip, float min, float max)
 {
@@ -1403,6 +1425,9 @@
 			// FIXME: this needs to be more automated, since user can rearrange strips
 			strip->extendmode= NLASTRIP_EXTEND_HOLD_FORWARD;
 		}
+		
+		/* make strip the active one... */
+		BKE_nlastrip_set_active(adt, strip);
 	}
 }
 

Modified: branches/blender2.5/blender/source/blender/editors/space_nla/nla_buttons.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_nla/nla_buttons.c	2009-08-02 12:52:02 UTC (rev 22145)
+++ branches/blender2.5/blender/source/blender/editors/space_nla/nla_buttons.c	2009-08-02 13:15:20 UTC (rev 22146)
@@ -210,7 +210,6 @@
 	/* Active Action Properties ------------------------------------- */
 	/* action */
 	row= uiLayoutRow(layout, 1);
-		uiLayoutSetEnabled(row, (adt->flag & ADT_NLA_EDIT_ON)==0); 
 		uiItemR(row, NULL, 0, &adt_ptr, "action", 0, 0, 0);
 	
 	/* extrapolation */

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_animation.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_animation.c	2009-08-02 12:52:02 UTC (rev 22145)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_animation.c	2009-08-02 13:15:20 UTC (rev 22146)
@@ -38,6 +38,17 @@
 
 #ifdef RNA_RUNTIME
 
+static int rna_AnimData_action_editable(PointerRNA *ptr)
+{
+	AnimData *adt= (AnimData *)ptr->data;
+	
+	/* active action is only editable when it is not a tweaking strip */
+	if ((adt->flag & ADT_NLA_EDIT_ON) || (adt->actstrip) || (adt->tmpact))
+		return 0;
+	else
+		return 1;
+}
+
 static void rna_ksPath_RnaPath_get(PointerRNA *ptr, char *value)
 {
 	KS_Path *ksp= (KS_Path *)ptr->data;
@@ -191,6 +202,7 @@
 	/* Active Action */
 	prop= RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE);
 	RNA_def_property_ui_text(prop, "Action", "Active Action for this datablock.");
+	RNA_def_property_editable_func(prop, "rna_AnimData_action_editable");
 	
 	/* Active Action Settings */
 	prop= RNA_def_property(srna, "action_extrapolation", PROP_ENUM, PROP_NONE);

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_pose.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_pose.c	2009-08-02 12:52:02 UTC (rev 22145)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_pose.c	2009-08-02 13:15:20 UTC (rev 22146)
@@ -60,7 +60,6 @@
 
 static char *rna_PoseChannel_path(PointerRNA *ptr)
 {
-	// XXX do we really need the 'pose.' bit?
 	return BLI_sprintfN("pose.pose_channels[\"%s\"]", ((bPoseChannel*)ptr->data)->name);
 }
 





More information about the Bf-blender-cvs mailing list