Exemple #1
0
        public override void OnPortDrivesSignalNoLonger(Signal signal, Port port, int outputIndex)
        {
            if (maskMDrives)
            {
                return;
            }

            bool wasMasked = maskNDrives;

            try
            {
                maskNDrives = true;
                SignalShape ss = _bridge.Signals[signal.InstanceId];
                PortShape   ps = _bridge.Ports[port.InstanceId];
                IConnector  sc = ss.InputConnector;
                IConnector  pc = ps.OutputConnectors[outputIndex];

                IConnection connection = _bridge.Model.ConnectorHolders[pc.AttachedTo] as IConnection;
                sc.DetachConnector(connection.From);
                sc.DetachConnector(connection.To);
                pc.DetachConnector(connection.From);
                pc.DetachConnector(connection.To);
                _bridge.Model.Remove(connection);
            }
            finally
            {
                maskNDrives = wasMasked;
            }
        }
Exemple #2
0
        public override void OnPortDrivesSignal(Signal signal, Port port, int outputIndex)
        {
            if (maskMDrives)
            {
                return;
            }

            bool wasMasked = maskNDrives;

            try
            {
                maskNDrives = true;
                SignalShape ss = _bridge.Signals[signal.InstanceId];
                PortShape   ps = _bridge.Ports[port.InstanceId];
                IConnector  sc = ss.InputConnector;
                IConnector  pc = ps.OutputConnectors[outputIndex];

                Connection cn = new Connection(Point.Empty, Point.Empty);
                _bridge.Model.AddConnection(cn);
                pc.AttachConnector(cn.From);
                sc.AttachConnector(cn.To);

                ss.Location = new Point(pc.Point.X - 16, pc.Point.Y - 10);
                _bridge.Model.SendToFront(ss);
            }
            finally
            {
                maskNDrives = wasMasked;
            }
        }
Exemple #3
0
        public override void OnPortRemoved(Port port, int index)
        {
            if (!_bridge.Ports.ContainsKey(port.InstanceId))
            {
                return;
            }
            PortShape shape = _bridge.Ports[port.InstanceId];

            _bridge.Ports.Remove(port.InstanceId);
            _bridge.Model.RemoveShape(shape);
            _presentation.Invalidate();
        }
Exemple #4
0
        public override void OnSignalDrivesPort(Signal signal, Port port, int inputIndex)
        {
            SignalShape ss = _bridge.Signals[signal.InstanceId];
            PortShape   ps = _bridge.Ports[port.InstanceId];
            IConnector  sc = ss.OutputConnector;
            IConnector  pc = ps.InputConnectors[inputIndex];

            Connection cn = new Connection(Point.Empty, Point.Empty);

            sc.AttachConnector(cn.From);
            pc.AttachConnector(cn.To);
            _bridge.Model.AddConnection(cn);
        }
Exemple #5
0
        public override void OnPortAdded(Port port, int index)
        {
            if (_bridge.Ports.ContainsKey(port.InstanceId))
            {
                return;
            }
            PortShape shape = new PortShape(new CommandReference(port.InstanceId, index));

            shape.Port     = port;
            shape.Location = CreateRandomLocation();
            _bridge.Ports.Add(port.InstanceId, shape);
            _bridge.Model.AddShape(shape);
            _presentation.Invalidate();
        }
Exemple #6
0
        public override void OnPortDrivesSignal(Signal signal, Port port, int outputIndex)
        {
            SignalShape ss = _bridge.Signals[signal.InstanceId];
            PortShape   ps = _bridge.Ports[port.InstanceId];
            IConnector  sc = ss.InputConnector;
            IConnector  pc = ps.OutputConnectors[outputIndex];

            Connection cn = new Connection(Point.Empty, Point.Empty);

            pc.AttachConnector(cn.From);
            sc.AttachConnector(cn.To);
            _bridge.Model.AddConnection(cn);

            ss.Location = new Point(pc.Point.X - 16, pc.Point.Y - 10);
            _bridge.Model.SendToFront(ss);
        }
