Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 90 additions & 15 deletions Editor/DataVisualizer/Data/DataVisualizerSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ public sealed class DataVisualizerSettings : ScriptableObject

[SerializeField]
[ReadOnly]
internal string lastSelectedTypeName;
[FormerlySerializedAs("lastSelectedTypeName")]
internal string lastSelectedTypeFullName;

[SerializeField]
[ReadOnly]
Expand Down Expand Up @@ -96,6 +97,18 @@ public void MarkDirty()
#endif
}

public bool SetSelectActiveObject(bool value)
{
if (selectActiveObject == value)
{
return false;
}

selectActiveObject = value;
MarkDirty();
return true;
}

public void HydrateFrom(DataVisualizerUserState userState)
{
if (userState == null)
Expand All @@ -104,7 +117,7 @@ public void HydrateFrom(DataVisualizerUserState userState)
}

lastSelectedNamespaceKey = userState.lastSelectedNamespaceKey;
lastSelectedTypeName = userState.lastSelectedTypeName;
lastSelectedTypeFullName = userState.lastSelectedTypeFullName;
namespaceOrder = userState.namespaceOrder?.ToList() ?? new List<string>();
typeOrders =
userState.typeOrders?.Select(order => order.Clone()).ToList()
Expand Down Expand Up @@ -144,35 +157,65 @@ internal List<string> GetOrCreateObjectOrderList(string typeFullName)
return entry.ObjectGuids;
}

internal void SetLastObjectForType(string typeName, string guid)
internal bool SetLastObjectForType(string typeFullName, string guid)
{
if (string.IsNullOrWhiteSpace(typeName))
if (string.IsNullOrWhiteSpace(typeFullName))
{
return;
return false;
}

lastObjectSelections ??= new List<LastObjectSelectionEntry>();
int existingIndex = lastObjectSelections.FindIndex(e =>
string.Equals(e.typeFullName, typeFullName, StringComparison.Ordinal)
);
if (string.IsNullOrWhiteSpace(guid))
{
return;
if (existingIndex < 0)
{
return false;
}

lastObjectSelections.RemoveAt(existingIndex);
MarkDirty();
return true;
}

lastObjectSelections.RemoveAll(e =>
string.Equals(e.typeFullName, typeName, StringComparison.Ordinal)
);
lastObjectSelections.Add(
new LastObjectSelectionEntry { typeFullName = typeName, objectGuid = guid }
);
if (
existingIndex >= 0
&& string.Equals(
lastObjectSelections[existingIndex].objectGuid,
guid,
StringComparison.Ordinal
)
)
{
return false;
}

if (existingIndex >= 0)
{
lastObjectSelections[existingIndex].objectGuid = guid;
}
else
{
lastObjectSelections.Add(
new LastObjectSelectionEntry { typeFullName = typeFullName, objectGuid = guid }
);
}

MarkDirty();
return true;
}

internal string GetLastObjectForType(string typeName)
internal string GetLastObjectForType(string typeFullName)
{
if (string.IsNullOrWhiteSpace(typeName))
if (string.IsNullOrWhiteSpace(typeFullName))
{
return null;
}

return lastObjectSelections
.Find(e => string.Equals(e.typeFullName, typeName, StringComparison.Ordinal))
?.Find(e => string.Equals(e.typeFullName, typeFullName, StringComparison.Ordinal))
?.objectGuid;
}

Expand All @@ -199,6 +242,38 @@ internal bool HasCollapseState(string namespaceKey)
return entry != null;
}

public bool SetNamespaceCollapsed(string namespaceKey, bool isCollapsed)
{
if (string.IsNullOrWhiteSpace(namespaceKey))
{
return false;
}

namespaceCollapseStates ??= new List<NamespaceCollapseState>();
bool changed = NamespaceCollapseState.SetCollapsed(
namespaceCollapseStates,
namespaceKey,
isCollapsed
);
if (changed)
{
MarkDirty();
}

return changed;
}

public bool RemoveNamespaceCollapseState(string namespaceKey)
{
bool changed = NamespaceCollapseState.Remove(namespaceCollapseStates, namespaceKey);
if (changed)
{
MarkDirty();
}

return changed;
}

