Ejemplo n.º 1
0
        public void DrawButtons(Circuit circuit, IResultWin window)
        {
            this.Circuit = circuit;

            // loop though nodes in order, to create a consistent call order // todo maybe remove
            foreach (INode node in circuit.Nodes.Values)
            {
                node.Process();
            }

            List <string> doneNames = new List <string>();

            for (int i = 0; i < GetMaxDepth(circuit); i++)
            {
                List <string> tmpDoneNames = new List <string>();

                foreach (INode node in circuit.Nodes.Values)
                {
                    if (doneNames.Contains(node.Name))
                    {
                        continue;
                    }

                    if (node is IMultipleInputs)
                    {
                        bool allInputsDisplayed = true;
                        foreach (INode input in ((IMultipleInputs)node).Inputs)
                        {
                            if (!doneNames.Contains(input.Name))
                            {
                                allInputsDisplayed = false;
                            }
                        }
                        if (!allInputsDisplayed)
                        {
                            continue;
                        }
                    }
                    else if (node is ISingleInput)
                    {
                        continue;
                    }

                    node.RealDepth = i;
                    window.DisplayNode(node, i + 1);
                    tmpDoneNames.Add(node.Name);
                    doneNodes.Add(node);
                }

                doneNames.AddRange(tmpDoneNames);
            }


            foreach (OutputNode node in circuit.OutputNodes.Values)
            {
                window.DisplayNode(node, maxDepth + 1);
                doneNodes.Add(node);
                doneNames.Add(node.Name);
            }
        }
Ejemplo n.º 2
0
        public void OnButtonClick(string nodeName, IResultWin window)
        {
            Cache.IncUserActionCounter();

            INode node = doneNodes.Find(n => n.Name == nodeName);

            if (node is InputNode)
            {
                Circuit.InputNodes[nodeName].Value = !Circuit.InputNodes[nodeName].Value;

                window.UpdateCanvas(Circuit);
            }

            if (node is CircuitNode)
            {
                window.SpawnNew(((CircuitNode)node).Circuit, ((CircuitNode)node).Name + " (" + ((CircuitNode)node).Type + ")");
            }
        }
Ejemplo n.º 3
0
        public void DrawLines(IResultWin window)
        {
            foreach (INode doneNode in doneNodes)
            {
                if (doneNode is IMultipleInputs)
                {
                    foreach (INode input in ((IMultipleInputs)doneNode).Inputs)
                    {
                        INode start = input;
                        INode end   = doneNode;

                        window.DrawLine(start, end, GetColor(start));
                    }
                }
                else if (doneNode is ISingleInput)
                {
                    INode start = ((ISingleInput)doneNode).Input;
                    INode end   = doneNode;

                    window.DrawLine(start, end, GetColor(start));
                }
            }
        }