Exemple #7
0
        void NetronEntityRemovedHandler(object sender, EntityEventArgs e)
        {
            IDiagramEntity entity = e.Entity;
            SignalShape    ss     = entity as SignalShape;

            if (ss != null)
            {
                if (!_bridge.Signals.ContainsValue(ss))
                {
                    return;
                }
                _bridge.Signals.Remove(ss.SignalReference.InstanceId);
                PostCommandRemoveSignal(ss.SignalReference, true);
                return;
            }
            BusShape bs = entity as BusShape;

            if (bs != null)
            {
                if (!_bridge.Buses.ContainsValue(bs))
                {
                    return;
                }
                _bridge.Buses.Remove(bs.BusReference.InstanceId);
                PostCommandRemoveBus(bs.BusReference);
                return;
            }
            PortShape ps = entity as PortShape;

            if (ps != null)
            {
                if (!_bridge.Ports.ContainsValue(ps))
                {
                    return;
                }
                _bridge.Ports.Remove(ps.PortReference.InstanceId);
                PostCommandRemovePort(ps.PortReference, true);
                return;
            }
            IConnection cn = entity as IConnection;

            if (cn != null)
            {
            }
        }
Exemple #8
0
        void Model_OnConnectorAttached(object sender, ConnectorsEventArgs e)
        {
            if (maskNDrives)
            {
                return;
            }

            bool wasMasked = maskMDrives;

            try
            {
                maskMDrives = true;

                IConnection con = _bridge.Model.ConnectorHolders[e.SubjectConnector] as IConnection;

                // get rid of uninteresting situations
                if (con != null)
                {
                    if (con.From.AttachedTo == null || con.To.AttachedTo == null)
                    {
                        return;
                    }
                }
                else
                {
                    con = _bridge.Model.ConnectorHolders[e.ObjectConnector] as IConnection;
                    if (con != null)
                    {
                        if (con.From.AttachedTo == null || con.To.AttachedTo == null)
                        {
                            return;
                        }
                    }
                    else
                    {
                        return;
                    }
                }

                // find out who connects to whom
                IConnector portConnector = con.From.AttachedTo;
                IShape     portShape     = (IShape)_bridge.Model.ConnectorHolders[portConnector];
                IShape     valueShape    = (IShape)_bridge.Model.ConnectorHolders[con.To.AttachedTo];

                PortShape port = portShape as PortShape;
                if (port == null)
                {
                    port = valueShape as PortShape;
                    if (port == null)
                    {
                        return;
                    }
                    valueShape    = portShape; //ensure valueShape should now be either signal or bus
                    portConnector = con.To.AttachedTo;
                }
                SignalShape signal = valueShape as SignalShape;
                if (signal != null)
                {
                    // PORT <-> SIGNAL

                    int index = -1;
                    List <YttriumConnector> sl = port.InputConnectors;
                    for (int i = 0; i < sl.Count; i++)
                    {
                        if (sl[i] == portConnector)
                        {
                            index = i;
                            break;
                        }
                    }

                    if (index > -1)
                    {
                        PostCommandSignalDrivesPort(signal.SignalReference, port.PortReference, index);
                        return;
                    }

                    index = -1;
                    sl    = port.OutputConnectors;
                    for (int i = 0; i < sl.Count; i++)
                    {
                        if (sl[i] == portConnector)
                        {
                            index = i;
                            break;
                        }
                    }

                    if (index > -1)
                    {
                        PostCommandPortDrivesSignal(signal.SignalReference, port.PortReference, index);
                    }

                    return;
                }
                BusShape bus = valueShape as BusShape;
                if (bus != null)
                {
                    // PORT <-> BUS

                    int index = -1;
                    List <YttriumConnector> bl = port.BusConnectors;
                    for (int i = 0; i < bl.Count; i++)
                    {
                        if (bl[i] == portConnector)
                        {
                            index = i;
                            break;
                        }
                    }

                    if (index > -1)
                    {
                        PostCommandBusAttachedToPort(bus.BusReference, port.PortReference, index);
                    }

                    return;
                }
            }
            finally
            {
                maskMDrives = wasMasked;
            }
        }