Commit: 558119854dadba43b977f4e8281ea3f95bdc03f1
Author: Bastien Montagne
Date:   Wed Apr 5 17:45:18 2017 +0200
Branches: id_override_static
https://developer.blender.org/rB558119854dadba43b977f4e8281ea3f95bdc03f1

Bring closer RNA and BKE ...override_..._find() functions, add RNA ..._get() 
ones.

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

M       source/blender/blenkernel/BKE_library_override.h
M       source/blender/blenkernel/intern/library_override.c
M       source/blender/makesrna/RNA_access.h
M       source/blender/makesrna/intern/rna_access.c

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

diff --git a/source/blender/blenkernel/BKE_library_override.h 
b/source/blender/blenkernel/BKE_library_override.h
index 7701088d620..cc29b0cea8f 100644
--- a/source/blender/blenkernel/BKE_library_override.h
+++ b/source/blender/blenkernel/BKE_library_override.h
@@ -51,7 +51,7 @@ struct IDOverridePropertyOperation 
*BKE_override_property_operation_find(
         const char *subitem_refname, const char *subitem_locname,
         const int subitem_refindex, const int subitem_locindex);
 struct IDOverridePropertyOperation *BKE_override_property_operation_get(
-        struct IDOverrideProperty *override_property, const int operation,
+        struct IDOverrideProperty *override_property, const short operation,
         const char *subitem_refname, const char *subitem_locname,
         const int subitem_refindex, const int subitem_locindex, bool 
*r_created);
 void BKE_override_property_operation_delete(
diff --git a/source/blender/blenkernel/intern/library_override.c 
b/source/blender/blenkernel/intern/library_override.c
index e898e4687be..1fecb5908b2 100644
--- a/source/blender/blenkernel/intern/library_override.c
+++ b/source/blender/blenkernel/intern/library_override.c
@@ -152,6 +152,14 @@ IDOverridePropertyOperation 
*BKE_override_property_operation_find(
         const int subitem_refindex, const int subitem_locindex)
 {
        IDOverridePropertyOperation *opop;
+       const int subitem_defindex = -1;
+
+       if (subitem_locname &&
+           (opop = BLI_findstring_ptr(&override_property->operations, 
subitem_locname,
+                                      offsetof(IDOverridePropertyOperation, 
subitem_local_name))))
+       {
+               return opop;
+       }
 
        if (subitem_refname &&
            (opop = BLI_findstring_ptr(&override_property->operations, 
subitem_refname,
@@ -160,9 +168,8 @@ IDOverridePropertyOperation 
*BKE_override_property_operation_find(
                return opop;
        }
 
-       if (subitem_locname &&
-           (opop = BLI_findstring_ptr(&override_property->operations, 
subitem_locname,
-                                      offsetof(IDOverridePropertyOperation, 
subitem_local_name))))
+       if ((opop = BLI_listbase_bytes_find(&override_property->operations, 
&subitem_locindex, sizeof(subitem_locindex),
+                                           
offsetof(IDOverridePropertyOperation, subitem_local_index))))
        {
                return opop;
        }
@@ -173,7 +180,9 @@ IDOverridePropertyOperation 
*BKE_override_property_operation_find(
                return opop;
        }
 
-       if ((opop = BLI_listbase_bytes_find(&override_property->operations, 
&subitem_locindex, sizeof(subitem_locindex),
+       /* index == -1 means all indices, that is valid fallback in case we 
requested specific index. */
+       if ((subitem_locindex != subitem_defindex) &&
+           (opop = BLI_listbase_bytes_find(&override_property->operations, 
&subitem_defindex, sizeof(subitem_defindex),
                                            
offsetof(IDOverridePropertyOperation, subitem_local_index))))
        {
                return opop;
@@ -186,7 +195,7 @@ IDOverridePropertyOperation 
*BKE_override_property_operation_find(
  * Find override property operation from given sub-item(s), or create it if it 
does not exist.
  */
 IDOverridePropertyOperation *BKE_override_property_operation_get(
-        IDOverrideProperty *override_property, const int operation,
+        IDOverrideProperty *override_property, const short operation,
         const char *subitem_refname, const char *subitem_locname,
         const int subitem_refindex, const int subitem_locindex, bool 
*r_created)
 {
@@ -207,6 +216,10 @@ IDOverridePropertyOperation 
*BKE_override_property_operation_get(
                opop->subitem_reference_index = subitem_refindex;
 
                BLI_addtail(&override_property->operations, opop);
+
+               if (r_created) {
+                       *r_created = true;
+               }
        }
        else if (r_created) {
                *r_created = false;
diff --git a/source/blender/makesrna/RNA_access.h 
b/source/blender/makesrna/RNA_access.h
index 22a70b1929b..70c3bcc985d 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -1238,8 +1238,12 @@ bool RNA_struct_auto_override(
         struct PointerRNA *local, struct PointerRNA *reference, struct 
IDOverride *override, const char *root_path);
 
 struct IDOverrideProperty *RNA_property_override_property_find(PointerRNA 
*ptr, PropertyRNA *prop);
+struct IDOverrideProperty *RNA_property_override_property_get(PointerRNA *ptr, 
PropertyRNA *prop, bool *r_created);
+
 struct IDOverridePropertyOperation 
*RNA_property_override_property_operation_find(
         PointerRNA *ptr, PropertyRNA *prop, const int index);
+struct IDOverridePropertyOperation 
*RNA_property_override_property_operation_get(
+        PointerRNA *ptr, PropertyRNA *prop, const short operation, const int 
index, bool *r_created);
 
 bool RNA_property_overridable(PointerRNA *ptr, PropertyRNA *prop);
 bool RNA_property_overridden(PointerRNA *ptr, PropertyRNA *prop, const int 
index);
diff --git a/source/blender/makesrna/intern/rna_access.c 
b/source/blender/makesrna/intern/rna_access.c
index b802f76d608..81091914c88 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -8062,13 +8062,26 @@ IDOverrideProperty 
*RNA_property_override_property_find(PointerRNA *ptr, Propert
 
        char *rna_path = RNA_path_from_ID_to_property(ptr, prop);
        if (rna_path) {
-               for (IDOverrideProperty *op = id->override->properties.first; 
op; op = op->next) {
-                       if (STREQ(rna_path, op->rna_path)) {
-                               MEM_freeN(rna_path);
-                               return op;
-                       }
-               }
+               IDOverrideProperty *op = 
BKE_override_property_find(id->override, rna_path);
+               MEM_freeN(rna_path);
+               return op;
+       }
+       return NULL;
+}
+
+IDOverrideProperty *RNA_property_override_property_get(PointerRNA *ptr, 
PropertyRNA *prop, bool *r_created)
+{
+       ID *id = ptr->id.data;
+
+       if (!id || !id->override) {
+               return NULL;
+       }
+
+       char *rna_path = RNA_path_from_ID_to_property(ptr, prop);
+       if (rna_path) {
+               IDOverrideProperty *op = 
BKE_override_property_get(id->override, rna_path, r_created);
                MEM_freeN(rna_path);
+               return op;
        }
        return NULL;
 }
@@ -8082,17 +8095,19 @@ IDOverridePropertyOperation 
*RNA_property_override_property_operation_find(
                return NULL;
        }
 
-       IDOverridePropertyOperation *opop_generic = NULL;
-       for (IDOverridePropertyOperation *opop = op->operations.first; opop; 
opop = opop->next) {
-               if (opop->subitem_local_index == index) {
-                       return opop;
-               }
-               else if (opop->subitem_local_index == -1 && !opop_generic) {
-                       /* index == -1 means all indices, that is valid 
fallback in case we requested specific index. */
-                       opop_generic = opop;
-               }
+       return BKE_override_property_operation_find(op, NULL, NULL, index, 
index);
+}
+
+IDOverridePropertyOperation *RNA_property_override_property_operation_get(
+        PointerRNA *ptr, PropertyRNA *prop, const short operation, const int 
index, bool *r_created)
+{
+       IDOverrideProperty *op = RNA_property_override_property_get(ptr, prop, 
NULL);
+
+       if (!op) {
+               return NULL;
        }
-       return opop_generic;
+
+       return BKE_override_property_operation_get(op, operation, NULL, NULL, 
index, index, r_created);
 }
 
 bool RNA_property_overridable(PointerRNA *ptr, PropertyRNA *prop)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to