private Window(string jsonData) : base() { Instance = this; Nodes = new(); StyleSheet.Load("/ui/visual-programming/Window.scss"); AddClass("fullscreen"); AddClass("visualprogramming"); Header.NavigationHeader.OnCreateWindowHeader = (header) => { Button saveButton = new("", "save", () => Save()); saveButton.AddClass("save"); header.AddChild(saveButton); Button loadButton = new("", "folder_open", () => Load()); loadButton.AddClass("load"); header.AddChild(loadButton); BuildButton = new("", "play_arrow", () => Build()); BuildButton.AddClass("play"); header.AddChild(BuildButton); Button resetButton = new("", "delete", () => Reset()); resetButton.AddClass("reset"); header.AddChild(resetButton); }; Header.NavigationHeader.Reload(); Content.SetPanelContent((panelContent) => { Workspace = new() { Parent = panelContent }; Sidebar = new(panelContent); LoadNodesFromStackJson(jsonData); foreach (Node node in Nodes) { if (node is MainNode mainNode) { MainNode = mainNode; break; } } if (MainNode == null) { MainNode = AddNode <MainNode>(); MainNode.Display(); Log.Warning("Missing main node in default visual programming stack"); } }); }
private void LoadNodesFromStackJson(string jsonData) { jsonData = jsonData.Replace("LibraryName", "StackNodeName").Replace("NodeReference", "LibraryName"); List <object> jsonDataList = JsonSerializer.Deserialize <List <object> >(jsonData); foreach (object stackNode in jsonDataList) { Dictionary <string, object> saveStackNode = JsonSerializer.Deserialize <Dictionary <string, object> >((JsonElement)stackNode); if (!saveStackNode.TryGetValue("LibraryName", out object libraryName)) { continue; } Type type = Utils.GetTypeByLibraryName <Node>(libraryName.ToString()); if (type == null) { continue; } Node node = Utils.GetObjectByType <Node>(type); if (node == null) { continue; } node.LoadFromJsonData(saveStackNode); AddNode(node); } foreach (Node node in Nodes) { if (node is MainNode mainNode) { MainNode = mainNode; } // connect nodes foreach (string id in node.ConnectionInputIds) { if (id == null) { continue; } Node idNode = Node.GetById(id); if (idNode == null) { continue; } idNode.ConnectWithNode(node); } node.Display(); } Log.Debug($"Loaded: '{jsonData}'"); }