Cleanup: use flags instead of collection of bools to get RNA override status.

This commit is contained in:
Bastien Montagne 2018-03-14 11:47:35 +01:00
parent d430d12123
commit 59aa8d22ef
5 changed files with 34 additions and 32 deletions

@ -1221,11 +1221,9 @@ static void ui_menu_block_set_keymaps(const bContext *C, uiBlock *block)
void ui_but_override_flag(uiBut *but) void ui_but_override_flag(uiBut *but)
{ {
bool is_overridden; const int override_status = RNA_property_override_status(&but->rnapoin, but->rnaprop, but->rnaindex);
RNA_property_override_status(&but->rnapoin, but->rnaprop, but->rnaindex, NULL, &is_overridden, NULL, NULL); if (override_status & RNA_OVERRIDE_STATUS_OVERRIDDEN) {
if (is_overridden) {
but->flag |= UI_BUT_OVERRIDEN; but->flag |= UI_BUT_OVERRIDEN;
} }
else { else {

@ -6819,11 +6819,11 @@ static bool ui_but_menu(bContext *C, uiBut *but)
const PropertySubType subtype = RNA_property_subtype(prop); const PropertySubType subtype = RNA_property_subtype(prop);
bool is_anim = RNA_property_animateable(ptr, prop); bool is_anim = RNA_property_animateable(ptr, prop);
bool is_editable = RNA_property_editable(ptr, prop); bool is_editable = RNA_property_editable(ptr, prop);
bool is_overridable;
/*bool is_idprop = RNA_property_is_idprop(prop);*/ /* XXX does not work as expected, not strictly needed */ /*bool is_idprop = RNA_property_is_idprop(prop);*/ /* XXX does not work as expected, not strictly needed */
bool is_set = RNA_property_is_set(ptr, prop); bool is_set = RNA_property_is_set(ptr, prop);
RNA_property_override_status(ptr, prop, -1, &is_overridable, NULL, NULL, NULL); const int override_status = RNA_property_override_status(ptr, prop, -1);
const bool is_overridable = (override_status & RNA_OVERRIDE_STATUS_OVERRIDABLE) != 0;
/* second slower test, saved people finding keyframe items in menus when its not possible */ /* second slower test, saved people finding keyframe items in menus when its not possible */
if (is_anim) if (is_anim)

@ -482,13 +482,12 @@ static int override_type_set_button_poll(bContext *C)
PointerRNA ptr; PointerRNA ptr;
PropertyRNA *prop; PropertyRNA *prop;
int index; int index;
bool is_overridable;
UI_context_active_but_prop_get(C, &ptr, &prop, &index); UI_context_active_but_prop_get(C, &ptr, &prop, &index);
RNA_property_override_status(&ptr, prop, index, &is_overridable, NULL, NULL, NULL); const int override_status = RNA_property_override_status(&ptr, prop, index);
return (ptr.data && prop && is_overridable); return (ptr.data && prop && (override_status & RNA_OVERRIDE_STATUS_OVERRIDABLE));
} }
static int override_type_set_button_exec(bContext *C, wmOperator *op) static int override_type_set_button_exec(bContext *C, wmOperator *op)
@ -572,13 +571,12 @@ static int override_remove_button_poll(bContext *C)
PointerRNA ptr; PointerRNA ptr;
PropertyRNA *prop; PropertyRNA *prop;
int index; int index;
bool is_overridden;
UI_context_active_but_prop_get(C, &ptr, &prop, &index); UI_context_active_but_prop_get(C, &ptr, &prop, &index);
RNA_property_override_status(&ptr, prop, index, NULL, &is_overridden, NULL, NULL); const int override_status = RNA_property_override_status(&ptr, prop, index);
return (ptr.data && ptr.id.data && prop && is_overridden); return (ptr.data && ptr.id.data && prop && (override_status & RNA_OVERRIDE_STATUS_OVERRIDDEN));
} }
static int override_remove_button_exec(bContext *C, wmOperator *op) static int override_remove_button_exec(bContext *C, wmOperator *op)

