Make keyframe inserts/removals less verbose when called from python.

Following operators now only report messages back when they are called via their invoke-methods:

- ANIM_OT_keyframe_insert
- ANIM_OT_keyframe_insert_by_name
- ANIM_OT_keyframe_insert_menu
- ANIM_OT_keyframe_delete
- ANIM_OT_keyframe_clear_v3d
- ANIM_OT_keyframe_delete_v3d

Also removed the attribute confirm_success from the following operators:

- ANIM_OT_keyframe_insert
- ANIM_OT_keyframe_insert_by_name
- ANIM_OT_keyframe_insert_menu
- ANIM_OT_keyframe_delete
- ANIM_OT_keyframe_delete_by_name

Note: addons/scripts possibly need to be updated if they use the above operators AND set the "confirm_success" attribute

Reviewed By: campbellbarton

Differential Revision: https://developer.blender.org/D12697
This commit is contained in:
Gaia Clary 2021-09-29 16:08:49 +02:00
parent 3391a2ef1d
commit c8d59b60b5
2 changed files with 34 additions and 81 deletions

View File

@ -176,7 +176,7 @@ class BakeToKeyframes(Operator):
# NOTE: assume that on first frame, the starting rotation is appropriate
obj.rotation_euler = mat.to_euler(rot_mode, obj.rotation_euler)
bpy.ops.anim.keyframe_insert(type='BUILTIN_KSI_LocRot', confirm_success=False)
bpy.ops.anim.keyframe_insert(type='BUILTIN_KSI_LocRot')
# remove baked objects from simulation
bpy.ops.rigidbody.objects_remove()

View File

