[Bf-blender-cvs] [ef58467594a] asset-browser-grid-view: Store active item, asset metadata sidebar

Julian Eisel noreply at git.blender.org
Tue Feb 15 21:44:34 CET 2022


Commit: ef58467594a10a7c17d5ff780e91f83203d20a7a
Author: Julian Eisel
Date:   Tue Feb 15 21:36:21 2022 +0100
Branches: asset-browser-grid-view
https://developer.blender.org/rBef58467594a10a7c17d5ff780e91f83203d20a7a

Store active item, asset metadata sidebar

Also:
- Fix double-free bug when closing Blender
- Fix issues with identifying assets with the same name.
- Add functions to store asset handle as pointer in the asset list storage,
  asset browser exposes it via context.

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

M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
M	release/scripts/startup/bl_ui/space_assets.py
M	release/scripts/startup/bl_ui/space_filebrowser.py
M	source/blender/blenkernel/BKE_context.h
M	source/blender/blenkernel/intern/context.c
M	source/blender/editors/asset/ED_asset_handle.h
M	source/blender/editors/asset/ED_asset_list.hh
M	source/blender/editors/asset/intern/asset_handle.cc
M	source/blender/editors/asset/intern/asset_list.cc
M	source/blender/editors/include/UI_grid_view.hh
M	source/blender/editors/interface/grid_view.cc
M	source/blender/editors/interface/interface_template_asset_view.cc
M	source/blender/editors/space_assets/asset_browser_draw.cc
M	source/blender/editors/space_assets/asset_browser_panels.cc
M	source/blender/editors/space_assets/asset_view.cc
M	source/blender/editors/space_assets/asset_view.hh
M	source/blender/editors/space_assets/space_assets.cc
M	source/blender/makesdna/DNA_space_types.h
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/intern/rna_asset.c
M	source/blender/makesrna/intern/rna_context.c
M	source/blender/makesrna/intern/rna_space.c

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

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 38f429b0fab..48532d799e0 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -2288,6 +2288,9 @@ def km_asset_browser(params):
     items.extend([
         ("wm.context_toggle", {"type": 'T', "value": 'PRESS'},
          {"properties": [("data_path", 'space_data.show_region_nav_bar')]}),
+        *_template_space_region_type_toggle(
+            sidebar_key={"type": 'N', "value": 'PRESS'},
+        ),
     ])
 
     return keymap
diff --git a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
index 8a0731db4c2..e942c04f799 100644
--- a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
+++ b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
@@ -4102,6 +4102,7 @@ def generate_keymaps_impl(params=None):
         km_clip_editor(params),
         km_clip_graph_editor(params),
         km_clip_dopesheet_editor(params),
+        # TODO asset browser
 
         # Animation.
         km_frames(params),
diff --git a/release/scripts/startup/bl_ui/space_assets.py b/release/scripts/startup/bl_ui/space_assets.py
index 8319d5c18d2..80b73e1b004 100644
--- a/release/scripts/startup/bl_ui/space_assets.py
+++ b/release/scripts/startup/bl_ui/space_assets.py
@@ -17,7 +17,8 @@
 # ##### END GPL LICENSE BLOCK #####
 
 # <pep8 compliant>
-from bpy.types import Header, Menu
+import bpy
+from bpy.types import Header, Menu, Panel, UIList
 
 
 class ASSETBROWSER_HT_header(Header):
@@ -31,6 +32,23 @@ class ASSETBROWSER_HT_header(Header):
 
         ASSETBROWSER_MT_editor_menus.draw_collapsible(context, layout)
 
+        layout.separator_spacer()
+
+        layout.operator(
+            "screen.region_toggle",
+            text="",
+            icon='PREFERENCES',
+            depress=is_option_region_visible(context, space)
+        ).region_type = 'UI'
+
+
+def is_option_region_visible(context, space):
+    for region in context.area.regions:
+        if region.type == 'UI' and region.width <= 1:
+            return False
+
+    return True
+
 
 class ASSETBROWSER_MT_editor_menus(Menu):
     bl_idname = "ASSETBROWSER_MT_editor_menus"
@@ -75,12 +93,132 @@ class ASSETBROWSER_MT_edit(Menu):
         layout.operator("asset.catalog_redo", text="Redo")
 
 
