From 085ed00e42a5af31c03a3599c4fef38786fb6ba5 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 12 Jul 2017 01:33:08 +1200 Subject: [PATCH] A bunch of fixes for Pose Library while checking on T51607 * Display a warning above the pose list if the pose library is in an invalid state (i.e. when it has keyframes but no pose-markers associated with those keyframes). This warning prompts users to run the "Sanitize Pose Library Action" operator, which should fix up such issues. * "Sanitize" operator now creates unique names for each newly create pose marker it generates, including the frame on which it found the pose --- release/scripts/startup/bl_ui/properties_data_armature.py | 4 ++++ source/blender/editors/armature/pose_lib.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/release/scripts/startup/bl_ui/properties_data_armature.py b/release/scripts/startup/bl_ui/properties_data_armature.py index 8d3ab24b4cf..20038e1354a 100644 --- a/release/scripts/startup/bl_ui/properties_data_armature.py +++ b/release/scripts/startup/bl_ui/properties_data_armature.py @@ -178,6 +178,10 @@ class DATA_PT_pose_library(ArmatureButtonsPanel, Panel): layout.template_ID(ob, "pose_library", new="poselib.new", unlink="poselib.unlink") if poselib: + # warning about poselib being in an invalid state + if len(poselib.fcurves) > 0 and len(poselib.pose_markers) == 0: + layout.label(icon='ERROR', text="Error: Potentially corrupt library, run 'Sanitize' operator to fix") + # list of poses in pose library row = layout.row() row.template_list("UI_UL_list", "pose_markers", poselib, "pose_markers", diff --git a/source/blender/editors/armature/pose_lib.c b/source/blender/editors/armature/pose_lib.c index e3c64b523b1..25f1b282f14 100644 --- a/source/blender/editors/armature/pose_lib.c +++ b/source/blender/editors/armature/pose_lib.c @@ -328,7 +328,7 @@ static int poselib_sanitize_exec(bContext *C, wmOperator *op) /* add pose to poselib */ marker = MEM_callocN(sizeof(TimeMarker), "ActionMarker"); - BLI_strncpy(marker->name, "Pose", sizeof(marker->name)); + BLI_snprintf(marker->name, sizeof(marker->name), "F%d Pose", (int)ak->cfra); marker->frame = (int)ak->cfra; marker->flag = -1;