From 52f285630710cb5adc2325034cf776e6df6c2b19 Mon Sep 17 00:00:00 2001 From: naninunenoy Date: Thu, 26 Nov 2020 22:16:00 +0900 Subject: [PATCH] node visibility --- .../Editor/AsmdefGraphEditorWindow.cs | 16 ++++++---- .../DependencyGraph/Editor/AsmdefGraphView.cs | 9 +++++- .../AsmdefSelectionView.cs | 31 +++++++++++++++++-- .../IToggleCheckDelegate.cs | 5 +++ .../IToggleCheckDelegate.cs.meta | 3 ++ .../Editor/NodeView/INodeView.cs | 2 +- .../Editor/NodeView/IVisible.cs | 5 +++ .../Editor/NodeView/IVisible.cs.meta | 3 ++ .../Editor/NodeView/UiElementsNodeView.cs | 5 +++ 9 files changed, 69 insertions(+), 10 deletions(-) create mode 100644 Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefSelectionView/IToggleCheckDelegate.cs create mode 100644 Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefSelectionView/IToggleCheckDelegate.cs.meta create mode 100644 Assets/AsmdefHelper/DependencyGraph/Editor/NodeView/IVisible.cs create mode 100644 Assets/AsmdefHelper/DependencyGraph/Editor/NodeView/IVisible.cs.meta diff --git a/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefGraphEditorWindow.cs b/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefGraphEditorWindow.cs index 63b9932..043aab4 100644 --- a/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefGraphEditorWindow.cs +++ b/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefGraphEditorWindow.cs @@ -1,11 +1,11 @@ -using System.Collections.Generic; -using System.Linq; -using UnityEditor; +using UnityEditor; using UnityEditor.Compilation; namespace AsmdefHelper.DependencyGraph.Editor { - public class AsmdefGraphEditorWindow : EditorWindow { + public class AsmdefGraphEditorWindow : EditorWindow, IToggleCheckDelegate { static AsmdefSelectionView selectionWindow; + AsmdefGraphView graphView; + [MenuItem("AsmdefHelper/Open DependencyGraph", priority = 2000)] public static void Open() { GetWindow("Asmdef Dependency"); @@ -15,14 +15,14 @@ namespace AsmdefHelper.DependencyGraph.Editor { // .asmdefをすべて取得 var asmdefs = CompilationPipeline.GetAssemblies(); // viewの作成 - var graphView = new AsmdefGraphView(asmdefs) { + graphView = new AsmdefGraphView(asmdefs) { style = { flexGrow = 1 } }; rootVisualElement.Add(graphView); // 選択ウィンドウも作成 selectionWindow = GetWindow("Asmdef Selection"); - selectionWindow.SetAsmdef(asmdefs); + selectionWindow.SetAsmdef(asmdefs, this); } // 片方を閉じる @@ -32,5 +32,9 @@ namespace AsmdefHelper.DependencyGraph.Editor { } selectionWindow = null; } + + void IToggleCheckDelegate.OnSelectionChanged(string label, bool isChecked) { + graphView.SetNodeVisibility(label, isChecked); + } } } diff --git a/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefGraphView.cs b/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefGraphView.cs index 5a8fd7c..68eba07 100644 --- a/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefGraphView.cs +++ b/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefGraphView.cs @@ -10,6 +10,7 @@ using UnityEngine.UIElements; namespace AsmdefHelper.DependencyGraph.Editor { public sealed class AsmdefGraphView : GraphView { + readonly Dictionary asmdefNodeDict; public AsmdefGraphView(IEnumerable assemblies) { var assemblyArr = assemblies.ToArray(); // zoom可能に @@ -21,7 +22,7 @@ namespace AsmdefHelper.DependencyGraph.Editor { // ドラッグで描画範囲を動かせるように this.AddManipulator(new ContentDragger()); // ノードの追加 - var asmdefNodeDict = new Dictionary(); + asmdefNodeDict = new Dictionary(); foreach (var asm in assemblyArr) { var node = new AsmdefNode(asm.name, contentContainer); AddElement(node); @@ -77,6 +78,12 @@ namespace AsmdefHelper.DependencyGraph.Editor { } } + public void SetNodeVisibility(string nodeName, bool visible_) { + if (asmdefNodeDict.TryGetValue(nodeName, out var node)) { + node.Visibility = visible_; + } + } + public override List GetCompatiblePorts(Port startAnchor, NodeAdapter nodeAdapter) { return ports.ToList(); } diff --git a/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefSelectionView/AsmdefSelectionView.cs b/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefSelectionView/AsmdefSelectionView.cs index e99d883..846e2a1 100644 --- a/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefSelectionView/AsmdefSelectionView.cs +++ b/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefSelectionView/AsmdefSelectionView.cs @@ -11,6 +11,9 @@ namespace AsmdefHelper.DependencyGraph.Editor { public class AsmdefSelectionView : EditorWindow { const int toggleCount = 1000; static EditorWindow graphWindow; + + Dictionary toggleDict; + IToggleCheckDelegate toggleDelegate; public void OnEnable() { graphWindow = GetWindow(); @@ -31,18 +34,42 @@ namespace AsmdefHelper.DependencyGraph.Editor { root.Add(labelFromUXML); } - public void SetAsmdef(Assembly[] assemblies) { + public void SetAsmdef(Assembly[] assemblies, IToggleCheckDelegate toggleDelegate_) { + toggleDict = new Dictionary(assemblies.Length); var sortedAssemblies = assemblies.OrderBy(x => x.name).ToArray(); var scrollView = rootVisualElement.Q(className: "ScrollView"); for (var i = 0; i < toggleCount; i++) { var toggle = rootVisualElement.Q(className: $"toggle{i}"); if (i < sortedAssemblies.Length) { - toggle.text = sortedAssemblies[i].name; + var assemblyName = sortedAssemblies[i].name; + toggle.text = assemblyName; toggle.value = true; + toggleDict.Add(assemblyName, (true, toggle)); } else { scrollView.Remove(toggle); } } + + toggleDelegate = toggleDelegate_; + } + + void OnGUI() { + // toggle の更新を監視 (onValueChangedが無さそう) + var updated = new Dictionary(); + foreach (var pair in toggleDict) { + var (prev, toggle) = pair.Value; + var current = toggle.value; + if (prev != current) { + toggleDelegate?.OnSelectionChanged(pair.Key, current); + updated.Add(pair.Key, (current, toggle)); + } + } + // 状態更新 + if (updated.Any()) { + foreach (var pair in updated) { + toggleDict[pair.Key] = pair.Value; + } + } } // 片方を閉じる diff --git a/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefSelectionView/IToggleCheckDelegate.cs b/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefSelectionView/IToggleCheckDelegate.cs new file mode 100644 index 0000000..2aae698 --- /dev/null +++ b/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefSelectionView/IToggleCheckDelegate.cs @@ -0,0 +1,5 @@ +namespace AsmdefHelper.DependencyGraph.Editor { + public interface IToggleCheckDelegate { + void OnSelectionChanged(string label, bool isChecked); + } +} diff --git a/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefSelectionView/IToggleCheckDelegate.cs.meta b/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefSelectionView/IToggleCheckDelegate.cs.meta new file mode 100644 index 0000000..1854f3f --- /dev/null +++ b/Assets/AsmdefHelper/DependencyGraph/Editor/AsmdefSelectionView/IToggleCheckDelegate.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0c48da7c3f95419cbfc95c4ec2816489 +timeCreated: 1606313215 \ No newline at end of file diff --git a/Assets/AsmdefHelper/DependencyGraph/Editor/NodeView/INodeView.cs b/Assets/AsmdefHelper/DependencyGraph/Editor/NodeView/INodeView.cs index 1d099bf..ead4d62 100644 --- a/Assets/AsmdefHelper/DependencyGraph/Editor/NodeView/INodeView.cs +++ b/Assets/AsmdefHelper/DependencyGraph/Editor/NodeView/INodeView.cs @@ -1,5 +1,5 @@ namespace AsmdefHelper.DependencyGraph.Editor.NodeView { - public interface INodeView : IRect { + public interface INodeView : IRect, IVisible { string Label { set; get; } } } diff --git a/Assets/AsmdefHelper/DependencyGraph/Editor/NodeView/IVisible.cs b/Assets/AsmdefHelper/DependencyGraph/Editor/NodeView/IVisible.cs new file mode 100644 index 0000000..d0027c5 --- /dev/null +++ b/Assets/AsmdefHelper/DependencyGraph/Editor/NodeView/IVisible.cs @@ -0,0 +1,5 @@ +namespace AsmdefHelper.DependencyGraph.Editor.NodeView { + public interface IVisible { + bool Visibility { set; get; } + } +} diff --git a/Assets/AsmdefHelper/DependencyGraph/Editor/NodeView/IVisible.cs.meta b/Assets/AsmdefHelper/DependencyGraph/Editor/NodeView/IVisible.cs.meta new file mode 100644 index 0000000..312649c --- /dev/null +++ b/Assets/AsmdefHelper/DependencyGraph/Editor/NodeView/IVisible.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: aecb56b3d2f84f408ad0aff39ba9e24c +timeCreated: 1606396097 \ No newline at end of file diff --git a/Assets/AsmdefHelper/DependencyGraph/Editor/NodeView/UiElementsNodeView.cs b/Assets/AsmdefHelper/DependencyGraph/Editor/NodeView/UiElementsNodeView.cs index 4447e20..bbd6ef7 100644 --- a/Assets/AsmdefHelper/DependencyGraph/Editor/NodeView/UiElementsNodeView.cs +++ b/Assets/AsmdefHelper/DependencyGraph/Editor/NodeView/UiElementsNodeView.cs @@ -22,5 +22,10 @@ namespace AsmdefHelper.DependencyGraph.Editor.NodeView { public float Height => contentRect.height; public float Width => contentRect.width; + + public bool Visibility { + get => visible; + set => visible = value; + } } }