Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Tönne <lukas.toenne@gmail.com>2021-07-16 10:07:59 +0300
committerLukas Tönne <lukas.toenne@gmail.com>2021-07-16 10:07:59 +0300
commit04379b5bde22e10073a6e379df1f24ff7eea7433 (patch)
treefcb12f6837a0e3f442a4cfb4c8076974f6484e7c /release/scripts/startup
parentc21fc1687ea687fa4dc03451d16d18d2d07c25ca (diff)
parentf61f4c89bb054d0de04154ab677b4b2afc580e53 (diff)
Merge branch 'master' into node-group-single-socket-nodes
Diffstat (limited to 'release/scripts/startup')
-rw-r--r--release/scripts/startup/bl_operators/assets.py83
-rw-r--r--release/scripts/startup/bl_ui/__init__.py24
-rw-r--r--release/scripts/startup/bl_ui/properties_data_mesh.py1
-rw-r--r--release/scripts/startup/bl_ui/space_clip.py3
-rw-r--r--release/scripts/startup/bl_ui/space_filebrowser.py27
-rw-r--r--release/scripts/startup/nodeitems_builtins.py2
6 files changed, 131 insertions, 9 deletions
diff --git a/release/scripts/startup/bl_operators/assets.py b/release/scripts/startup/bl_operators/assets.py
index 48f07a03773..d2655784afd 100644
--- a/release/scripts/startup/bl_operators/assets.py
+++ b/release/scripts/startup/bl_operators/assets.py
@@ -18,7 +18,9 @@
# <pep8 compliant>
from __future__ import annotations
+from pathlib import Path
+import bpy
from bpy.types import Operator
from bpy_extras.asset_utils import (
@@ -72,7 +74,88 @@ class ASSET_OT_tag_remove(Operator):
return {'FINISHED'}
+class ASSET_OT_open_containing_blend_file(Operator):
+ """Open the blend file that contains the active asset"""
+
+ bl_idname = "asset.open_containing_blend_file"
+ bl_label = "Open Blend File"
+ bl_options = {'REGISTER'}
+
+ _process = None # Optional[subprocess.Popen]
+
+ @classmethod
+ def poll(cls, context):
+ asset_file_handle = getattr(context, 'asset_file_handle', None)
+ asset_library = getattr(context, 'asset_library', None)
+
+ if not asset_library:
+ cls.poll_message_set("No asset library selected")
+ return False
+ if not asset_file_handle:
+ cls.poll_message_set("No asset selected")
+ return False
+ if asset_file_handle.local_id:
+ cls.poll_message_set("Selected asset is contained in the current file")
+ return False
+ return True
+
+ def execute(self, context):
+ asset_file_handle = context.asset_file_handle
+ asset_library = context.asset_library
+
+ if asset_file_handle.local_id:
+ self.report({'WARNING'}, "This asset is stored in the current blend file")
+ return {'CANCELLED'}
+
+ asset_lib_path = bpy.types.AssetHandle.get_full_library_path(asset_file_handle, asset_library)
+ self.open_in_new_blender(asset_lib_path)
+
+ wm = context.window_manager
+ self._timer = wm.event_timer_add(0.1, window=context.window)
+ wm.modal_handler_add(self)
+
+ return {'RUNNING_MODAL'}
+
+ def modal(self, context, event):
+ if event.type != 'TIMER':
+ return {'PASS_THROUGH'}
+
+ if self._process is None:
+ self.report({'ERROR'}, "Unable to find any running process")
+ self.cancel(context)
+ return {'CANCELLED'}
+
+ returncode = self._process.poll()
+ if returncode is None:
+ # Process is still running.
+ return {'RUNNING_MODAL'}
+
+ if returncode:
+ self.report({'WARNING'}, "Blender subprocess exited with error code %d" % returncode)
+
+ # TODO(Sybren): Replace this with a generic "reload assets" operator
+ # that can run outside of the Asset Browser context.
+ if bpy.ops.file.refresh.poll():
+ bpy.ops.file.refresh()
+ if bpy.ops.asset.list_refresh.poll():
+ bpy.ops.asset.list_refresh()
+
+ self.cancel(context)
+ return {'FINISHED'}
+
+ def cancel(self, context):
+ wm = context.window_manager
+ wm.event_timer_remove(self._timer)
+
+ def open_in_new_blender(self, filepath):
+ import subprocess
+
+ cli_args = [bpy.app.binary_path, str(filepath)]
+ self._process = subprocess.Popen(cli_args)
+
+
classes = (
ASSET_OT_tag_add,
ASSET_OT_tag_remove,
+ ASSET_OT_open_containing_blend_file,
)
diff --git a/release/scripts/startup/bl_ui/__init__.py b/release/scripts/startup/bl_ui/__init__.py
index ef705f8fe37..25484e905c3 100644
--- a/release/scripts/startup/bl_ui/__init__.py
+++ b/release/scripts/startup/bl_ui/__init__.py
@@ -117,13 +117,15 @@ def register():
for cls in mod.classes:
register_class(cls)
- # space_userprefs.py
from bpy.props import (
EnumProperty,
StringProperty,
)
- from bpy.types import WindowManager
+ from bpy.types import (
+ WindowManager,
+ )
+ # space_userprefs.py
def addon_filter_items(_self, _context):
import addon_utils
@@ -234,3 +236,21 @@ class UI_UL_list(bpy.types.UIList):
bpy.utils.register_class(UI_UL_list)
+
+
+class UI_MT_list_item_context_menu(bpy.types.Menu):
+ """
+ UI List item context menu definition. Scripts can append/prepend this to
+ add own operators to the context menu. They must check context though, so
+ their items only draw in a valid context and for the correct UI list.
+ """
+
+ bl_label = "List Item"
+ bl_idname = "UI_MT_list_item_context_menu"
+
+ def draw(self, context):
+ # Dummy function. This type is just for scripts to append their own
+ # context menu items.
+ pass
+
+bpy.utils.register_class(UI_MT_list_item_context_menu)
diff --git a/release/scripts/startup/bl_ui/properties_data_mesh.py b/release/scripts/startup/bl_ui/properties_data_mesh.py
index fb8aedd1f49..7f4328bb25a 100644
--- a/release/scripts/startup/bl_ui/properties_data_mesh.py
+++ b/release/scripts/startup/bl_ui/properties_data_mesh.py
@@ -41,7 +41,6 @@ class MESH_MT_vertex_group_context_menu(Menu):
).sort_type = 'BONE_HIERARCHY'
layout.separator()
layout.operator("object.vertex_group_copy", icon='DUPLICATE')
- layout.operator("object.vertex_group_copy_to_linked")
layout.operator("object.vertex_group_copy_to_selected")
layout.separator()
layout.operator("object.vertex_group_mirror", icon='ARROW_LEFTRIGHT').use_topology = False
diff --git a/release/scripts/startup/bl_ui/space_clip.py b/release/scripts/startup/bl_ui/space_clip.py
index ca7f9cdc100..afbc3abf302 100644
--- a/release/scripts/startup/bl_ui/space_clip.py
+++ b/release/scripts/startup/bl_ui/space_clip.py
@@ -72,8 +72,9 @@ class CLIP_PT_marker_display(Panel):
col.prop(view, "show_marker_pattern", text="Pattern")
col.prop(view, "show_marker_search", text="Search")
- col.active = view.show_track_path
col.prop(view, "show_track_path", text="Path")
+ col = col.column()
+ col.active = view.show_track_path
col.prop(view, "path_length", text="Length")
col = row.column()
diff --git a/release/scripts/startup/bl_ui/space_filebrowser.py b/release/scripts/startup/bl_ui/space_filebrowser.py
index 1ad88744b16..8ca93d2406c 100644
--- a/release/scripts/startup/bl_ui/space_filebrowser.py
+++ b/release/scripts/startup/bl_ui/space_filebrowser.py
@@ -552,6 +552,10 @@ class FILEBROWSER_MT_context_menu(Menu):
sub.operator_context = 'EXEC_DEFAULT'
sub.operator("file.delete", text="Delete")
+ active_asset = asset_utils.SpaceAssetInfo.get_active_asset(context)
+ if active_asset:
+ layout.operator("asset.open_containing_blend_file")
+
layout.separator()
sub = layout.row()
@@ -592,15 +596,28 @@ class ASSETBROWSER_PT_metadata(asset_utils.AssetBrowserPanel, Panel):
def draw(self, context):
layout = self.layout
- active_file = context.active_file
- active_asset = asset_utils.SpaceAssetInfo.get_active_asset(context)
+ asset_file_handle = context.asset_file_handle
- if not active_file or not active_asset:
+ if asset_file_handle is None:
layout.label(text="No asset selected", icon='INFO')
return
- # If the active file is an ID, use its name directly so renaming is possible from right here.
- layout.prop(context.id if context.id is not None else active_file, "name", text="")
+ asset_library = context.asset_library
+ asset_lib_path = bpy.types.AssetHandle.get_full_library_path(asset_file_handle, asset_library)
+
+ if asset_file_handle.local_id:
+ # If the active file is an ID, use its name directly so renaming is possible from right here.
+ layout.prop(asset_file_handle.local_id, "name", text="")
+ row = layout.row()
+ row.label(text="Source: Current File")
+ else:
+ layout.prop(asset_file_handle, "name", text="")
+ col = layout.column(align=True) # Just to reduce margin.
+ col.label(text="Source:")
+ row = col.row()
+ row.label(text=asset_lib_path)
+
+ row.operator("asset.open_containing_blend_file", text="", icon='TOOL_SETTINGS')
class ASSETBROWSER_PT_metadata_preview(asset_utils.AssetMetaDataPanel, Panel):
diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py
index 34d748d3694..2b0ac6046bc 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -553,6 +553,7 @@ geometry_node_categories = [
NodeItem("GeometryNodeCurveStar"),
NodeItem("GeometryNodeCurveSpiral"),
NodeItem("GeometryNodeCurveQuadraticBezier"),
+ NodeItem("GeometryNodeCurvePrimitiveQuadrilateral"),
NodeItem("GeometryNodeCurvePrimitiveBezierSegment"),
]),
GeometryNodeCategory("GEO_GEOMETRY", "Geometry", items=[
@@ -596,6 +597,7 @@ geometry_node_categories = [
NodeItem("GeometryNodeMeshLine"),
NodeItem("GeometryNodeMeshUVSphere"),
]),
+
GeometryNodeCategory("GEO_POINT", "Point", items=[
NodeItem("GeometryNodePointDistribute"),
NodeItem("GeometryNodePointInstance"),