AnimCupboard: ID Management Pie #127
@ -37,17 +37,18 @@ class IDMAN_MT_relationship_pie(bpy.types.Menu):
|
||||
pie.operator('outliner.better_purge', icon='TRASH')
|
||||
# ^
|
||||
|
||||
id = self.get_id(context)
|
||||
id_type = ID_CLASS_TO_IDENTIFIER.get(type(id))
|
||||
if id_type:
|
||||
remap = pie.operator(
|
||||
'outliner.remap_users', icon='FILE_REFRESH', text="Remap Users"
|
||||
)
|
||||
id = self.get_id(context)
|
||||
id_type = ID_CLASS_TO_IDENTIFIER.get(type(id))
|
||||
if not id_type:
|
||||
pass # TODO
|
||||
remap.id_type = id_type
|
||||
remap.id_name_source = id.name
|
||||
if id.library:
|
||||
remap.library_path_source = id.library.filepath
|
||||
else:
|
||||
pie.label(text="Cannot remap unknwon ID type: " + str(type(id)))
|
||||
|
||||
# ^>
|
||||
id = OUTLINER_OT_relink_overridden_asset.get_id(context)
|
||||
@ -200,17 +201,10 @@ class OUTLINER_OT_remap_users(bpy.types.Operator):
|
||||
bl_options = {'INTERNAL', 'UNDO'}
|
||||
|
||||
def update_library_path(self, context):
|
||||
def get_source_id():
|
||||
# WTF??? When I try to access this through self, it says it doesn't exist... so I had to duplicate it!? TODO
|
||||
storage = get_id_storage(self.id_type)
|
||||
if self.library_path_source:
|
||||
return storage.get((self.id_name_source, self.library_path_source))
|
||||
return storage.get((self.id_name_source, None))
|
||||
|
||||
# Prepare the ID selector.
|
||||
remap_targets = context.scene.remap_targets
|
||||
remap_targets.clear()
|
||||
source_id = get_source_id()
|
||||
source_id = get_id(self.id_name_source, self.id_type, self.library_path_source)
|
||||
for id in get_id_storage(self.id_type):
|
||||
if id == source_id:
|
||||
continue
|
||||
@ -220,18 +214,6 @@ class OUTLINER_OT_remap_users(bpy.types.Operator):
|
||||
id_entry = remap_targets.add()
|
||||
id_entry.name = id.name
|
||||
|
||||
def get_source_id(self):
|
||||
storage = get_id_storage(self.id_type)
|
||||
if self.library_path_source:
|
||||
return storage.get((self.id_name_source, self.library_path_source))
|
||||
return storage.get((self.id_name_source, None))
|
||||
|
||||
def get_target_id(self):
|
||||
storage = get_id_storage(self.id_type)
|
||||
if self.library_path != 'Local Data':
|
||||
return storage.get((self.id_name_target, self.library_path))
|
||||
return storage.get((self.id_name_target, None))
|
||||
|
||||
library_path: StringProperty(
|
||||
name="Library",
|
||||
description="Library path, if we want to remap to a linked ID",
|
||||
@ -259,10 +241,10 @@ class OUTLINER_OT_remap_users(bpy.types.Operator):
|
||||
remap_target_libraries.clear()
|
||||
local = remap_target_libraries.add()
|
||||
local.name = "Local Data"
|
||||
source_id_type = type(self.get_source_id())
|
||||
source_id = get_id(self.id_name_source, self.id_type, self.library_path_source)
|
||||
for lib in bpy.data.libraries:
|
||||
for id in lib.users_id:
|
||||
if type(id) == source_id_type:
|
||||
if type(id) == type(source_id):
|
||||
lib_entry = remap_target_libraries.add()
|
||||
lib_entry.name = lib.filepath
|
||||
break
|
||||
@ -278,7 +260,7 @@ class OUTLINER_OT_remap_users(bpy.types.Operator):
|
||||
|
||||
scene = context.scene
|
||||
row = layout.row()
|
||||
id = self.get_source_id()
|
||||
id = get_id(self.id_name_source, self.id_type, self.library_path_source)
|
||||
id_icon = get_datablock_icon(id)
|
||||
split = row.split()
|
||||
split.row().label(text="Anything that was referencing this:")
|
||||
@ -316,8 +298,8 @@ class OUTLINER_OT_remap_users(bpy.types.Operator):
|
||||
)
|
||||
return {'CANCELLED'}
|
||||
|
||||
source_id = self.get_source_id()
|
||||
target_id = self.get_target_id()
|
||||
source_id = get_id(self.id_name_source, self.id_type, self.library_path_source)
|
||||
target_id = get_id(self.id_name_target, self.id_type, self.library_path)
|
||||
source_id.user_remap(target_id)
|
||||
|
||||
return {'FINISHED'}
|
||||
@ -424,6 +406,13 @@ def get_id_storage(id_type) -> "bpy.data.something":
|
||||
return getattr(bpy.data, storage)
|
||||
|
||||
|
||||
def get_id(id_name: str, id_type: str, lib_path=""):
|
||||
storage = get_id_storage(id_type)
|
||||
if lib_path:
|
||||
return storage.get((id_name, lib_path))
|
||||
return storage.get((id_name, None))
|
||||
|
||||
|
||||
### Library utilities
|
||||
def get_library_icon(library: bpy.types.Library) -> str:
|
||||
"""Return the library or the broken library icon, as appropriate."""
|
||||
|
Loading…
Reference in New Issue
Block a user