From a55f86ed91d0820f0db55feb5320334c3367c369 Mon Sep 17 00:00:00 2001 From: hneemann Date: Wed, 4 Nov 2020 08:09:32 +0100 Subject: [PATCH] allows to create a concrete circuit from a generic one; see #543 --- .../gui/components/CircuitComponent.java | 29 +++++++++++++++++++ src/main/resources/lang/lang_de.xml | 16 ++++++++-- src/main/resources/lang/lang_en.xml | 21 ++++++++++---- 3 files changed, 58 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java index 5f7c93d89..b138f6dc1 100644 --- a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java +++ b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java @@ -1151,6 +1151,35 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib } }.setToolTip(Lang.get("attr_openCircuit_tt"))); } + if (elementType == GenericInitCode.DESCRIPTION && getCircuit().getAttributes().get(Keys.IS_GENERIC)) { + attributeDialog.addButton(Lang.get("attr_createConcreteCircuitLabel"), new ToolTipAction(Lang.get("attr_createConcreteCircuit")) { + @Override + public void actionPerformed(ActionEvent e) { + try { + attributeDialog.fireOk(); + ElementAttributes modified = attributeDialog.getModifiedAttributes(); + if (modified != null && !isLocked()) { + Modification mod = new ModifyAttributes(element, modified); + modify(checkNetRename(element, modified, mod)); + } + Circuit concreteCircuit = new ResolveGenerics().resolveCircuit(element, getCircuit(), library).getCircuit(); + for (VisualElement gic : concreteCircuit.getElements(v -> v.equalsDescription(GenericInitCode.DESCRIPTION))) + concreteCircuit.delete(gic); + concreteCircuit.getAttributes().set(Keys.IS_GENERIC, false); + + new Main.MainBuilder() + .setParent(parent) + .setCircuit(concreteCircuit) + .setLibrary(library) + .denyMostFileActions() + .keepPrefMainFile() + .openLater(); + } catch (NodeException | ElementNotFoundException | Editor.EditorParseException ex) { + new ErrorMessage(Lang.get("attr_createConcreteCircuitErr")).addCause(ex).show(parent); + } + } + }.setToolTip(Lang.get("attr_createConcreteCircuit_tt"))); + } attributeDialog.addButton(new ToolTipAction(Lang.get("attr_help")) { @Override public void actionPerformed(ActionEvent actionEvent) { diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index 4e5ebd913..816f61ece 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -1141,14 +1141,18 @@ Sind evtl. die Namen der Variablen nicht eindeutig? Adress-Bits Anzahl der Adress-Bits, die verwendet werden. Daten-Bits - + Anzahl der Daten-Bits, die verwendet werden. Farbe Die Farbe des Elementes. Hintergrundfarbe - Hintergrundfarbe der Schaltung, wenn sie eingebettet wird. Wird für DILs nicht verwendet. + Hintergrundfarbe der Schaltung, wenn sie eingebettet wird. Wird für DILs nicht + verwendet. + Timeout Zyklen - Wenn nach dieser Anzahl von Takten kein Break eingegangen ist, wird ein Fehler erzeugt + Wenn nach dieser Anzahl von Takten kein Break eingegangen ist, wird ein Fehler + erzeugt + Daten Die Daten, welche in diesem Element gespeichert sind. Vorgabe @@ -2014,6 +2018,12 @@ Stellen Sie sicher, dass der Flash-Vorgang abgeschlossen ist, bevor Sie diesen D Hilfe Name in einer generischen Schaltung: {0} + Konkrete Schaltung erzeugen + Erzeugen + Erzeugt aus dieser generischen Schaltung eine konkrete Schaltung + unter Anwendung der in diesem Element angegebenen Parameter. + + Fehler bei der Erzeugung der konkreten Schaltung! Zentrale ROM Inhalte Address Bits Number of address bits used. Data Bits - + Number of data bits used. Color The Color of the element. Background color - Background color of the circuit when it is embedded in another circuit. Is not used for DIL packages. + Background color of the circuit when it is embedded in another circuit. Is not + used for DIL packages. + Timeout cycles - If this amount of cycles is reached without a break signal, an error is created. + If this amount of cycles is reached without a break signal, an error is created. + Data The values stored in this element. Default @@ -1858,6 +1861,12 @@ Addr. Bits Name to use in generic circuits: {0} + Create Concrete Circuit + Create + Creates a concrete circuit from this generic circuit using the + parameters specified in this element. + + Error while creating the concrete circuit! <h1>Digital</h1>A simple simulator for digital circuits. Written by H. Neemann in 2016-2020. @@ -1865,9 +1874,11 @@ The icons are taken from the <a href="http://tango.freedesktop.org">Tango Desktop Project</a>. Visit the project at <a href="https://github.com/hneemann/[[name]]">GitHub</a>. - At Github you can also <a href="https://github.com/hneemann/[[name]]/releases/latest">download</a> the latest release. + At Github you can also <a href="https://github.com/hneemann/[[name]]/releases/latest">download</a> + the latest release. - There you also can file an <a href="https://github.com/hneemann/[[name]]/issues/new?body=version:%20[[version]]&labels=bug">issue</a> or suggest + There you also can file an <a href="https://github.com/hneemann/[[name]]/issues/new?body=version:%20[[version]]&labels=bug">issue</a> + or suggest an <a href="https://github.com/hneemann/[[name]]/issues/new?labels=enhancement">enhancement</a>. {0} nodes