Ejemplo n.º 1
0
        /// <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();
            }
        }
Ejemplo n.º 2
0
        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;
            }
        }