Пример #1
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;
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
        }