Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/editors/interface/interface.c12
-rw-r--r--source/blender/makesrna/RNA_access.h8
-rw-r--r--source/blender/makesrna/intern/rna_access.c45
3 files changed, 60 insertions, 5 deletions
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index e18066f149e..daef84c311f 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -2855,14 +2855,16 @@ void ui_but_update_ex(uiBut *but, const bool validate)
if (but->block->flag & UI_BLOCK_LOOP) {
if (but->rnaprop && (RNA_property_type(but->rnaprop) == PROP_ENUM)) {
int value_enum = RNA_property_enum_get(&but->rnapoin, but->rnaprop);
- const char *buf;
- if (RNA_property_enum_name_gettexted(
+
+ EnumPropertyItem item;
+ if (RNA_property_enum_item_from_value_gettexted(
but->block->evil_C,
- &but->rnapoin, but->rnaprop, value_enum, &buf))
+ &but->rnapoin, but->rnaprop, value_enum, &item))
{
- size_t slen = strlen(buf);
+ size_t slen = strlen(item.name);
ui_but_string_free_internal(but);
- ui_but_string_set_internal(but, buf, slen);
+ ui_but_string_set_internal(but, item.name, slen);
+ but->icon = item.icon;
}
}
}
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 6dee89ebe9b..3a19211ab39 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -831,6 +831,14 @@ bool RNA_property_enum_value(struct bContext *C, PointerRNA *ptr, PropertyRNA *p
bool RNA_property_enum_identifier(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **identifier);
bool RNA_property_enum_name(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **name);
bool RNA_property_enum_name_gettexted(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **name);
+
+bool RNA_property_enum_item_from_value(
+ struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value,
+ EnumPropertyItem *r_item);
+bool RNA_property_enum_item_from_value_gettexted(
+ struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value,
+ EnumPropertyItem *r_item);
+
int RNA_property_enum_bitflag_identifiers(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **identifier);
StructRNA *RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop);
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index 6d48c69e9d8..97c71715349 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -1521,6 +1521,51 @@ bool RNA_property_enum_name_gettexted(bContext *C, PointerRNA *ptr, PropertyRNA
return result;
}
+bool RNA_property_enum_item_from_value(
+ bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value,
+ EnumPropertyItem *r_item)
+{
+ EnumPropertyItem *item = NULL;
+ bool free;
+
+ RNA_property_enum_items(C, ptr, prop, &item, NULL, &free);
+ if (item) {
+ const int i = RNA_enum_from_value(item, value);
+ bool result;
+
+ if (i != -1) {
+ *r_item = item[i];
+ result = true;
+ }
+ else {
+ result = false;
+ }
+
+ if (free)
+ MEM_freeN(item);
+
+ return result;
+ }
+ return false;
+}
+
+bool RNA_property_enum_item_from_value_gettexted(
+ bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value,
+ EnumPropertyItem *r_item)
+{
+ bool result;
+
+ result = RNA_property_enum_item_from_value(C, ptr, prop, value, r_item);
+
+ if (!(prop->flag & PROP_ENUM_NO_TRANSLATE)) {
+ if (BLT_translate_iface()) {
+ r_item->name = BLT_pgettext(prop->translation_context, r_item->name);
+ }
+ }
+
+ return result;
+}
+
int RNA_property_enum_bitflag_identifiers(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value,
const char **identifier)
{