From 2b405ef5d0e6ee6b440d5077a4058e8df0c2ecd3 Mon Sep 17 00:00:00 2001 From: Fabian Stemmler Date: Mon, 15 Jul 2019 15:11:38 +0200 Subject: [PATCH] Fixed an issue when removing multiple WirePointHandles at once Also changed click priority: WireHandles have a higher priority than ComponentHandles now. --- .../model/editor/handles/HandleManager.java | 27 ++++++++----------- .../model/editor/handles/WirePointHandle.java | 6 +++-- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/HandleManager.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/HandleManager.java index f999c96a..91b0e3b0 100644 --- a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/HandleManager.java +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/HandleManager.java @@ -123,13 +123,6 @@ public class HandleManager for(int i = 0; i < diff; i++) addWirePointHandle(w); } - else - { - for(int i = 0; i > diff; i--) - { - removeLastWirePointHandle(wire); - } - } List wpHandles = pointHandlesPerWire.get(w); int size = wpHandles.size(); @@ -203,23 +196,25 @@ public class HandleManager List 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 handles = pointHandlesPerWire.get(owner); + int pointIndex = handles.indexOf(h); + handles.remove(pointIndex); removeHandle(h); + owner.removePathPoint(pointIndex); } private void removeWirePointHandles(GUIWire owner) @@ -345,9 +340,9 @@ public class HandleManager 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); } diff --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/WirePointHandle.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/WirePointHandle.java index 24575797..0779247f 100644 --- a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/WirePointHandle.java +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/WirePointHandle.java @@ -11,14 +11,16 @@ import net.mograsim.logic.model.model.wires.GUIWire; public class WirePointHandle extends Handle { private final static int END_OFFSET = 4; + private final HandleManager manager; private boolean selected = false; public final GUIWire parent; private int pointIndex; - public WirePointHandle(GUIWire parent, int pointIndex) + public WirePointHandle(HandleManager manager, GUIWire parent, int pointIndex) { super(); + this.manager = manager; this.parent = parent; this.pointIndex = pointIndex; setSize(END_OFFSET, END_OFFSET); @@ -63,7 +65,7 @@ public class WirePointHandle extends Handle @Override public void reqDelete() { - parent.removePathPoint(pointIndex); + manager.destroyWirePointHandle(parent, this); } @Override -- 2.17.1