/// <summary> /// Merges two connection objects into one /// </summary> /// <param name="fromConnection">the remaining connection</param> /// <param name="toConnection">the connection that gets merged</param> private void MergeConnections(GraphicConnection fromConnection, PointF fromPoint, GraphicConnection toConnection, PointF toPoint) { if (fromConnection.Equals(toConnection)) { return; } if (MessageBox.Show(String.Format("Sollen die Verbindungen \"{0}\" und \"{1}\" miteinander verbunden werden?", fromConnection.Name, toConnection.Name), "Frage", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes) { //derive all Terminals and ConnectionItems (lines, nodes) fromConnection.Merge(toConnection); IConnectionItem item1 = fromConnection.GetItemAt(fromPoint); IConnectionItem item2 = fromConnection.GetItemAt(toPoint); if (item1 is ConnectionLine) { item1 = SplitConnectionLine(item1 as ConnectionLine, fromPoint); } if (item2 is ConnectionLine) { item2 = SplitConnectionLine(item2 as ConnectionLine, fromPoint); } ConnectionLine line = new ConnectionLine(item1 as ConnectionNode, item2 as ConnectionNode); fromConnection.AddChild(line); m_Editor.RemoveElement(toConnection); m_Editor.UpdateDrawing(); m_Editor.RaiseChangedEvent(); } }
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; } }