Пример #1
0
        private void AddWire(Wire wire)
        {
            var wireEntry = new WireEntry(wire);

            this._circuit.Connect(wire);
            this._wires.Add(wireEntry);
        }
Пример #2
0
 private void DeleteToolStripMenuItem_Click(object sender, EventArgs e)         // Wire
 {
     if (this._selectedWire != null)
     {
         this._circuit.Disconnect(this._selectedWire.Wire);
         this._wires.Remove(this._selectedWire);
         this._selectedWire = null;
         this.CircuitPanel.Refresh();
     }
 }
Пример #3
0
        private void CircuitPanel_MouseClick(object sender, MouseEventArgs e)
        {
            if (this._selectedPort != null && this._selected == null)
            {
                throw new Exception("Unexpected selection error");
            }

            if (this._didDragging)
            {
                return;
            }


            if (e.Button == MouseButtons.Left)
            {
                if (this._interacted != null)                                                          // _dragging should be auto-filled in the MouseDown listener, if it's null => the user hasn't clicked on a node
                {
                    if (this.IsNodeInputPortClicked(this._interacted, e.Location, out int portNumber)) // Check if we clicked on an input port
                    {
                        // There is already have a selected output port and not on the same object
                        if (this._selectedPort != null && this._selectedPort == 0 && this._selected != this._interacted)
                        {
                            this.AddWire(new Wire(this._selected.Node, this._interacted.Node, portNumber));

                            // Clear port selection
                            this._selected     = null;
                            this._selectedPort = null;
                        }
                        else                         // No port selected OR there was an input port selected OR we tried to connect a gate with itself => replace the selection
                        {
                            // Mark port selection
                            this._selected     = this._interacted;
                            this._selectedPort = portNumber;                             // No current selected port => select the clicked one
                        }
                    }
                    else if (IsNodeOutputPortClicked(this._interacted, e.Location))                     // No input port was selected => Check is the output port was selected
                    {
                        // There was an input port selected and not on the same object => connect
                        if (this._selectedPort != null && this._selectedPort > 0 && this._selected != this._interacted)
                        {
                            this.AddWire(new Wire(this._interacted.Node, this._selected.Node, this._selectedPort.Value));

                            // Clear port selection
                            this._selected     = null;
                            this._selectedPort = null;
                        }
                        else                         // There was no port selected OR there was an input port selected OR we clicked on an input port but on the same object => replace the selection
                        {
                            this._selected     = this._interacted;
                            this._selectedPort = 0;
                        }
                    }
                    else                     // Not clicked on output port either => simply clicked on the object somewhere
                    {
                    }
                }
                else                 // Clicked outside of a node
                {
                    this._selected     = null;
                    this._selectedPort = null;
                }
            }
            else if (e.Button == MouseButtons.Right)
            {
                WireEntry wireEntry;
                if (this._interacted != null)                 // Clicked on node
                {
                    this._selected     = _interacted;
                    this._selectedPort = null;
                    this.nodeRightClickMenu.Show(this.CircuitPanel.PointToScreen(e.Location));
                }
                else if ((wireEntry = GetWireAt(e.Location)) != null)                 // Clicked near wire
                {
                    this._selectedWire = wireEntry;
                    wireRightClickMenu.Show(this.CircuitPanel.PointToScreen(e.Location));
                }
                else
                {
                    this._selected     = null;
                    this._selectedWire = null;
                    this._selectedPort = null;
                }
            }

            // Stop Dragging
            this._interacted = null;

            this.CircuitPanel.Refresh();
        }