update addons (for 5.2)

This commit is contained in:
Nathan
2026-07-14 14:44:58 -06:00
parent a232ea1c9c
commit e3310263f3
246 changed files with 21097 additions and 9607 deletions
@@ -26,6 +26,7 @@ from . import main_ops
from . import inspect_ops
from . import direct_use_ops
from . import missing_file_ops
from . import storage_navigate_ops
def register():
@@ -33,10 +34,12 @@ def register():
inspect_ops.register()
direct_use_ops.register()
missing_file_ops.register()
storage_navigate_ops.register()
def unregister():
main_ops.unregister()
inspect_ops.unregister()
direct_use_ops.unregister()
missing_file_ops.unregister()
missing_file_ops.unregister()
storage_navigate_ops.unregister()
@@ -0,0 +1,113 @@
"""
Operators for navigating from Atomic Storage rows to datablock users.
"""
import bpy
from bpy.props import StringProperty
from bpy.utils import register_class
from ..utils import compat
from ..utils import storage_nav
class ATOMIC_OT_storage_navigate_pick(bpy.types.Operator):
"""Navigate to a specific object from a storage row."""
bl_idname = "atomic.storage_navigate_pick"
bl_label = "Show User"
bl_options = {"INTERNAL"}
object_name: StringProperty(name="Object")
material_name: StringProperty(name="Material", default="")
action_name: StringProperty(name="Action", default="")
nav_mode: StringProperty(name="Navigation", default="viewport")
def execute(self, context):
target = {
"object": self.object_name,
"material": self.material_name,
"action": self.action_name,
"nav": self.nav_mode,
}
if storage_nav.apply_target(context, target):
return {"FINISHED"}
self.report({"WARNING"}, "Could not select '%s' in the current view layer" % self.object_name)
return {"CANCELLED"}
class ATOMIC_OT_storage_navigate(bpy.types.Operator):
"""Find and show users of a storage-index datablock."""
bl_idname = "atomic.storage_navigate"
bl_label = "Show Storage User"
bl_description = "Select and activate user object(s) from a storage row"
storage_type: StringProperty(name="Storage Type")
id_name: StringProperty(name="ID Name")
owner_object: StringProperty(name="Owner Object", default="")
owner_scene: StringProperty(name="Owner Scene", default="")
modifier_name: StringProperty(name="Modifier", default="")
def invoke(self, context, event):
self._targets = storage_nav.resolve_targets(
self.storage_type,
self.id_name,
owner_object=self.owner_object,
owner_scene=self.owner_scene,
modifier_name=self.modifier_name,
)
if not self._targets:
self.report({"WARNING"}, "No scene users found for '%s'" % self.id_name)
return {"CANCELLED"}
if len(self._targets) == 1:
return self.execute(context)
return context.window_manager.invoke_popup(self, width=240)
def draw(self, context):
layout = self.layout
layout.label(text="Select user:")
for target in self._targets:
op = layout.operator(
"atomic.storage_navigate_pick",
text=target["object"],
icon="OBJECT_DATA",
)
op.object_name = target["object"]
op.material_name = target.get("material", "")
op.action_name = target.get("action", "")
op.nav_mode = target.get("nav", "viewport")
def execute(self, context):
targets = getattr(self, "_targets", None)
if targets is None:
targets = storage_nav.resolve_targets(
self.storage_type,
self.id_name,
owner_object=self.owner_object,
owner_scene=self.owner_scene,
modifier_name=self.modifier_name,
)
if not targets:
self.report({"WARNING"}, "No scene users found for '%s'" % self.id_name)
return {"CANCELLED"}
if storage_nav.apply_target(context, targets[0]):
if len(targets) > 1:
self.report({"INFO"}, "Showing first of %d users" % len(targets))
return {"FINISHED"}
self.report({"WARNING"}, "Could not select user in the current view layer")
return {"CANCELLED"}
reg_list = (
ATOMIC_OT_storage_navigate,
ATOMIC_OT_storage_navigate_pick,
)
def register():
for item in reg_list:
register_class(item)
def unregister():
for item in reg_list:
compat.safe_unregister_class(item)