public GraphicOutput(BaseElement linkedObject) : base(linkedObject) { SignalOutput output = linkedObject as SignalOutput; if (output != null) { output.OnStateChanged += new NotifyEvent(StateChangedEventHandler); output.OnSignalNameChanged += new NotifyEvent(SignalNameChangedEventHandler); } }
private void SignalNameChangedEventHandler(object sender) { SignalOutput output = LinkedObject as SignalOutput; foreach (GraphicBaseElement gbe in Children) { if (gbe is TextElement) { TextElement text = (gbe as TextElement); if (text.Text == null || text.Text.Equals(output.SignalName) == false) { text.Text = output.SignalName; if (OnUpdateDrawing != null) { OnUpdateDrawing(this, false); } } break; } } }
protected virtual void OnSignalOutput(int clockValue) { var args = new SignalOutputEventArgs(clockValue, _registers); SignalOutput?.Invoke(this, args); }
private BaseElementData ConvertIOElement(BaseElement element) { BaseElementData elemData = null; if (element is Macro) { Macro macro = (Macro)element; MacroElementData macroData = new MacroElementData(macro.Name, macro.TypeName, macro.FileReference); macroData.Inputs = ConvertTerminalArray(macro.Inputs); macroData.Outputs = ConvertTerminalArray(macro.Outputs); macroData.Index = macro.UpdateIndex; macroData.UnitDelay = macro.UnitDelay; macroData.NegativeEdgeDelay = macro.NegEdgeDelay; macroData.PositiveEdgeDelay = macro.PosEdgeDelay; elemData = macroData; } if (element is Clock) { Clock clock = (Clock)element; ClockData clockData = new ClockData(clock.Name, clock.LowDuration, clock.HighDuration); clockData.Outputs = ConvertTerminalArray(clock.Outputs); elemData = clockData; } if (element is SignalInput) { SignalInput sigInput = (SignalInput)element; InputElementData inData = new InputElementData(sigInput.Name, sigInput.SignalName); inData.Outputs = ConvertTerminalArray(sigInput.Outputs); elemData = inData; } else if (element is ConstantInput) { ConstantInput conInput = (ConstantInput)element; ConstantInputData inData = new ConstantInputData(conInput.Name, conInput.State.ToString()); inData.Outputs = ConvertTerminalArray(conInput.Outputs); elemData = inData; } if (element is SignalOutput) { SignalOutput sigOutput = (SignalOutput)element; OutputElementData outData = new OutputElementData(sigOutput.Name, sigOutput.SignalName); outData.Inputs = ConvertTerminalArray(sigOutput.Inputs); elemData = outData; } if (elemData == null && element is InputOutputElement) { InputOutputElement io = (InputOutputElement)element; IOElementData ioData = new IOElementData(io.Name, element.GetType().Name); ioData.Inputs = ConvertTerminalArray(io.Inputs); ioData.Outputs = ConvertTerminalArray(io.Outputs); ioData.Index = io.UpdateIndex; ioData.UnitDelay = io.UnitDelay; ioData.NegativeEdgeDelay = io.NegEdgeDelay; ioData.PositiveEdgeDelay = io.PosEdgeDelay; elemData = ioData; } if (elemData == null) { return(null); } if (element.LinkedObject != null) { GraphicInputOutputElement grIO = element.LinkedObject as GraphicInputOutputElement; elemData.X = grIO.Location.X; elemData.Y = grIO.Location.Y; } return(elemData); }
private static GraphicBaseElement CreateElement(string name, BaseElement logic) { //Terminals if (name.Equals(typeof(Terminal).Name)) { GraphicBaseElement element = new GraphicTerminal(logic); element.Name = logic.Name; return(element); } //Connections if (name.Equals(typeof(Connection).Name)) { GraphicBaseElement element = new GraphicConnection(logic); element.Name = logic.Name; return(element); } //Macros if (name.Equals(typeof(Macro).Name)) { Macro macro = logic as Macro; GraphicMacro graphicMacro = new GraphicMacro(logic, MacroCache.Instance.GetSymbol(macro.TypeName)); return(graphicMacro); } //Gates if (name.Equals(typeof(AndGate).Name) || name.Equals(typeof(NandGate).Name)) { GraphicInputOutputElement io = new GraphicInputOutputElement(logic); TextElement text = new TextElement(@"&", new PointF(4, 4)); io.AddChild(text); return(io); } if (name.Equals(typeof(OrGate).Name) || name.Equals(typeof(NorGate).Name)) { GraphicInputOutputElement io = new GraphicInputOutputElement(logic); TextElement text = new TextElement(@"≥1", new PointF(4, 4)); io.AddChild(text); return(io); } if (name.Equals(typeof(BufferGate).Name) || name.Equals(typeof(NotGate).Name)) { GraphicInputOutputElement io = new GraphicInputOutputElement(logic); TextElement text = new TextElement(@"1", new PointF(4, 0)); io.AddChild(text); return(io); } if (name.Equals(typeof(XorGate).Name)) { GraphicInputOutputElement io = new GraphicInputOutputElement(logic); TextElement text = new TextElement(@"=m", new PointF(4, 4)); io.AddChild(text); return(io); } if (name.Equals(typeof(XnorGate).Name)) { GraphicInputOutputElement io = new GraphicInputOutputElement(logic); TextElement text = new TextElement(@"=", new PointF(4, 4)); io.AddChild(text); return(io); } //if (name.Equals(typeof(Delay).Name)) //{ // GraphicInputOutputElement io = new GraphicInputOutputElement(logic); // TextElement text = new TextElement(@"|-|", new PointF(4, 4)); // io.AddChild(text); // return io; //} //Signals if (name.Equals(typeof(Clock).Name)) { Clock clock = (Clock)logic; GraphicInputOutputElement graphicClock = new GraphicClock(logic); return(graphicClock); } if (name.Equals(typeof(ConstantInput).Name) || name.Equals(typeof(SignalInput).Name)) { GraphicInputOutputElement sig = new GraphicInput(logic); TextElement text = null; if (logic is SignalInput) { text = new TextElement((logic as SignalInput).SignalName, new PointF(2, 0)); } else { text = new TextElement((logic as ConstantInput).State.ToString().Substring(0, 2), new PointF(2, 0)); } if (text != null) { sig.AddChild(text); } return(sig); } if (name.Equals(typeof(SignalOutput).Name)) { SignalOutput output = (SignalOutput)logic; GraphicInputOutputElement sig = new GraphicOutput(logic); TextElement text = new TextElement(output.SignalName, new PointF(2, 0)); sig.AddChild(text); return(sig); } return(null); }