[Bf-extensions-cvs] [19e2083f] master: Collection Manager: Fix View Layer update. Task: T69577

Ryan Inch noreply at git.blender.org
Fri Apr 10 07:38:08 CEST 2020


Commit: 19e2083f9f6c4cca169c3d763456340029c54fd8
Author: Ryan Inch
Date:   Fri Apr 10 00:35:37 2020 -0400
Branches: master
https://developer.blender.org/rBA19e2083f9f6c4cca169c3d763456340029c54fd8

Collection Manager: Fix View Layer update. Task: T69577

Make QCD 3D View header widget update immediately
after changing View Layers.

Prevent unnecessary View Layer update
in Collection Manager popup.

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

M	object_collection_manager/__init__.py
M	object_collection_manager/internals.py
M	object_collection_manager/operators.py
M	object_collection_manager/qcd_init.py
M	object_collection_manager/qcd_operators.py
M	object_collection_manager/ui.py

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

diff --git a/object_collection_manager/__init__.py b/object_collection_manager/__init__.py
index 54a0bba2..455670fc 100644
--- a/object_collection_manager/__init__.py
+++ b/object_collection_manager/__init__.py
@@ -22,7 +22,7 @@ bl_info = {
     "name": "Collection Manager",
     "description": "Manage collections and their objects",
     "author": "Ryan Inch",
-    "version": (2,5,2),
+    "version": (2,5,3),
     "blender": (2, 80, 0),
     "location": "View3D - Object Mode (Shortcut - M)",
     "warning": '',  # used for warning icon and text in addons panel
diff --git a/object_collection_manager/internals.py b/object_collection_manager/internals.py
index 594756c9..6b962119 100644
--- a/object_collection_manager/internals.py
+++ b/object_collection_manager/internals.py
@@ -408,6 +408,13 @@ def get_move_active():
     return bpy.data.objects[move_active] if move_active else None
 
 
+def update_qcd_header():
+    cm = bpy.context.scene.collection_manager
+    cm.update_header.clear()
+    new_update_header = cm.update_header.add()
+    new_update_header.name = "updated"
+
+
 class CMSendReport(Operator):
     bl_label = "Send Report"
     bl_idname = "view3d.cm_send_report"
diff --git a/object_collection_manager/operators.py b/object_collection_manager/operators.py
index 1094e578..1aca6c3c 100644
--- a/object_collection_manager/operators.py
+++ b/object_collection_manager/operators.py
@@ -42,6 +42,7 @@ from .internals import (
     get_modifiers,
     get_move_selection,
     get_move_active,
+    update_qcd_header,
     send_report,
 )
 
@@ -255,10 +256,7 @@ class CMSetCollectionOperator(Operator):
                 pass
 
         # update qcd header UI
-        cm = bpy.context.scene.collection_manager
-        cm.update_header.clear()
-        new_update_header = cm.update_header.add()
-        new_update_header.name = "updated"
+        update_qcd_header()
 
         return {'FINISHED'}
 
diff --git a/object_collection_manager/qcd_init.py b/object_collection_manager/qcd_init.py
index 0bef6e44..69bb4621 100644
--- a/object_collection_manager/qcd_init.py
+++ b/object_collection_manager/qcd_init.py
@@ -59,6 +59,7 @@ def register_qcd():
         register_qcd_view_hotkeys()
 
     bpy.types.VIEW3D_HT_header.append(ui.view3d_header_qcd_slots)
+    bpy.types.TOPBAR_HT_upper_bar.append(ui.view_layer_update)
 
 def register_qcd_view_hotkeys():
     wm = bpy.context.window_manager
@@ -101,6 +102,7 @@ def register_qcd_view_hotkeys():
 
 def unregister_qcd():
     bpy.types.VIEW3D_HT_header.remove(ui.view3d_header_qcd_slots)
+    bpy.types.TOPBAR_HT_upper_bar.remove(ui.view_layer_update)
 
     for cls in qcd_classes:
         bpy.utils.unregister_class(cls)
diff --git a/object_collection_manager/qcd_operators.py b/object_collection_manager/qcd_operators.py
index 679d35be..c39a9cf3 100644
--- a/object_collection_manager/qcd_operators.py
+++ b/object_collection_manager/qcd_operators.py
@@ -38,7 +38,8 @@ from .internals import (
     update_property_group,
     get_modifiers,
     get_move_selection,
-    get_move_active
+    get_move_active,
+    update_qcd_header,
 )
 
 from .operators import rto_history
@@ -115,10 +116,7 @@ class MoveToQCDSlot(Operator):
                 pass
 
         # update header UI
-        cm = bpy.context.scene.collection_manager
-        cm.update_header.clear()
-        new_update_header = cm.update_header.add()
-        new_update_header.name = "updated"
+        update_qcd_header()
 
         return {'FINISHED'}
 
@@ -240,10 +238,7 @@ class ViewQCDSlot(Operator):
             context.view_layer.active_layer_collection = qcd_laycol
 
         # update header UI
-        cm = bpy.context.scene.collection_manager
-        cm.update_header.clear()
-        new_update_header = cm.update_header.add()
-        new_update_header.name = "updated"
+        update_qcd_header()
 
         view_layer = context.view_layer.name
         if view_layer in rto_history["exclude"]:
diff --git a/object_collection_manager/ui.py b/object_collection_manager/ui.py
index 0e2739c2..9de8f3e4 100644
--- a/object_collection_manager/ui.py
+++ b/object_collection_manager/ui.py
@@ -18,6 +18,8 @@
 
 # Copyright 2011, Ryan Inch
 
+import bpy
+
 from bpy.types import (
     Operator,
     Panel,
@@ -37,7 +39,8 @@ from .internals import (
     update_property_group,
     generate_state,
     get_move_selection,
-    get_move_active
+    get_move_active,
+    update_qcd_header,
 )
 
 from .operators import (
@@ -66,13 +69,17 @@ class CollectionManager(Operator):
         self.window_open = True
 
     def draw(self, context):
+        cls = CollectionManager
         layout = self.layout
         cm = context.scene.collection_manager
         view_layer = context.view_layer
 
-        if view_layer.name != self.last_view_layer:
+        if view_layer.name != cls.last_view_layer:
+            if context.preferences.addons[__package__].preferences.enable_qcd:
+                bpy.app.timers.register(update_qcd_header)
+
             update_collection_tree(context)
-            self.last_view_layer = view_layer.name
+            cls.last_view_layer = view_layer.name
 
         title_row = layout.split(factor=0.5)
         main = title_row.row()
@@ -646,6 +653,12 @@ def view3d_header_qcd_slots(self, context):
         idx += 1
 
 
+def view_layer_update(self, context):
+    if context.view_layer.name != CollectionManager.last_view_layer:
+        bpy.app.timers.register(update_qcd_header)
+        CollectionManager.last_view_layer = context.view_layer.name
+
+
 def get_active_icon(context, qcd_laycol):
     global last_icon_theme_text
     global last_icon_theme_text_sel



More information about the Bf-extensions-cvs mailing list