+class ASSETBROWSER_PT_metadata(Panel):
+    bl_space_type = 'ASSET_BROWSER'
+    bl_region_type = 'UI'
+    bl_label = "Asset Metadata"
+    bl_options = {'HIDE_HEADER'}
+    bl_category = 'Metadata'
+
+    def draw(self, context):
+        layout = self.layout
+        wm = context.window_manager
+        asset_handle = context.asset_handle
+        asset_file = asset_handle.file_data
+
+        if asset_handle is None:
+            layout.label(text="No active asset", icon='INFO')
+            return
+
+        asset_library_ref = context.asset_library_ref
+        asset_lib_path = bpy.types.AssetHandle.get_full_library_path(asset_file, asset_library_ref)
+
+        prefs = context.preferences
+        show_asset_debug_info = prefs.view.show_developer_ui and prefs.experimental.show_asset_debug_info
+
+        layout.use_property_split = True
+        layout.use_property_decorate = False  # No animation.
+
+        if asset_handle.local_id:
+            # If the active file is an ID, use its name directly so renaming is possible from right here.
+            layout.prop(asset_handle.local_id, "name")
+
+            if show_asset_debug_info:
+                col = layout.column(align=True)
+                col.label(text="Asset Catalog:")
+                col.prop(asset_handle.local_id.asset_data, "catalog_id", text="UUID")
+                col.prop(asset_handle.local_id.asset_data, "catalog_simple_name", text="Simple Name")
+        else:
+            layout.prop(asset_file, "name")
+
+            if show_asset_debug_info:
+                col = layout.column(align=True)
+                col.enabled = False
+                col.label(text="Asset Catalog:")
+                col.prop(asset_file.asset_data, "catalog_id", text="UUID")
+                col.prop(asset_file.asset_data, "catalog_simple_name", text="Simple Name")
+
+        row = layout.row(align=True)
+        row.prop(wm, "asset_path_dummy", text="Source")
+        row.operator("asset.open_containing_blend_file", text="", icon='TOOL_SETTINGS')
+
+        layout.prop(asset_file.asset_data, "description")
+        layout.prop(asset_file.asset_data, "author")
+
+
+class ASSETBROWSER_PT_metadata_preview(Panel):
+    bl_space_type = 'ASSET_BROWSER'
+    bl_region_type = 'UI'
+    bl_label = "Preview"
+    bl_category = 'Metadata'
+
+    def draw(self, context):
+        layout = self.layout
+        asset_handle = context.asset_handle
+        asset_file = asset_handle.file_data
+
+        row = layout.row()
+        box = row.box()
+        box.template_icon(icon_value=asset_file.preview_icon_id, scale=5.0)
+
+        col = row.column(align=True)
+        col.operator("ed.lib_id_load_custom_preview", icon='FILEBROWSER', text="")
+        col.separator()
+        col.operator("ed.lib_id_generate_preview", icon='FILE_REFRESH', text="")
+        col.menu("ASSETBROWSER_MT_metadata_preview_menu", icon='DOWNARROW_HLT', text="")
+
+
+class ASSETBROWSER_MT_metadata_preview_menu(Menu):
+    bl_label = "Preview"
+
+    def draw(self, context):
+        layout = self.layout
+        layout.operator("ed.lib_id_generate_preview_from_object", text="Render Active Object")
+
+
+class ASSETBROWSER_PT_metadata_tags(Panel):
+    bl_space_type = 'ASSET_BROWSER'
+    bl_region_type = 'UI'
+    bl_label = "Tags"
+    bl_category = 'Metadata'
+
+    def draw(self, context):
+        layout = self.layout
+        asset = context.asset_handle
+        asset_data = asset.file_data.asset_data
+
+        row = layout.row()
+        row.template_list("ASSETBROWSEROLD_UL_metadata_tags", "asset_tags", asset_data, "tags",
+                          asset_data, "active_tag", rows=4)
+
+        col = row.column(align=True)
+        col.operator("asset.tag_add", icon='ADD', text="")
+        col.operator("asset.tag_remove", icon='REMOVE', text="")
+
+
+class ASSETBROWSER_UL_metadata_tags(UIList):
+    def draw_item(self, _context, layout, _data, item, icon, _active_data, _active_propname, _index):
+        tag = item
+
+        row = layout.row(align=True)
+        # Non-editable entries would show grayed-out, which is bad in this specific case, so switch to mere label.
+        if tag.is_property_readonly("name"):
+            row.label(text=tag.name, icon_value=icon)
+        else:
+            row.prop(tag, "name", text="", emboss=False, icon_value=icon)
+
+
 classes = (
     ASSETBROWSER_HT_header,
     ASSETBROWSER_MT_editor_menus,
     ASSETBROWSER_MT_view,
     ASSETBROWSER_MT_select,
     ASSETBROWSER_MT_edit,
+    ASSETBROWSER_PT_metadata,
+    ASSETBROWSER_PT_metadata_preview,
+    ASSETBROWSER_MT_metadata_preview_menu,
+    ASSETBROWSER_PT_metadata_tags,
+    ASSETBROWSER_UL_metadata_tags,
 )
 
 if __name__ == "__main__":  # only for live edit.
