mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-23 00:49:18 +01:00
Resource Tree: Add ChangedItem-like icons, make UI prettier
This commit is contained in:
parent
db521dd21c
commit
30c622c085
8 changed files with 139 additions and 95 deletions
|
|
@ -2,12 +2,14 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using Penumbra.GameData.Enums;
|
||||
using Penumbra.String.Classes;
|
||||
using ChangedItemIcon = Penumbra.UI.ChangedItemDrawer.ChangedItemIcon;
|
||||
|
||||
namespace Penumbra.Interop.ResourceTree;
|
||||
|
||||
public class ResourceNode
|
||||
{
|
||||
public readonly string? Name;
|
||||
public readonly ChangedItemIcon Icon;
|
||||
public readonly ResourceType Type;
|
||||
public readonly nint ObjectAddress;
|
||||
public readonly nint ResourceHandle;
|
||||
|
|
@ -18,9 +20,11 @@ public class ResourceNode
|
|||
public readonly bool Internal;
|
||||
public readonly List<ResourceNode> Children;
|
||||
|
||||
public ResourceNode(string? name, ResourceType type, nint objectAddress, nint resourceHandle, Utf8GamePath gamePath, FullPath fullPath, ulong length, bool @internal)
|
||||
public ResourceNode(UIData uiData, ResourceType type, nint objectAddress, nint resourceHandle, Utf8GamePath gamePath, FullPath fullPath,
|
||||
ulong length, bool @internal)
|
||||
{
|
||||
Name = name;
|
||||
Name = uiData.Name;
|
||||
Icon = uiData.Icon;
|
||||
Type = type;
|
||||
ObjectAddress = objectAddress;
|
||||
ResourceHandle = resourceHandle;
|
||||
|
|
@ -35,10 +39,11 @@ public class ResourceNode
|
|||
Children = new List<ResourceNode>();
|
||||
}
|
||||
|
||||
public ResourceNode(string? name, ResourceType type, nint objectAddress, nint resourceHandle, Utf8GamePath[] possibleGamePaths, FullPath fullPath,
|
||||
public ResourceNode(UIData uiData, ResourceType type, nint objectAddress, nint resourceHandle, Utf8GamePath[] possibleGamePaths, FullPath fullPath,
|
||||
ulong length, bool @internal)
|
||||
{
|
||||
Name = name;
|
||||
Name = uiData.Name;
|
||||
Icon = uiData.Icon;
|
||||
Type = type;
|
||||
ObjectAddress = objectAddress;
|
||||
ResourceHandle = resourceHandle;
|
||||
|
|
@ -50,9 +55,10 @@ public class ResourceNode
|
|||
Children = new List<ResourceNode>();
|
||||
}
|
||||
|
||||
private ResourceNode(string? name, ResourceNode originalResourceNode)
|
||||
private ResourceNode(UIData uiData, ResourceNode originalResourceNode)
|
||||
{
|
||||
Name = name;
|
||||
Name = uiData.Name;
|
||||
Icon = uiData.Icon;
|
||||
Type = originalResourceNode.Type;
|
||||
ObjectAddress = originalResourceNode.ObjectAddress;
|
||||
ResourceHandle = originalResourceNode.ResourceHandle;
|
||||
|
|
@ -64,6 +70,15 @@ public class ResourceNode
|
|||
Children = originalResourceNode.Children;
|
||||
}
|
||||
|
||||
public ResourceNode WithName(string? name)
|
||||
=> string.Equals(Name, name, StringComparison.Ordinal) ? this : new ResourceNode(name, this);
|
||||
public ResourceNode WithUIData(string? name, ChangedItemIcon icon)
|
||||
=> string.Equals(Name, name, StringComparison.Ordinal) && Icon == icon ? this : new ResourceNode(new(name, icon), this);
|
||||
|
||||
public ResourceNode WithUIData(UIData uiData)
|
||||
=> string.Equals(Name, uiData.Name, StringComparison.Ordinal) && Icon == uiData.Icon ? this : new ResourceNode(uiData, this);
|
||||
|
||||
public readonly record struct UIData(string? Name, ChangedItemIcon Icon)
|
||||
{
|
||||
public readonly UIData PrependName(string prefix)
|
||||
=> Name == null ? this : new(prefix + Name, Icon);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue