import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.stream.Collectors;
private void registerWire(GUIWire wire)
{
- wire.addPathChangedListener((w, diff) ->
+ Point[] path = wire.getPath();
+ AtomicInteger oldLength = new AtomicInteger(path == null ? 0 : path.length);
+ wire.addPathChangedListener(w ->
{
+ Point[] newPath = w.getPath();
+ int newLength = newPath == null ? 0 : newPath.length;
+ int diff = oldLength.getAndSet(newLength) - newLength;
if(diff != 0)
{
if(diff > 0)
for(int i = 0; i < diff; i++)
addWirePointHandle(w);
}
- else
- {
- for(int i = 0; i > diff; i--)
- {
- removeLastWirePointHandle(wire);
- }
- }
List<WirePointHandle> wpHandles = pointHandlesPerWire.get(w);
int size = wpHandles.size();
pointHandlesPerWire.get(w).forEach(h -> h.updatePos());
});
addWireHandle(wire);
- if (wire.getPath() == null)
+ if (path == null)
return;
- for (int i = 0; i < wire.getPath().length; i++)
+ for (int i = 0; i < path.length; i++)
{
addWirePointHandle(wire);
}
List<WirePointHandle> wireHandles = pointHandlesPerWire.get(w);
WirePointHandle h;
if (wireHandles != null)
- wireHandles.add(h = new WirePointHandle(w, wireHandles.size()));
+ wireHandles.add(h = new WirePointHandle(this, w, wireHandles.size()));
else
{
wireHandles = new ArrayList<>();
- h = new WirePointHandle(w, 0);
+ h = new WirePointHandle(this, w, 0);
wireHandles.add(h);
pointHandlesPerWire.put(h.parent, wireHandles);
}
this.wirePointHandles.add(h);
addHandle(h);
}
-
- private void removeLastWirePointHandle(GUIWire owner)
+
+ void destroyWirePointHandle(GUIWire owner, WirePointHandle h)
{
- Handle h = pointHandlesPerWire.get(owner).remove(0);
- wirePointHandles.remove(h);
+ List<WirePointHandle> handles = pointHandlesPerWire.get(owner);
+ int pointIndex = handles.indexOf(h);
+ handles.remove(pointIndex);
removeHandle(h);
+ owner.removePathPoint(pointIndex);
}
private void removeWirePointHandles(GUIWire owner)
if (!click(handlePerPin.values(), clicked, entryState, stateMask))
if (!click(handlePerInterfacePin.values(), clicked, entryState, stateMask))
if (!click(getWirePointHandles(), clicked, entryState, stateMask))
- if (!click(handlePerComp.values(), clicked, entryState, stateMask))
- if (!click(getWireHandles(), clicked, entryState, stateMask))
- entryState.clickedEmpty(clicked, stateMask);
+ if (!click(getWireHandles(), clicked, entryState, stateMask))
+ if (!click(handlePerComp.values(), clicked, entryState, stateMask))
+ entryState.clickedEmpty(clicked, stateMask);
entryState.clicked(clicked, stateMask);
}