move override panel methods to tool.Blender

to keep them close, so it will be easier to keep them in sync
This commit is contained in:
Andrej730
2024-04-03 16:16:50 +05:00
parent 100629e104
commit 4d1ea7eba5
3 changed files with 49 additions and 39 deletions
+5 -12
View File
@@ -307,17 +307,10 @@ def unregister():
km.keymap_items.remove(kmi)
addon_keymaps.clear()
for panel, poll in tuple(original_scene_panels_polls.items()):
if poll is None:
del panel.poll
else:
panel.poll = poll
# panel might be already unregisterd during blender exit
# or if it's addon was disabled
if panel.is_registered:
# reregister to activate new poll
bpy.utils.unregister_class(panel)
bpy.utils.register_class(panel)
del original_scene_panels_polls[panel]
import blenderbim.tool as tool
# use tuple() as method will be removing keys from dict
for panel in tuple(original_scene_panels_polls.keys()):
tool.Blender.remove_scene_panel_override(panel)
bpy.app.translations.unregister("blenderbim")
+1 -27
View File
@@ -255,32 +255,6 @@ def viewport_shading_changed_callback(area):
bpy.context.scene.BIMStylesProperties.active_style_type = "External"
@classmethod
def poll_check_blender_tab(cls, context):
return tool.Blender.is_tab(context, "BLENDER")
def override_scene_panel(original_panel: bpy.types.Panel) -> None:
polls = blenderbim.bim.original_scene_panels_polls
# override poll method
if not hasattr(original_panel, "poll"):
polls[original_panel] = None
original_panel.poll = poll_check_blender_tab
else:
polls[original_panel] = original_panel.poll
@classmethod
def wrapped_poll(cls, context):
return polls[cls](context) and poll_check_blender_tab.__func__(cls, context)
original_panel.poll = wrapped_poll
# reregister to activate new poll
bpy.utils.unregister_class(original_panel)
bpy.utils.register_class(original_panel)
@persistent
def load_post(scene):
global global_subscription_owner
@@ -322,5 +296,5 @@ def load_post(scene):
for panel in tool.Blender.get_scene_panels_list():
if panel in blenderbim.bim.original_scene_panels_polls:
continue
override_scene_panel(panel)
tool.Blender.override_scene_panel(panel)
tool.Blender.setup_tabs()
+43
View File
@@ -934,3 +934,46 @@ class Blender(blenderbim.core.tool.Blender):
assert set(items) == set(final_items), "Sorted list doesn't match original"
return final_items
@classmethod
def override_scene_panel(cls, original_panel: bpy.types.Panel) -> None:
@classmethod
def poll_check_blender_tab(cls, context):
return tool.Blender.is_tab(context, "BLENDER")
polls = blenderbim.bim.original_scene_panels_polls
# override poll method
if not hasattr(original_panel, "poll"):
polls[original_panel] = None
original_panel.poll = poll_check_blender_tab
else:
polls[original_panel] = original_panel.poll
@classmethod
def wrapped_poll(cls, context):
return polls[cls](context) and poll_check_blender_tab.__func__(cls, context)
original_panel.poll = wrapped_poll
# reregister to activate new poll
bpy.utils.unregister_class(original_panel)
bpy.utils.register_class(original_panel)
@classmethod
def remove_scene_panel_override(cls, panel: bpy.types.Panel) -> None:
polls = blenderbim.bim.original_scene_panels_polls
poll = polls[panel]
if poll is None:
del panel.poll
else:
panel.poll = poll
# panel might be already unregistered during blender exit
# or if it's addon was disabled
if panel.is_registered:
# reregister to activate new poll
bpy.utils.unregister_class(panel)
bpy.utils.register_class(panel)
del polls[panel]