Commit: 15bb035736d009d3ac2761d69b7b65bdb9fb1ace
Author: Bastien Montagne
Date:   Fri Mar 5 08:37:51 2021 +0100
Branches: override-refactor-tmp-2
https://developer.blender.org/rB15bb035736d009d3ac2761d69b7b65bdb9fb1ace

LibOverride: Add a utils to check if override has been user-edited.

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

M       source/blender/blenkernel/BKE_lib_override.h
M       source/blender/blenkernel/intern/lib_override.c

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

diff --git a/source/blender/blenkernel/BKE_lib_override.h 
b/source/blender/blenkernel/BKE_lib_override.h
index 5fd451dc986..19109d67114 100644
--- a/source/blender/blenkernel/BKE_lib_override.h
+++ b/source/blender/blenkernel/BKE_lib_override.h
@@ -61,6 +61,8 @@ void BKE_lib_override_library_copy(struct ID *dst_id,
 void BKE_lib_override_library_clear(struct IDOverrideLibrary *override, const 
bool do_id_user);
 void BKE_lib_override_library_free(struct IDOverrideLibrary **override, const 
bool do_id_user);
 
+bool BKE_lib_override_library_is_user_edited(struct ID *id);
+
 struct ID *BKE_lib_override_library_create_from_id(struct Main *bmain,
                                                    struct ID *reference_id,
                                                    const bool do_tagged_remap);
diff --git a/source/blender/blenkernel/intern/lib_override.c 
b/source/blender/blenkernel/intern/lib_override.c
index 602c560cedd..891895b1bd6 100644
--- a/source/blender/blenkernel/intern/lib_override.c
+++ b/source/blender/blenkernel/intern/lib_override.c
@@ -213,6 +213,32 @@ static ID *lib_override_library_create_from(Main *bmain, 
ID *reference_id)
   return local_id;
 }
 
+/** Check if given ID has some override rules that actually indicate the user 
edited it.
+ *
+ * TODO: This could be simplified by storing a flag in IDOverrideLibrary 
during the diffing
+ * process? */
+bool BKE_lib_override_library_is_user_edited(struct ID *id)
+{
+  if (!ID_IS_OVERRIDE_LIBRARY(id)) {
+    return false;
+  }
+
+  LISTBASE_FOREACH (IDOverrideLibraryProperty *, op, 
&id->override_library->properties) {
+    LISTBASE_FOREACH (IDOverrideLibraryPropertyOperation *, opop, 
&op->operations) {
+      if ((opop->flag & IDOVERRIDE_LIBRARY_FLAG_IDPOINTER_MATCH_REFERENCE) != 
0) {
+        continue;
+      }
+      if (opop->operation == IDOVERRIDE_LIBRARY_OP_NOOP) {
+        continue;
+      }
+      /* If an operation does not match the filters above, it is considered as 
a user-editing one,
+       * therefore this override is user-edited. */
+      return true;
+    }
+  }
+  return false;
+}
+
 /** Create an overridden local copy of linked reference. */
 ID *BKE_lib_override_library_create_from_id(Main *bmain,
                                             ID *reference_id,
@@ -379,7 +405,7 @@ typedef struct LibOverrideGroupTagData {
  *
  * Requires existing `Main.relations`.
  *
- * Note: this is typically called to complete 
`lib_override_linked_group_tag()`.
+ * NOTE: This is typically called to complete 
`lib_override_linked_group_tag()`.
  */
 static bool 
lib_override_hierarchy_dependencies_recursive_tag(LibOverrideGroupTagData *data)
 {

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

Reply via email to