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.
This commit is contained in:
Ryan Inch 2020-04-10 00:35:37 -04:00
parent 2e88f2ed40
commit 19e2083f9f
6 changed files with 32 additions and 17 deletions

View File

@ -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

View File

@ -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"

View File

@ -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'}

View File

@ -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)

View File

@ -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"]:

View File

@ -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