diff --git a/release/scripts/startup/bl_ui/space_filebrowser.py b/release/scripts/startup/bl_ui/space_filebrowser.py
index d9aa58f19e6..2cf1fa5abfa 100644
--- a/release/scripts/startup/bl_ui/space_filebrowser.py
+++ b/release/scripts/startup/bl_ui/space_filebrowser.py
@@ -680,7 +680,7 @@ class ASSETBROWSEROLD_MT_edit(AssetBrowserMenu, Menu):
         layout.operator("asset.catalog_redo", text="Redo")
 
 
-class ASSETBROWSER_PT_metadata(asset_utils.AssetBrowserPanel, Panel):
+class ASSETBROWSEROLD_PT_metadata(asset_utils.AssetBrowserPanel, Panel):
     bl_region_type = 'TOOL_PROPS'
     bl_label = "Asset Metadata"
     bl_options = {'HIDE_HEADER'}
@@ -730,7 +730,7 @@ class ASSETBROWSER_PT_metadata(asset_utils.AssetBrowserPanel, Panel):
         layout.prop(asset_file_handle.asset_data, "author")
 
 
-class ASSETBROWSER_PT_metadata_preview(asset_utils.AssetMetaDataPanel, Panel):
+class ASSETBROWSEROLD_PT_metadata_preview(asset_utils.AssetMetaDataPanel, Panel):
     bl_label = "Preview"
 
     def draw(self, context):
@@ -745,10 +745,10 @@ class ASSETBROWSER_PT_metadata_preview(asset_utils.AssetMetaDataPanel, Panel):
         col.operator("ed.lib_id_load_custom_preview", icon='FILEBROWSER', text="")
         col.separator()
         col.operator("ed.lib_id_generate_preview", icon='FILE_REFRESH', text="")
-        col.menu("ASSETBROWSER_MT_metadata_preview_menu", icon='DOWNARROW_HLT', text="")
+        col.menu("ASSETBROWSEROLD_MT_metadata_preview_menu", icon='DOWNARROW_HLT', text="")
 
 
-class ASSETBROWSER_MT_metadata_preview_menu(bpy.types.Menu):
+class ASSETBROWSEROLD_MT_metadata_preview_menu(bpy.types.Menu):
     bl_label = "Preview"
 
     def draw(self, context):
@@ -756,7 +756,7 @@ class ASSETBROWSER_MT_metadata_preview_menu(bpy.types.Menu):
         layout.operator("ed.lib_id_generate_preview_from_object", text="Render Active Object")
 
 
-class ASSETBROWSER_PT_metadata_tags(asset_utils.AssetMetaDataPanel, Panel):
+class ASSETBROWSEROLD_PT_metadata_tags(asset_utils.AssetMetaDataPanel, Panel):
     bl_label = "Tags"
 
     def draw(self, context):
@@ -764,7 +764,7 @@ class ASSETBROWSER_PT_metadata_tags(asset_utils.AssetMetaDataPanel, Panel):
         asset_data = asset_utils.SpaceAssetInfo.get_active_asset(context)
 
         row = layout.row()
-        row.template_list("ASSETBROWSER_UL_metadata_tags", "asset_tags", asset_data, "tags",
+        row.template_list("ASSETBROWSEROLD_UL_metadata_tags", "asset_tags", asset_data, "tags",
                           asset_data, "active_tag", rows=4)
 
         col = row.column(align=True)
@@ -772,7 +772,7 @@ class ASSETBROWSER_PT_metadata_tags(asset_utils.AssetMetaDataPanel, Panel):
         col.operator("asset.tag_remove", icon='REMOVE', text="")
 
 
-class ASSETBROWSER_UL_metadata_tags(UIList):
+class ASSETBROWSEROLD_UL_metadata_tags(UIList):
     def draw_item(self, _context, layout, _data, item, icon, _active_da

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list