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);
     }
 }
Esempio n. 3
0
        // 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);
            }
        }