internal NamespaceCollapseState GetOrCreateCollapseState(string namespaceKey)
{
NamespaceCollapseState entry = namespaceCollapseStates.Find(o =>
Expand Down
113 changes: 98 additions & 15 deletions Editor/DataVisualizer/Data/DataVisualizerUserState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@ namespace WallstopStudios.DataVisualizer.Editor.Data
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Serialization;

[Serializable]
public sealed class DataVisualizerUserState
{
public string lastSelectedNamespaceKey = string.Empty;
public string lastSelectedTypeName = string.Empty;

[FormerlySerializedAs("lastSelectedTypeName")]
public string lastSelectedTypeFullName = string.Empty;

public List<string> namespaceOrder = new();
public List<NamespaceTypeOrder> typeOrders = new();
Expand All @@ -21,6 +25,31 @@ public sealed class DataVisualizerUserState
public List<TypeLabelFilterConfig> labelFilterConfigs = new();
public List<ProcessorState> processorStates = new();

public static DataVisualizerUserState FromJson(string json)
{
if (string.IsNullOrWhiteSpace(json))
{
return null;
}

DataVisualizerUserState userState = JsonUtility.FromJson<DataVisualizerUserState>(json);
if (userState == null)
{
return userState;
}

LegacyUserState legacyUserState = JsonUtility.FromJson<LegacyUserState>(json);
if (
string.IsNullOrWhiteSpace(userState.lastSelectedTypeFullName)
&& !string.IsNullOrWhiteSpace(legacyUserState?.lastSelectedTypeName)
)
{
userState.lastSelectedTypeFullName = legacyUserState.lastSelectedTypeName;
}

return userState;
}

public void HydrateFrom(DataVisualizerSettings settings)
{
if (settings == null)
Expand All @@ -29,7 +58,7 @@ public void HydrateFrom(DataVisualizerSettings settings)
}

lastSelectedNamespaceKey = settings.lastSelectedNamespaceKey;
lastSelectedTypeName = settings.lastSelectedTypeName;
lastSelectedTypeFullName = settings.lastSelectedTypeFullName;
namespaceOrder = settings.namespaceOrder?.ToList() ?? new List<string>();
typeOrders =
settings.typeOrders?.Select(order => order.Clone()).ToList()
Expand Down Expand Up @@ -67,35 +96,63 @@ public List<string> GetOrCreateObjectOrderList(string typeFullName)
return entry.ObjectGuids;
}

public void SetLastObjectForType(string typeName, string guid)
public bool SetLastObjectForType(string typeFullName, string guid)
{
if (string.IsNullOrWhiteSpace(typeName))
if (string.IsNullOrWhiteSpace(typeFullName))
{
return;
return false;
}

lastObjectSelections ??= new List<LastObjectSelectionEntry>();
int existingIndex = lastObjectSelections.FindIndex(e =>
string.Equals(e.typeFullName, typeFullName, StringComparison.Ordinal)
);
if (string.IsNullOrWhiteSpace(guid))
{
return;
if (existingIndex < 0)
{
return false;
}

lastObjectSelections.RemoveAt(existingIndex);
return true;
}

lastObjectSelections.RemoveAll(e =>
string.Equals(e.typeFullName, typeName, StringComparison.Ordinal)
);
lastObjectSelections.Add(
new LastObjectSelectionEntry { typeFullName = typeName, objectGuid = guid }
);
if (
existingIndex >= 0
&& string.Equals(
lastObjectSelections[existingIndex].objectGuid,
guid,
StringComparison.Ordinal
)
)
{
return false;
}

if (existingIndex >= 0)
{
lastObjectSelections[existingIndex].objectGuid = guid;
}
else
{
lastObjectSelections.Add(
new LastObjectSelectionEntry { typeFullName = typeFullName, objectGuid = guid }
);
}

return true;
}

public string GetLastObjectForType(string typeName)
public string GetLastObjectForType(string typeFullName)
{
if (string.IsNullOrWhiteSpace(typeName))
if (string.IsNullOrWhiteSpace(typeFullName))
{
return null;
}

return lastObjectSelections
.Find(e => string.Equals(e.typeFullName, typeName, StringComparison.Ordinal))
?.Find(e => string.Equals(e.typeFullName, typeFullName, StringComparison.Ordinal))
?.objectGuid;
}

Expand All @@ -122,6 +179,26 @@ public bool HasCollapseState(string namespaceKey)
return entry != null;
}

public bool SetNamespaceCollapsed(string namespaceKey, bool isCollapsed)
{
if (string.IsNullOrWhiteSpace(namespaceKey))
{
return false;
}

namespaceCollapseStates ??= new List<NamespaceCollapseState>();
return NamespaceCollapseState.SetCollapsed(
namespaceCollapseStates,
namespaceKey,
isCollapsed
);
}

public bool RemoveNamespaceCollapseState(string namespaceKey)
{
return NamespaceCollapseState.Remove(namespaceCollapseStates, namespaceKey);
}

public NamespaceCollapseState GetOrCreateCollapseState(string namespaceKey)
{
NamespaceCollapseState entry = namespaceCollapseStates.Find(o =>
Expand All @@ -136,5 +213,11 @@ public NamespaceCollapseState GetOrCreateCollapseState(string namespaceKey)
namespaceCollapseStates.Add(entry);
return entry;
}

[Serializable]
private sealed class LegacyUserState
{
public string lastSelectedTypeName;
}
}
}
48 changes: 48 additions & 0 deletions Editor/DataVisualizer/Data/NamespaceCollapseState.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,61 @@
namespace WallstopStudios.DataVisualizer.Editor.Data
{
using System;
using System.Collections.Generic;

[Serializable]
public sealed class NamespaceCollapseState
{
public string namespaceKey = string.Empty;
public bool isCollapsed;

public static bool SetCollapsed(
List<NamespaceCollapseState> states,
string namespaceKey,
bool isCollapsed
)
{
if (states == null || string.IsNullOrWhiteSpace(namespaceKey))
{
return false;
}

NamespaceCollapseState entry = states.Find(state =>
string.Equals(state?.namespaceKey, namespaceKey, StringComparison.Ordinal)
);
if (entry == null)
{
states.Add(
new NamespaceCollapseState
{
namespaceKey = namespaceKey,
isCollapsed = isCollapsed,
}
);
return true;
}

if (entry.isCollapsed == isCollapsed)
{
return false;
}

entry.isCollapsed = isCollapsed;
return true;
}

public static bool Remove(List<NamespaceCollapseState> states, string namespaceKey)
{
if (states == null || string.IsNullOrWhiteSpace(namespaceKey))
{
return false;
}

return states.RemoveAll(state =>
string.Equals(state?.namespaceKey, namespaceKey, StringComparison.Ordinal)
) > 0;
}

public NamespaceCollapseState Clone()
{
return new NamespaceCollapseState
Expand Down
Loading