public IEnumerator DuplicateNodeAndEdgeCreatesEdgeToOriginalNode() { var declaration0 = GraphModel.CreateGraphVariableDeclaration(typeof(int).GenerateTypeHandle(), "decl0", ModifierFlags.None, true); var nodeA = GraphModel.CreateVariableNode(declaration0, new Vector2(100, -100)); var nodeB = GraphModel.CreateNode <Type0FakeNodeModel>("A", new Vector2(100, 100)); var edge = GraphModel.CreateEdge(nodeB.Input0, nodeA.OutputPort) as EdgeModel; MarkGraphViewStateDirty(); yield return(null); CommandDispatcher.Dispatch(new SelectElementsCommand(SelectElementsCommand.SelectionMode.Replace, new GraphElementModel[] { nodeB, edge })); GraphView.Focus(); using (var evt = ExecuteCommandEvent.GetPooled("Duplicate")) { evt.target = GraphView; GraphView.SendEvent(evt); } yield return(null); Assert.AreEqual(3, GraphModel.NodeModels.Count); Assert.AreEqual(2, GraphModel.EdgeModels.Count); foreach (var edgeModel in GraphModel.EdgeModels) { Assert.AreEqual(nodeA.OutputPort, edgeModel.FromPort); } }
void ProcessMenuCommand(string command) { using (ExecuteCommandEvent evt = ExecuteCommandEvent.GetPooled(command)) { evt.target = this; SendEvent(evt); } }
// In order for tests to run without an EditorWindow but still be able to send // events, we sometimes need to force the event type. IMGUI::GetEventType() (native) will // return the event type as Ignore if the proper views haven't yet been // initialized. This (falsely) breaks tests that rely on the event type. So for tests, we // just ensure the event type is what we originally set it to when we sent it. internal static EventBase CreateEvent(Event systemEvent, EventType eventType) { switch (eventType) { case EventType.MouseMove: return(MouseMoveEvent.GetPooled(systemEvent)); case EventType.MouseDrag: return(MouseMoveEvent.GetPooled(systemEvent)); case EventType.MouseDown: return(MouseDownEvent.GetPooled(systemEvent)); case EventType.MouseUp: return(MouseUpEvent.GetPooled(systemEvent)); case EventType.ContextClick: return(ContextClickEvent.GetPooled(systemEvent)); case EventType.MouseEnterWindow: return(MouseEnterWindowEvent.GetPooled(systemEvent)); case EventType.MouseLeaveWindow: return(MouseLeaveWindowEvent.GetPooled(systemEvent)); case EventType.ScrollWheel: return(WheelEvent.GetPooled(systemEvent)); case EventType.KeyDown: return(KeyDownEvent.GetPooled(systemEvent)); case EventType.KeyUp: return(KeyUpEvent.GetPooled(systemEvent)); case EventType.DragUpdated: return(DragUpdatedEvent.GetPooled(systemEvent)); case EventType.DragPerform: return(DragPerformEvent.GetPooled(systemEvent)); case EventType.DragExited: return(DragExitedEvent.GetPooled(systemEvent)); case EventType.ValidateCommand: return(ValidateCommandEvent.GetPooled(systemEvent)); case EventType.ExecuteCommand: return(ExecuteCommandEvent.GetPooled(systemEvent)); default: // Layout, Ignore, Used return(IMGUIEvent.GetPooled(systemEvent)); } }
public static void Compile(this GraphElement element) { var evt = new Event() { type = EventType.ExecuteCommand, commandName = UdonGraphCommands.Compile }; using (var e = ExecuteCommandEvent.GetPooled(evt)) { element.SendEvent(e); } }
public static void SaveNewData(this GraphElement element) { var evt = new Event() { type = EventType.ExecuteCommand, commandName = UdonGraphCommands.SaveNewData }; using (var e = ExecuteCommandEvent.GetPooled(evt)) { element.SendEvent(e); } MarkDirty(); }
public static void Reserialize(this GraphElement element) { MarkDirty(); var evt = new Event() { type = EventType.ExecuteCommand, commandName = UdonGraphCommands.Reserialize, }; using (var e = ExecuteCommandEvent.GetPooled(evt)) { element.SendEvent(e); } }