@ -1879,6 +1879,7 @@ static int insert_key_exec(bContext *C, wmOperator *op)
float cfra = (float)CFRA; /* XXX for now, don't bother about all the yucky offset crap */
int num_channels;
const bool confirm = op->flag & OP_IS_INVOKE;
KeyingSet *ks = keyingset_get_from_op_with_error(op, op->type->prop, scene);
if (ks == NULL) {
@ -1915,20 +1916,22 @@ static int insert_key_exec(bContext *C, wmOperator *op)
}
if (num_channels > 0) {
/* if the appropriate properties have been set, make a note that we've inserted something */
if (RNA_boolean_get(op->ptr, "confirm_success")) {
/* send notifiers that keyframes have been changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_ADDED, NULL);
}
if (confirm) {
/* if called by invoke (from the UI), make a note that we've inserted keyframes */
if (num_channels > 0) {
BKE_reportf(op->reports,
RPT_INFO,
"Successfully added %d keyframes for keying set '%s'",
num_channels,
ks->name);
}
/* send notifiers that keyframes have been changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_ADDED, NULL);
}
else {
BKE_report(op->reports, RPT_WARNING, "Keying set failed to insert any keyframes");
else {
BKE_report(op->reports, RPT_WARNING, "Keying set failed to insert any keyframes");
}
}
return OPERATOR_FINISHED;
@ -1957,16 +1960,6 @@ void ANIM_OT_keyframe_insert(wmOperatorType *ot)
RNA_def_enum_funcs(prop, ANIM_keying_sets_enum_itemf);
RNA_def_property_flag(prop, PROP_HIDDEN);
ot->prop = prop;
/* confirm whether a keyframe was added by showing a popup
* - by default, this is enabled, since this operator is assumed to be called independently
*/
prop = RNA_def_boolean(ot->srna,
"confirm_success",
1,
"Confirm Successful Insert",
"Show a popup when the keyframes get successfully added");
RNA_def_property_flag(prop, PROP_HIDDEN);
}
/* Clone of 'ANIM_OT_keyframe_insert' which uses a name for the keying set instead of an enum. */
@ -1990,16 +1983,6 @@ void ANIM_OT_keyframe_insert_by_name(wmOperatorType *ot)
prop = RNA_def_string_file_path(ot->srna, "type", "Type", MAX_ID_NAME - 2, "", "");
RNA_def_property_flag(prop, PROP_HIDDEN);
ot->prop = prop;
/* confirm whether a keyframe was added by showing a popup
* - by default, this is enabled, since this operator is assumed to be called independently
*/
prop = RNA_def_boolean(ot->srna,
"confirm_success",
1,
"Confirm Successful Insert",
"Show a popup when the keyframes get successfully added");
RNA_def_property_flag(prop, PROP_HIDDEN);
}
/* Insert Key Operator (With Menu) ------------------------ */
@ -2027,8 +2010,6 @@ static int insert_key_menu_invoke(bContext *C, wmOperator *op, const wmEvent *UN
/* just call the exec() on the active keyingset */
RNA_enum_set(op->ptr, "type", 0);
RNA_boolean_set(op->ptr, "confirm_success", true);
return op->type->exec(C, op);
}
@ -2057,17 +2038,6 @@ void ANIM_OT_keyframe_insert_menu(wmOperatorType *ot)
RNA_def_property_flag(prop, PROP_HIDDEN);
ot->prop = prop;
/* confirm whether a keyframe was added by showing a popup
* - by default, this is disabled so that if a menu is shown, this doesn't come up too
*/
/* XXX should this just be always on? */
prop = RNA_def_boolean(ot->srna,
"confirm_success",
0,
"Confirm Successful Insert",
"Show a popup when the keyframes get successfully added");
RNA_def_property_flag(prop, PROP_HIDDEN);
/* whether the menu should always be shown
* - by default, the menu should only be shown when there is no active Keying Set (2.5 behavior),
* although in some cases it might be useful to always shown (pre 2.5 behavior)
@ -2094,6 +2064,7 @@ static int delete_key_using_keying_set(bContext *C, wmOperator *op, KeyingSet *k
Scene *scene = CTX_data_scene(C);
float cfra = (float)CFRA; /* XXX for now, don't bother about all the yucky offset crap */
int num_channels;
const bool confirm = op->flag & OP_IS_INVOKE;
/* try to delete keyframes for the channels specified by KeyingSet */
num_channels = ANIM_apply_keyingset(C, NULL, NULL, ks, MODIFYKEY_MODE_DELETE, cfra);
@ -2107,26 +2078,23 @@ static int delete_key_using_keying_set(bContext *C, wmOperator *op, KeyingSet *k
return OPERATOR_CANCELLED;
}
PropertyRNA *prop = RNA_struct_find_property(op->ptr, "confirm_success");
bool confirm = (prop != NULL && RNA_property_boolean_get(op->ptr, prop));
if (num_channels > 0) {
/* if the appropriate properties have been set, make a note that we've inserted something */
if (confirm) {
WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_REMOVED, NULL);
}
if (confirm) {
/* if called by invoke (from the UI), make a note that we've removed keyframes */
if (num_channels > 0) {
BKE_reportf(op->reports,
RPT_INFO,
"Successfully removed %d keyframes for keying set '%s'",
num_channels,
ks->name);
}
/* send notifiers that keyframes have been changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_REMOVED, NULL);
else {
BKE_report(op->reports, RPT_WARNING, "Keying set failed to remove any keyframes");
}
}
else if (confirm) {
BKE_report(op->reports, RPT_WARNING, "Keying set failed to remove any keyframes");
}
return OPERATOR_FINISHED;
}
@ -2153,15 +2121,6 @@ void ANIM_OT_keyframe_delete(wmOperatorType *ot)
RNA_def_enum_funcs(prop, ANIM_keying_sets_enum_itemf);
RNA_def_property_flag(prop, PROP_HIDDEN);
ot->prop = prop;
/* confirm whether a keyframe was added by showing a popup
* - by default, this is enabled, since this operator is assumed to be called independently
*/
RNA_def_boolean(ot->srna,
"confirm_success",
1,
"Confirm Successful Delete",
"Show a popup when the keyframes get successfully removed");
}
void ANIM_OT_keyframe_delete_by_name(wmOperatorType *ot)
@ -2184,15 +2143,6 @@ void ANIM_OT_keyframe_delete_by_name(wmOperatorType *ot)
prop = RNA_def_string_file_path(ot->srna, "type", "Type", MAX_ID_NAME - 2, "", "");
RNA_def_property_flag(prop, PROP_HIDDEN);
ot->prop = prop;
/* confirm whether a keyframe was added by showing a popup
* - by default, this is enabled, since this operator is assumed to be called independently
*/
RNA_def_boolean(ot->srna,
"confirm_success",
1,
"Confirm Successful Delete",
"Show a popup when the keyframes get successfully removed");
}
/* Delete Key Operator ------------------------ */
@ -2291,7 +2241,7 @@ static int delete_key_v3d_without_keying_set(bContext *C, wmOperator *op)
int selected_objects_success_len = 0;
int success_multi = 0;
bool confirm = op->flag & OP_IS_INVOKE;
const bool confirm = op->flag & OP_IS_INVOKE;
CTX_DATA_BEGIN (C, Object *, ob, selected_objects) {
ID *id = &ob->id;
@ -2372,21 +2322,24 @@ static int delete_key_v3d_without_keying_set(bContext *C, wmOperator *op)
}
CTX_DATA_END;
/* report success (or failure) */
if (selected_objects_success_len) {
if (confirm) {
/* send updates */
WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, NULL);
}
if (confirm) {
/* if called by invoke (from the UI), make a note that we've removed keyframes */
if (selected_objects_success_len) {
BKE_reportf(op->reports,
RPT_INFO,
"%d object(s) successfully had %d keyframes removed",
selected_objects_success_len,
success_multi);
}
/* send updates */
WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, NULL);
}
else if (confirm) {
BKE_reportf(
op->reports, RPT_ERROR, "No keyframes removed from %d object(s)", selected_objects_len);
else {
BKE_reportf(
op->reports, RPT_ERROR, "No keyframes removed from %d object(s)", selected_objects_len);
}
}
return OPERATOR_FINISHED;
}