Beispiel #1
0
        private void pictureBox_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left && ModifierKeys == Keys.Control)
            {
                move              = true;
                moveLastLocation  = e.Location;
                pictureBox.Cursor = Cursors.NoMove2D;
            }
            else if (e.Button == MouseButtons.Left)
            {
                if (dragElement != null)
                {
                    var overflowElements = scheme.GetElementsAtRectangle(
                        dragElement.X,
                        dragElement.Y,
                        dragElement.Width,
                        dragElement.Height
                        );
                    if (overflowElements.Count() == 0 || (overflowElements.Count() == 1 && overflowElements.Contains(dragElement)))
                    {
                        dragElement = null;
                    }
                }
                else if (moveButton.Checked)
                {
                    modified    = true;
                    dragElement = scheme.GetElementAtLocation(e.Location) as IMoveableElement;
                }

                if (connectLine != null)
                {
                    var underMouseElement = scheme.GetElementAtLocation(e.Location) as IMoveableElement;
                    if (underMouseElement != null && underMouseElement != connectLine.connection.Item1)
                    {
                        connectLine.connection = new Tuple <IMoveableElement, IMoveableElement>(
                            connectLine.connection.Item1,
                            underMouseElement
                            );

                        var add = !scheme.Elements.Contains(connectLine);

                        if (connectLine.connection.Item2 is Component)
                        {
                            ((Component)connectLine.connection.Item2).AddInput(connectLine.connection.Item1.Name);
                        }
                        else if (connectLine.connection.Item2 is Output && string.IsNullOrEmpty(((Output)connectLine.connection.Item2).Input))
                        {
                            ((Output)connectLine.connection.Item2).Input = connectLine.connection.Item1.Name;
                        }
                        else
                        {
                            add = false;
                        }

                        if (add)
                        {
                            scheme.AddElement(connectLine);
                            DrawScheme();
                            connectLine = null;
                        }
                    }
                }
                else if (connectionButton.Checked)
                {
                    var underMouseElement = scheme.GetElementAtLocation(e.Location) as IMoveableElement;
                    if (underMouseElement != null && !(underMouseElement is Output))
                    {
                        modified    = true;
                        connectLine = new Line(underMouseElement, null);
                    }
                }

                if (deleteButton.Checked)
                {
                    var toDelete = scheme.GetElementAtLocation(e.Location);
                    if (toDelete != null)
                    {
                        modified = true;
                        scheme.RemoveElement(toDelete);
                        DrawScheme();
                    }
                }
            }
            else if (e.Button == MouseButtons.Right)
            {
                if (connectLine != null)
                {
                    DrawScheme();
                }

                dragElement = null;
                connectLine = null;

                menuElement = scheme.GetElementAtLocation(e.Location) as IMoveableElement;
                pictureBox.ContextMenuStrip = (menuElement == null ? schemeMenuStrip : elementMenuStrip);
            }
        }