private void RunBTN_Click(object sender, EventArgs e)
        {
            bool hasErrors = false;

            foreach (var c in ComponentsGraph)
            {
                if (!c.ComponentReady())
                {
                    hasErrors = true;
                }
            }

            if (hasErrors)
            {
                CanvasPBX.Invalidate();
                MessageBox.Show("Kindly enter the attributes and/or inputs for the marked components.");
                return;
            }

            foreach (var c in ComponentsGraph)
            {
                if (c.GetType().Equals(typeof(FileInputSignal)))
                {
                    c.StartJob();
                }
            }
        }
        private void ComponentBTNClicked(object sender, EventArgs e)
        {
            var       buttonSender = (Button)sender;
            Component c            = (DSPUI.Components.Component)Activator.CreateInstance((Type)buttonSender.Tag);

            c.Location = new Point(CanvasPBX.Width / 2 - DSPUI.Components.Component.WIDTH / 2, CanvasPBX.Height / 2 - DSPUI.Components.Component.HEIGHT / 2);
            //Image i = c.GetDrawing();
            //g.DrawImage(i, c.Location.X, c.Location.Y, DSPUI.Components.Component.WIDTH, DSPUI.Components.Component.HEIGHT);
            ComponentsGraph.Add(c);
            CanvasPBX.Invalidate();
        }
        private void CanvasPBX_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                var ind = GetComponentContainingPoint(e.Location);

                if (ind != -1)
                {
                    DeleteComponentFromGraph(ind);
                }

                List <Component> comFrom;
                List <Component> comTo;

                GetLinesContainingPoint(e.Location, out comFrom, out comTo);

                for (int i = 0; i < comFrom.Count; i++)
                {
                    comTo[i].RemoveInputComponent(comFrom[i]);
                }
            }
            else if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                if (newConnection != null)
                {
                    int ind = GetComponentContainingPoint(e.Location);
                    if (ind != -1)
                    {
                        if (ComponentsGraph[ind] != newConnection.c)
                        {
                            if (ComponentsGraph[ind].PointOnOutputConnection(e.Location) && newConnection.isInputToOutput)
                            {
                                if (!ComponentsGraph[ind].OutputComponents.Contains(newConnection.c) &&
                                    newConnection.c.IsValidInputComponent(ComponentsGraph[ind]))
                                {
                                    newConnection.c.AddInputComponent(ComponentsGraph[ind]);
                                }
                            }
                            else if (ComponentsGraph[ind].PointOnInputConnection(e.Location) &&
                                     newConnection.isOutputToInput)
                            {
                                if (!newConnection.c.OutputComponents.Contains(ComponentsGraph[ind]) && ComponentsGraph[ind].IsValidInputComponent(newConnection.c))
                                {
                                    ComponentsGraph[ind].AddInputComponent(newConnection.c);
                                }
                            }
                        }
                    }
                }
            }

            CanvasPBX.Invalidate();
            newConnection = null;
        }
        private void CanvasPBX_MouseMove(object sender, MouseEventArgs e)
        {
            if (newConnection != null)
            {
                if (newConnection.isComponentToMove)
                {
                    int dispX = e.Location.X - newConnection.lastMouseLocation.X;
                    int dispY = e.Location.Y - newConnection.lastMouseLocation.Y;
                    newConnection.c.Location        = new Point(newConnection.c.Location.X + dispX, newConnection.c.Location.Y + dispY);
                    newConnection.lastMouseLocation = e.Location;
                }

                newConnection.currentMouseLocation = e.Location;
                CanvasPBX.Invalidate();
            }
        }