[Bf-blender-cvs] [9307202] master: RNA: de-duplciate rna-path create in tooltip code

Campbell Barton noreply at git.blender.org
Tue Dec 1 00:37:41 CET 2015


Commit: 9307202807e4ff52f2266b17597fa85ee6377293
Author: Campbell Barton
Date:   Mon Nov 30 22:38:39 2015 +1100
Branches: master
https://developer.blender.org/rB9307202807e4ff52f2266b17597fa85ee6377293

RNA: de-duplciate rna-path create in tooltip code

===================================================================

M	source/blender/editors/interface/interface_regions.c
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/intern/rna_access.c

===================================================================

diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index 3a24625..5fe6fd1 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -534,33 +534,18 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
 
 		if (but->rnapoin.id.data) {
 			/* this could get its own 'BUT_GET_...' type */
-			PointerRNA *ptr = &but->rnapoin;
-			PropertyRNA *prop = but->rnaprop;
-			ID *id = ptr->id.data;
-
-			char *id_path;
-			char *data_path = NULL;
 
 			/* never fails */
-			id_path = RNA_path_full_ID_py(id);
-
-			if (ptr->data && prop) {
-				data_path = RNA_path_from_ID_to_property(ptr, prop);
-			}
+			char *id_path;
 
-			if (data_path) {
-				const char *data_delim = (data_path[0] == '[') ? "" : ".";
-				BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]),
-				             "%s%s%s",  /* no need to translate */
-				             id_path, data_delim, data_path);
-				MEM_freeN(data_path);
+			if (but->rnaprop) {
+				id_path = RNA_path_full_property_py_ex(&but->rnapoin, but->rnaprop, but->rnaindex, true);
 			}
-			else if (prop) {
-				/* can't find the path. be explicit in our ignorance "..." */
-				BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]),
-				             "%s ... %s",  /* no need to translate */
-				             id_path, rna_prop.strinfo ? rna_prop.strinfo : RNA_property_identifier(prop));
+			else {
+				id_path = RNA_path_full_struct_py(&but->rnapoin);
 			}
+
+			BLI_strncat_utf8(data->lines[data->totline], id_path, sizeof(data->lines[0]));
 			MEM_freeN(id_path);
 
 			data->format[data->totline].style = UI_TIP_STYLE_MONO;
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 406bab0..480d34a 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -973,6 +973,7 @@ char *RNA_path_resolve_from_type_to_property(
 
 char *RNA_path_full_ID_py(struct ID *id);
 char *RNA_path_full_struct_py(struct PointerRNA *ptr);
+char *RNA_path_full_property_py_ex(PointerRNA *ptr, PropertyRNA *prop, int index, bool use_fallback);
 char *RNA_path_full_property_py(struct PointerRNA *ptr, struct PropertyRNA *prop, int index);
 char *RNA_path_struct_property_py(struct PointerRNA *ptr, struct PropertyRNA *prop, int index);
 char *RNA_path_property_py(struct PointerRNA *ptr, struct PropertyRNA *prop, int index);
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index 5e4ea74..ede5073 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -4719,11 +4719,12 @@ char *RNA_path_full_struct_py(struct PointerRNA *ptr)
  * Get the ID.struct.property as a python representation, eg:
  *   bpy.data.foo["bar"].some_struct.some_prop[10]
  */
-char *RNA_path_full_property_py(PointerRNA *ptr, PropertyRNA *prop, int index)
+char *RNA_path_full_property_py_ex(PointerRNA *ptr, PropertyRNA *prop, int index, bool use_fallback)
 {
 	char *id_path;
 	const char *data_delim;
-	char *data_path;
+	const char *data_path;
+	bool  data_path_free;
 
 	char *ret;
 
@@ -4735,8 +4736,23 @@ char *RNA_path_full_property_py(PointerRNA *ptr, PropertyRNA *prop, int index)
 	id_path = RNA_path_full_ID_py(ptr->id.data);
 
 	data_path = RNA_path_from_ID_to_property(ptr, prop);
+	if (data_path) {
+		data_delim = (data_path[0] == '[') ? "" : ".";
+		data_path_free = true;
+	}
+	else {
+		if (use_fallback) {
+			/* fuzzy fallback. be explicit in our ignoranc. */
+			data_path = RNA_property_identifier(prop);
+			data_delim = " ... ";
+		}
+		else {
+			data_delim = ".";
+
+		}
+		data_path_free = false;
+	}
 
-	data_delim = (data_path && data_path[0] == '[') ? "" : ".";
 
 	if ((index == -1) || (RNA_property_array_check(prop) == false)) {
 		ret = BLI_sprintfN("%s%s%s",
@@ -4747,13 +4763,18 @@ char *RNA_path_full_property_py(PointerRNA *ptr, PropertyRNA *prop, int index)
 		                   id_path, data_delim, data_path, index);
 	}
 	MEM_freeN(id_path);
-	if (data_path) {
-		MEM_freeN(data_path);
+	if (data_path_free) {
+		MEM_freeN((void *)data_path);
 	}
 
 	return ret;
 }
 
+char *RNA_path_full_property_py(PointerRNA *ptr, PropertyRNA *prop, int index)
+{
+	return RNA_path_full_property_py_ex(ptr, prop, index, false);
+}
+
 /**
  * Get the struct.property as a python representation, eg:
  *   some_struct.some_prop[10]




More information about the Bf-blender-cvs mailing list