public override void MouseClick(PointF location, Keys controlKeys) { GraphicBaseElement element = m_Editor.GetElementAt(location); if (element == null) { if (m_FromElement != null) { //floating connection - create a new connection line FloatingConnection(location); m_LastMouseLocation = location; } return; } if (element is GraphicInputOutputElement == false && element is GraphicConnection == false) { return; } //user clicked a terminal of an element GraphicInputOutputElement ioelem = element as GraphicInputOutputElement; GraphicTerminal graphicTerminal = null; if (ioelem != null) { graphicTerminal = ioelem.GetTerminalAt(location); if (graphicTerminal == null || graphicTerminal.Equals(m_FromElement)) { return; } if (m_FromElement == null) { m_FromElement = graphicTerminal; m_LastMouseLocation = location; return; } TryConnectToTerminal(graphicTerminal, location); m_LastMouseLocation = location; } //user clicked a connection GraphicConnection connection = element as GraphicConnection; if (connection != null) { if (connection.Equals(m_FromElement)) { return; } if (m_FromElement == null) { m_FromElement = connection; m_LastMouseLocation = location; return; } TryConnectToConnection(connection, location); m_LastMouseLocation = location; } }
public override void MouseClick(PointF location, Keys controlKeys) { GraphicBaseElement element = m_Editor.GetElementAt(location); if (element == null) { return; } if (element is GraphicInputOutputElement == false && element is GraphicConnection == false) { return; } GraphicConnection graphicConnection = null; //user clicked a terminal of an element GraphicInputOutputElement ioelem = element as GraphicInputOutputElement; if (ioelem != null) { GraphicTerminal graphicTerminal = ioelem.GetTerminalAt(location); if (graphicTerminal != null) { Terminal terminal = (graphicTerminal.LinkedObject as Terminal); if (terminal.IsConnected) { Connection connection = terminal.Connection; graphicConnection = terminal.Connection.LinkedObject as GraphicConnection; graphicConnection.RemoveChild(graphicTerminal.ConnectionNode.Lines[0]); //terminal.Disconnect(); connection.DisconnectTerminal(terminal); if (connection.Terminals.Count == 0) { m_Editor.RemoveElement(connection.LinkedObject as GraphicConnection); } m_Editor.UpdateDrawing(); m_Editor.RaiseChangedEvent(); m_Editor.Invalidate(); } } } //user clicked a connection graphicConnection = element as GraphicConnection; if (graphicConnection != null) { foreach (GraphicBaseElement child in graphicConnection.Children) { graphicConnection.RemoveChild(child); } Connection connection = graphicConnection.LinkedObject as Connection; foreach (Terminal terminal in connection.Terminals) { //terminal.Disconnect(); connection.DisconnectTerminal(terminal); } m_Editor.RemoveElement(graphicConnection); } }
public override void MouseMove(MouseButtons button, PointF location, Keys controlKeys) { if (m_Editor == null) { return; } GraphicBaseElement element = m_Editor.GetElementAt(location); if (m_HighLightElement != null) { if (element == null || (element.Equals(m_ParentElement) == false && m_HighLightElement is GraphicTerminal) || (element.Equals(m_HighLightElement) == false && m_HighLightElement is GraphicConnection)) { //Un-Hover the element UnHighlightElement(m_HighLightElement); return; } } if (element is GraphicInputOutputElement) { GraphicInputOutputElement ioelem = element as GraphicInputOutputElement; GraphicTerminal graphicTerminal = ioelem.GetTerminalAt(location); if (graphicTerminal != null) { if ((graphicTerminal.LinkedObject as Terminal).IsConnected == false) { //Hover an element m_ParentElement = element; HighlightElement(graphicTerminal); } } else if (m_HighLightElement != null) { //Un-Hover the element UnHighlightElement(m_HighLightElement); } } if (element is GraphicConnection) { if (m_HighLightElement == null) { //Hover an element HighlightElement(element); } } }
private BaseElementData ConvertIOElement(BaseElement element) { BaseElementData elemData = null; if (element is Macro) { Macro macro = (Macro)element; MacroElementData macroData = new MacroElementData(macro.Name, macro.TypeName, macro.FileReference); macroData.Inputs = ConvertTerminalArray(macro.Inputs); macroData.Outputs = ConvertTerminalArray(macro.Outputs); macroData.Index = macro.UpdateIndex; macroData.UnitDelay = macro.UnitDelay; macroData.NegativeEdgeDelay = macro.NegEdgeDelay; macroData.PositiveEdgeDelay = macro.PosEdgeDelay; elemData = macroData; } if (element is Clock) { Clock clock = (Clock)element; ClockData clockData = new ClockData(clock.Name, clock.LowDuration, clock.HighDuration); clockData.Outputs = ConvertTerminalArray(clock.Outputs); elemData = clockData; } if (element is SignalInput) { SignalInput sigInput = (SignalInput)element; InputElementData inData = new InputElementData(sigInput.Name, sigInput.SignalName); inData.Outputs = ConvertTerminalArray(sigInput.Outputs); elemData = inData; } else if (element is ConstantInput) { ConstantInput conInput = (ConstantInput)element; ConstantInputData inData = new ConstantInputData(conInput.Name, conInput.State.ToString()); inData.Outputs = ConvertTerminalArray(conInput.Outputs); elemData = inData; } if (element is SignalOutput) { SignalOutput sigOutput = (SignalOutput)element; OutputElementData outData = new OutputElementData(sigOutput.Name, sigOutput.SignalName); outData.Inputs = ConvertTerminalArray(sigOutput.Inputs); elemData = outData; } if (elemData == null && element is InputOutputElement) { InputOutputElement io = (InputOutputElement)element; IOElementData ioData = new IOElementData(io.Name, element.GetType().Name); ioData.Inputs = ConvertTerminalArray(io.Inputs); ioData.Outputs = ConvertTerminalArray(io.Outputs); ioData.Index = io.UpdateIndex; ioData.UnitDelay = io.UnitDelay; ioData.NegativeEdgeDelay = io.NegEdgeDelay; ioData.PositiveEdgeDelay = io.PosEdgeDelay; elemData = ioData; } if (elemData == null) { return(null); } if (element.LinkedObject != null) { GraphicInputOutputElement grIO = element.LinkedObject as GraphicInputOutputElement; elemData.X = grIO.Location.X; elemData.Y = grIO.Location.Y; } return(elemData); }