node visibility
This commit is contained in:
parent
6e5241ed2e
commit
52f2856307
@ -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<AsmdefGraphEditorWindow>("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<AsmdefSelectionView>("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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ using UnityEngine.UIElements;
|
||||
|
||||
namespace AsmdefHelper.DependencyGraph.Editor {
|
||||
public sealed class AsmdefGraphView : GraphView {
|
||||
readonly Dictionary<string, IAsmdefNodeView> asmdefNodeDict;
|
||||
public AsmdefGraphView(IEnumerable<Assembly> assemblies) {
|
||||
var assemblyArr = assemblies.ToArray();
|
||||
// zoom可能に
|
||||
@ -21,7 +22,7 @@ namespace AsmdefHelper.DependencyGraph.Editor {
|
||||
// ドラッグで描画範囲を動かせるように
|
||||
this.AddManipulator(new ContentDragger());
|
||||
// ノードの追加
|
||||
var asmdefNodeDict = new Dictionary<string, IAsmdefNodeView>();
|
||||
asmdefNodeDict = new Dictionary<string, IAsmdefNodeView>();
|
||||
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<Port> GetCompatiblePorts(Port startAnchor, NodeAdapter nodeAdapter) {
|
||||
return ports.ToList();
|
||||
}
|
||||
|
@ -11,6 +11,9 @@ namespace AsmdefHelper.DependencyGraph.Editor {
|
||||
public class AsmdefSelectionView : EditorWindow {
|
||||
const int toggleCount = 1000;
|
||||
static EditorWindow graphWindow;
|
||||
|
||||
Dictionary<string, (bool, Toggle)> toggleDict;
|
||||
IToggleCheckDelegate toggleDelegate;
|
||||
public void OnEnable() {
|
||||
graphWindow = GetWindow<AsmdefGraphEditorWindow>();
|
||||
|
||||
@ -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<string, (bool, Toggle)>(assemblies.Length);
|
||||
var sortedAssemblies = assemblies.OrderBy(x => x.name).ToArray();
|
||||
var scrollView = rootVisualElement.Q<ScrollView>(className: "ScrollView");
|
||||
for (var i = 0; i < toggleCount; i++) {
|
||||
var toggle = rootVisualElement.Q<Toggle>(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<string, (bool, Toggle)>();
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 片方を閉じる
|
||||
|
@ -0,0 +1,5 @@
|
||||
namespace AsmdefHelper.DependencyGraph.Editor {
|
||||
public interface IToggleCheckDelegate {
|
||||
void OnSelectionChanged(string label, bool isChecked);
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0c48da7c3f95419cbfc95c4ec2816489
|
||||
timeCreated: 1606313215
|
@ -1,5 +1,5 @@
|
||||
namespace AsmdefHelper.DependencyGraph.Editor.NodeView {
|
||||
public interface INodeView : IRect {
|
||||
public interface INodeView : IRect, IVisible {
|
||||
string Label { set; get; }
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,5 @@
|
||||
namespace AsmdefHelper.DependencyGraph.Editor.NodeView {
|
||||
public interface IVisible {
|
||||
bool Visibility { set; get; }
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: aecb56b3d2f84f408ad0aff39ba9e24c
|
||||
timeCreated: 1606396097
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user