@ -1278,6 +1278,13 @@ typedef enum eRNAOverrideMatchResult {
RNA_OVERRIDE_MATCH_RESULT_RESTORED = 1 << 1, RNA_OVERRIDE_MATCH_RESULT_RESTORED = 1 << 1,
} eRNAOverrideMatchResult; } eRNAOverrideMatchResult;
typedef enum eRNAOverrideStatus {
RNA_OVERRIDE_STATUS_OVERRIDABLE = 1 << 0, /* The property is overridable. */
RNA_OVERRIDE_STATUS_OVERRIDDEN = 1 << 1, /* The property is overridden. */
RNA_OVERRIDE_STATUS_MANDATORY = 1 << 2, /* Overriding this property is mandatory when creating an override. */
RNA_OVERRIDE_STATUS_LOCKED = 1 << 3, /* The override status of this property is locked. */
} eRNAOverrideStatus;
bool RNA_struct_override_matches( bool RNA_struct_override_matches(
struct PointerRNA *ptr_local, struct PointerRNA *ptr_reference, const char *root_path, struct PointerRNA *ptr_local, struct PointerRNA *ptr_reference, const char *root_path,
struct IDOverrideStatic *override, const eRNAOverrideMatch flags, struct IDOverrideStatic *override, const eRNAOverrideMatch flags,
@ -1300,9 +1307,7 @@ struct IDOverrideStaticPropertyOperation *RNA_property_override_property_operati
PointerRNA *ptr, PropertyRNA *prop, const short operation, const int index, PointerRNA *ptr, PropertyRNA *prop, const short operation, const int index,
const bool strict, bool *r_strict, bool *r_created); const bool strict, bool *r_strict, bool *r_created);
void RNA_property_override_status( int RNA_property_override_status(PointerRNA *ptr, PropertyRNA *prop, const int index);
PointerRNA *ptr, PropertyRNA *prop, const int index,
bool *r_overridable, bool *r_overridden, bool *r_mandatory, bool *r_locked);
void RNA_struct_state_owner_set(const char *name); void RNA_struct_state_owner_set(const char *name);
const char *RNA_struct_state_owner_get(void); const char *RNA_struct_state_owner_get(void);

@ -7678,29 +7678,30 @@ IDOverrideStaticPropertyOperation *RNA_property_override_property_operation_get(
return BKE_override_static_property_operation_get(op, operation, NULL, NULL, index, index, strict, r_strict, r_created); return BKE_override_static_property_operation_get(op, operation, NULL, NULL, index, index, strict, r_strict, r_created);
} }
void RNA_property_override_status( int RNA_property_override_status(PointerRNA *ptr, PropertyRNA *prop, const int index)
PointerRNA *ptr, PropertyRNA *prop, const int index,
bool *r_overridable, bool *r_overridden, bool *r_mandatory, bool *r_locked)
{ {
#define SET_RET(_name, _val) if (_name != NULL) *_name = (_val) int override_status = 0;
SET_RET(r_overridable, false);
SET_RET(r_overridden, false);
SET_RET(r_mandatory, false);
SET_RET(r_locked, false);
if (!ptr || !prop || !ptr->id.data || !((ID *)ptr->id.data)->override_static) { if (!ptr || !prop || !ptr->id.data || !((ID *)ptr->id.data)->override_static) {
return; return override_status;
} }
SET_RET(r_overridable, (prop->flag & PROP_OVERRIDABLE_STATIC) && (prop->flag & PROP_EDITABLE)); if ((prop->flag & PROP_OVERRIDABLE_STATIC) && (prop->flag & PROP_EDITABLE)) {
override_status |= RNA_OVERRIDE_STATUS_OVERRIDABLE;
if (r_overridden || r_mandatory || r_locked) {
IDOverrideStaticPropertyOperation *opop = RNA_property_override_property_operation_find(ptr, prop, index, false, NULL);
SET_RET(r_overridden, opop != NULL);
SET_RET(r_mandatory, (opop->flag & IDOVERRIDESTATIC_FLAG_MANDATORY) != 0);
SET_RET(r_locked, (opop->flag & IDOVERRIDESTATIC_FLAG_LOCKED) != 0);
} }
IDOverrideStaticPropertyOperation *opop = RNA_property_override_property_operation_find(ptr, prop, index, false, NULL);
if (opop != NULL) {
override_status |= RNA_OVERRIDE_STATUS_OVERRIDDEN;
if (opop->flag & IDOVERRIDESTATIC_FLAG_MANDATORY) {
override_status |= RNA_OVERRIDE_STATUS_MANDATORY;
}
if (opop->flag & IDOVERRIDESTATIC_FLAG_LOCKED) {
override_status |= RNA_OVERRIDE_STATUS_LOCKED;
}
}
return override_status;
} }