import java.util.Map;
import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.SubmodelComponentParams.ComponentCompositionParams.InnerComponentParams;
import net.mograsim.logic.ui.model.components.SubmodelComponentParams.ComponentCompositionParams;
+import net.mograsim.logic.ui.model.components.SubmodelComponentParams.ComponentCompositionParams.InnerComponentParams;
import net.mograsim.logic.ui.model.components.SubmodelComponentParams.InnerWireParams;
import net.mograsim.logic.ui.model.components.SubmodelComponentParams.InterfacePinParams;
import net.mograsim.logic.ui.model.wires.GUIWire;
+import net.mograsim.logic.ui.model.wires.MovablePin;
+import net.mograsim.logic.ui.model.wires.WireCrossPoint;
/**
* Creates {@link SubmodelComponent}s from {@link SubmodelComponentParams}
((Number) m.get(SimpleRectangularSubmodelComponent.kLogicWidth)).intValue(),
(String) m.get(SimpleRectangularSubmodelComponent.kLabel));
rect.setSubmodelScale(params.composition.innerScale);
- rect.setSize(params.width, params.height);
- rect.setInputCount(((Number) m.get(SimpleRectangularSubmodelComponent.kInCount)).intValue());
- rect.setOutputCount(((Number) m.get(SimpleRectangularSubmodelComponent.kOutCount)).intValue());
+ // rect.setSize(params.width, params.height);
+
+ int inputCount = ((Number) m.get(SimpleRectangularSubmodelComponent.kInCount)).intValue();
+ String[] inputNames = new String[inputCount];
+ for (int i = 0; i < inputCount; i++)
+ inputNames[i] = params.interfacePins[i].name;
+ rect.setInputPins(inputNames);
+
+ int outputCount = ((Number) m.get(SimpleRectangularSubmodelComponent.kOutCount)).intValue();
+ String[] outputPins = new String[outputCount];
+ for (int i = 0; i < outputCount; i++)
+ outputPins[i] = params.interfacePins[inputCount + i].name;
+ rect.setOutputPins(outputPins);
+
return rect;
}
catch (ClassCastException | NullPointerException e)
comp.setSize(params.width, params.height);
for (InterfacePinParams iPinParams : params.interfacePins)
{
- comp.addSubmodelInterface(iPinParams.logicWidth, iPinParams.location.x, iPinParams.location.y);
+ comp.addSubmodelInterface(
+ new MovablePin(comp, iPinParams.name, iPinParams.logicWidth, iPinParams.location.x, iPinParams.location.y));
}
return comp;
}
if (path.startsWith("class:"))
{
path = path.substring(6);
- components[i] = createInnerComponentFromClass(comp, path, cParams.logicWidth);
+ components[i] = createInnerComponentFromClass(comp, path, cParams.params);
components[i].moveTo(cParams.pos.x, cParams.pos.y);
} else if (path.startsWith("file:"))
{
{
InnerWireParams innerWire = params.innerWires[i];
new GUIWire(comp.submodelModifiable,
- comp.submodelModifiable.getComponents().get(innerWire.pin1.compId).getPins().get(innerWire.pin1.pinIndex),
- comp.submodelModifiable.getComponents().get(innerWire.pin2.compId).getPins().get(innerWire.pin2.pinIndex),
- innerWire.path);
+ comp.submodelModifiable.getComponents().get(innerWire.pin1.compId).getPin(innerWire.pin1.pinName),
+ comp.submodelModifiable.getComponents().get(innerWire.pin2.compId).getPin(innerWire.pin2.pinName), innerWire.path);
}
}
catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException | SecurityException
}
}
- private static GUIComponent createInnerComponentFromClass(SubmodelComponent parent, String classname, int logicWidth)
- throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException,
- NoSuchMethodException, SecurityException, ClassNotFoundException
+ private static GUIComponent createInnerComponentFromClass(SubmodelComponent parent, String classname, Map<String, Object> params)
+ throws InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, SecurityException,
+ ClassNotFoundException
{
Class<?> c = Class.forName(classname);
Object comp;
- try
+ if (SimpleRectangularGUIGate.class.isAssignableFrom(c) || WireCrossPoint.class.equals(c))
+ {
+ Constructor<?> constructor = c.getConstructor(ViewModelModifiable.class, int.class);
+ comp = constructor.newInstance(parent.submodelModifiable,
+ ((Number) params.get(SimpleRectangularGUIGate.kLogicWidth)).intValue());
+ } else
{
Constructor<?> constructor = c.getConstructor(ViewModelModifiable.class);
comp = constructor.newInstance(parent.submodelModifiable);
}
- catch (@SuppressWarnings("unused") NoSuchMethodException e)
- {
- Constructor<?> constructor = c.getConstructor(ViewModelModifiable.class, int.class);
- comp = constructor.newInstance(parent.submodelModifiable, logicWidth);
- }
-
- if (comp instanceof GUIComponent)
- return (GUIComponent) comp;
- throw new IllegalArgumentException("Class given as subcomponent was not a GUIComponent!");
+ return (GUIComponent) comp;
}
}