using System; using System.Collections; using System.Collections.Generic; using Convention.WindowsUI; using Convention.WindowsUI.Variant; using UnityEngine; using UnityEngine.Events; namespace Convention.Workflow { public class GraphInputWindow : MonoSingleton, ITitle, IText { [Resources, SerializeField, OnlyNotNullMode] private Text Title; [Resources, SerializeField, OnlyNotNullMode] private Text Description; [Resources, SerializeField, OnlyNotNullMode] private ModernUIButton AddContentInput; [Resources, SerializeField, HopeNotNull, Header(nameof(HierarchyWindow))] private HierarchyWindow MyHierarchyWindow; private PropertiesWindow.ItemEntry StartNodeInputsTab, FunctionsTab, EndNodeOutputsTab; public string title { get => ((ITitle)this.Title).title; set => ((ITitle)this.Title).title = value; } public string text { get => ((IText)this.Description).text; set => ((IText)this.Description).text = value; } private class TitleClass : IHierarchyItemTitle { [InspectorDraw(InspectorDrawType.Text, false, false)] public string title; public TitleClass(string title) { this.title = title; } public string HierarchyItemTitle => title; } private void Start() { AddContentInput.AddListener(() => { SharedModule.instance.OpenCustomMenu(this.transform as RectTransform, new SharedModule.CallbackData("test", go => { })); }); Architecture.RegisterWithDuplicateAllow(typeof(GraphInputWindow), this, () => { StartNodeInputsTab = MyHierarchyWindow.CreateRootItemEntryWithBinders(new TitleClass(nameof(StartNodeInputsTab)))[0]; StartNodeInputsTab.GetHierarchyItem().title = WorkflowManager.Transformer("StartNodes"); FunctionsTab = MyHierarchyWindow.CreateRootItemEntryWithBinders(new TitleClass(nameof(FunctionsTab)))[0]; FunctionsTab.GetHierarchyItem().title = WorkflowManager.Transformer("Functions"); EndNodeOutputsTab = MyHierarchyWindow.CreateRootItemEntryWithBinders(new TitleClass(nameof(EndNodeOutputsTab)))[0]; EndNodeOutputsTab.GetHierarchyItem().title = WorkflowManager.Transformer("EndNodes"); }, typeof(HierarchyWindow)); } private void Reset() { MyHierarchyWindow = GetComponent(); } public PropertiesWindow.ItemEntry RegisterOnHierarchyWindow(NodeInfo info) { PropertiesWindow.ItemEntry item = null; if (info is StartNodeInfo) { item = StartNodeInputsTab.GetHierarchyItem().CreateSubPropertyItemWithBinders(info)[0]; } else if (info is EndNodeInfo) { item = EndNodeOutputsTab.GetHierarchyItem().CreateSubPropertyItemWithBinders(info)[0]; } else if (info is StepNodeInfo sNode) { var parentItem = FunctionsTab.GetHierarchyItem(); var menuEntry = parentItem.Entry.GetChilds().Find(x => (x.GetHierarchyItem().target as TitleClass).title == sNode.funcname); if (menuEntry == null) { menuEntry = parentItem.CreateSubPropertyItemWithBinders(new TitleClass(sNode.funcname))[0]; } item = menuEntry.GetHierarchyItem().CreateSubPropertyItemWithBinders(info)[0]; } return item; } } }