forked from bartvdbraak/blender
Cleanup: use flags instead of collection of bools to get RNA override status.
This commit is contained in:
parent
d430d12123
commit
59aa8d22ef
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user