Pose Library: Update to use the asset shelf (when enabled) #104546

Merged
Julian Eisel merged 33 commits from asset-shelf into main 2023-08-04 15:00:21 +02:00
2 changed files with 53 additions and 0 deletions

View File

@ -12,6 +12,7 @@ from bpy.types import (
Context, Context,
Menu, Menu,
Panel, Panel,
UILayout,
UIList, UIList,
WindowManager, WindowManager,
WorkSpace, WorkSpace,
@ -29,12 +30,54 @@ class PoseLibraryPanel:
return cls.pose_library_panel_poll(context) return cls.pose_library_panel_poll(context)
class VIEW3D_AST_pose_library(bpy.types.AssetShelf):
bl_space_type = "VIEW_3D"
# We have own keymap items to add custom drag behavior (pose blending), disable the default
# asset dragging.
bl_options = {'NO_ASSET_DRAG'}
@classmethod
def poll(cls, context: Context) -> bool:
return PoseLibraryPanel.poll(context)
@classmethod
def asset_poll(cls, asset: AssetHandle) -> bool:
return asset.file_data.id_type == 'ACTION'
@classmethod
def draw_context_menu(cls, _context: Context, _asset: AssetHandle, layout: UILayout):
# Make sure these operator properties match those used in `VIEW3D_PT_pose_library`.
layout.operator("poselib.apply_pose_asset", text="Apply Pose").flipped = False
layout.operator("poselib.apply_pose_asset", text="Apply Pose Flipped").flipped = True
with operator_context(layout, 'INVOKE_DEFAULT'):
layout.operator("poselib.blend_pose_asset", text="Blend Pose")
layout.separator()
props = layout.operator("poselib.pose_asset_select_bones", text="Select Pose Bones")
props.select = True
props = layout.operator("poselib.pose_asset_select_bones", text="Deselect Pose Bones")
props.select = False
layout.separator()
layout.operator("asset.open_containing_blend_file")
class VIEW3D_PT_pose_library(PoseLibraryPanel, Panel): class VIEW3D_PT_pose_library(PoseLibraryPanel, Panel):
bl_space_type = "VIEW_3D" bl_space_type = "VIEW_3D"
bl_region_type = "UI" bl_region_type = "UI"
bl_category = "Animation" bl_category = "Animation"
bl_label = "Pose Library" bl_label = "Pose Library"
@classmethod
def poll(cls, context: Context) -> bool:
prefs = context.preferences
# Use Asset Shelf as UI instead of the old asset-view template in the sidebar.
if prefs.experimental.use_asset_shelf:
return False
return PoseLibraryPanel.poll(context)
def draw(self, context: Context) -> None: def draw(self, context: Context) -> None:
layout = self.layout layout = self.layout
@ -194,6 +237,7 @@ classes = (
DOPESHEET_PT_asset_panel, DOPESHEET_PT_asset_panel,
VIEW3D_PT_pose_library, VIEW3D_PT_pose_library,
ASSETBROWSER_MT_asset, ASSETBROWSER_MT_asset,
VIEW3D_AST_pose_library,
) )
_register, _unregister = bpy.utils.register_classes_factory(classes) _register, _unregister = bpy.utils.register_classes_factory(classes)

View File

@ -21,6 +21,15 @@ def register() -> None:
kmi = km.keymap_items.new("poselib.apply_pose_asset", "LEFTMOUSE", "DOUBLE_CLICK") kmi = km.keymap_items.new("poselib.apply_pose_asset", "LEFTMOUSE", "DOUBLE_CLICK")
addon_keymaps.append((km, kmi)) addon_keymaps.append((km, kmi))
# Asset Shelf
km = wm.keyconfigs.addon.keymaps.new(name="Asset Shelf")
# Click to apply pose.
kmi = km.keymap_items.new("poselib.apply_pose_asset", "LEFTMOUSE", "CLICK")
addon_keymaps.append((km, kmi))
# Drag to blend pose.
kmi = km.keymap_items.new("poselib.blend_pose_asset", "LEFTMOUSE", "CLICK_DRAG")
addon_keymaps.append((km, kmi))
def unregister() -> None: def unregister() -> None:
# Clear shortcuts from the keymap. # Clear shortcuts from the keymap.