mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-24 04:42:51 -04:00
fixes a bug if a generic circuit creates pins and is used with a Layout Shape, closes #625
This commit is contained in:
parent
6aaa35325c
commit
7fef9fe56f
@ -66,12 +66,16 @@
|
|||||||
<visualElement>
|
<visualElement>
|
||||||
<elementName>genAnd.dig</elementName>
|
<elementName>genAnd.dig</elementName>
|
||||||
<elementAttributes>
|
<elementAttributes>
|
||||||
|
<entry>
|
||||||
|
<string>shapeType</string>
|
||||||
|
<shapeType>LAYOUT</shapeType>
|
||||||
|
</entry>
|
||||||
<entry>
|
<entry>
|
||||||
<string>generic</string>
|
<string>generic</string>
|
||||||
<string>inputs := 3;</string>
|
<string>inputs := 3;</string>
|
||||||
</entry>
|
</entry>
|
||||||
</elementAttributes>
|
</elementAttributes>
|
||||||
<pos x="760" y="520"/>
|
<pos x="760" y="500"/>
|
||||||
</visualElement>
|
</visualElement>
|
||||||
<visualElement>
|
<visualElement>
|
||||||
<elementName>Out</elementName>
|
<elementName>Out</elementName>
|
||||||
|
@ -82,6 +82,21 @@ public final class ElementTypeDescriptionCustom extends ElementTypeDescription {
|
|||||||
return circuit;
|
return circuit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the resolved circuit if it is a generic circuit
|
||||||
|
*
|
||||||
|
* @param attributes the defining attributes
|
||||||
|
* @return the resolved circuit
|
||||||
|
* @throws NodeException NodeException
|
||||||
|
* @throws ElementNotFoundException ElementNotFoundException
|
||||||
|
*/
|
||||||
|
public Circuit getResolvedCircuit(ElementAttributes attributes) throws NodeException, ElementNotFoundException {
|
||||||
|
if (isGeneric())
|
||||||
|
return resolveGenerics.resolveCircuit(attributes).getCircuit();
|
||||||
|
else
|
||||||
|
return circuit;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets a custom description for this field
|
* Sets a custom description for this field
|
||||||
*
|
*
|
||||||
|
@ -13,8 +13,9 @@ import de.neemann.digital.core.io.In;
|
|||||||
import de.neemann.digital.core.io.Out;
|
import de.neemann.digital.core.io.Out;
|
||||||
import de.neemann.digital.core.wiring.Clock;
|
import de.neemann.digital.core.wiring.Clock;
|
||||||
import de.neemann.digital.draw.elements.*;
|
import de.neemann.digital.draw.elements.*;
|
||||||
import de.neemann.digital.draw.graphics.*;
|
|
||||||
import de.neemann.digital.draw.graphics.Polygon;
|
import de.neemann.digital.draw.graphics.Polygon;
|
||||||
|
import de.neemann.digital.draw.graphics.*;
|
||||||
|
import de.neemann.digital.draw.library.ElementNotFoundException;
|
||||||
import de.neemann.digital.draw.library.ElementTypeDescriptionCustom;
|
import de.neemann.digital.draw.library.ElementTypeDescriptionCustom;
|
||||||
import de.neemann.digital.lang.Lang;
|
import de.neemann.digital.lang.Lang;
|
||||||
|
|
||||||
@ -33,8 +34,8 @@ import static de.neemann.digital.draw.shapes.GenericShape.SIZE;
|
|||||||
*/
|
*/
|
||||||
public class LayoutShape implements Shape {
|
public class LayoutShape implements Shape {
|
||||||
|
|
||||||
private int width;
|
private final int width;
|
||||||
private int height;
|
private final int height;
|
||||||
private final Pins pins;
|
private final Pins pins;
|
||||||
private final Color color;
|
private final Color color;
|
||||||
private final String name;
|
private final String name;
|
||||||
@ -48,10 +49,11 @@ public class LayoutShape implements Shape {
|
|||||||
*
|
*
|
||||||
* @param custom the type description
|
* @param custom the type description
|
||||||
* @param elementAttributes the local attributes
|
* @param elementAttributes the local attributes
|
||||||
* @throws NodeException NodeException
|
* @throws NodeException NodeException
|
||||||
* @throws PinException PinException
|
* @throws PinException PinException
|
||||||
|
* @throws ElementNotFoundException ElementNotFoundException
|
||||||
*/
|
*/
|
||||||
public LayoutShape(ElementTypeDescriptionCustom custom, ElementAttributes elementAttributes) throws NodeException, PinException {
|
public LayoutShape(ElementTypeDescriptionCustom custom, ElementAttributes elementAttributes) throws NodeException, PinException, ElementNotFoundException {
|
||||||
String l = elementAttributes.getLabel();
|
String l = elementAttributes.getLabel();
|
||||||
if (l != null && l.length() > 0)
|
if (l != null && l.length() > 0)
|
||||||
name = l;
|
name = l;
|
||||||
@ -63,7 +65,9 @@ public class LayoutShape implements Shape {
|
|||||||
top = new PinList(name, true);
|
top = new PinList(name, true);
|
||||||
bottom = new PinList(name, true);
|
bottom = new PinList(name, true);
|
||||||
|
|
||||||
for (VisualElement ve : custom.getCircuit().getElements()) {
|
Circuit circuit = custom.getResolvedCircuit(elementAttributes);
|
||||||
|
|
||||||
|
for (VisualElement ve : circuit.getElements()) {
|
||||||
if (ve.equalsDescription(In.DESCRIPTION) || ve.equalsDescription(Clock.DESCRIPTION)) {
|
if (ve.equalsDescription(In.DESCRIPTION) || ve.equalsDescription(Clock.DESCRIPTION)) {
|
||||||
switch (ve.getRotate()) {
|
switch (ve.getRotate()) {
|
||||||
case 0:
|
case 0:
|
||||||
@ -113,7 +117,7 @@ public class LayoutShape implements Shape {
|
|||||||
for (PinDescription p : custom.getOutputDescriptions(elementAttributes))
|
for (PinDescription p : custom.getOutputDescriptions(elementAttributes))
|
||||||
pins.add(createPin(map, p));
|
pins.add(createPin(map, p));
|
||||||
|
|
||||||
color = custom.getCircuit().getAttributes().get(Keys.BACKGROUND_COLOR);
|
color = circuit.getAttributes().get(Keys.BACKGROUND_COLOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Pin createPin(HashMap<String, PinPos> map, PinDescription p) throws PinException {
|
private Pin createPin(HashMap<String, PinPos> map, PinDescription p) throws PinException {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user