From 4dadff6e6234a83b612d8ab5fbf7b0cf23b42890 Mon Sep 17 00:00:00 2001 From: hneemann Date: Tue, 29 Aug 2017 22:17:25 +0200 Subject: [PATCH] modifies data bit only if necessary. --- .../gui/components/CircuitComponent.java | 4 ++- .../modification/ModifySetBits.java | 26 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) 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 fa1ba975f..0c89b7f48 100644 --- a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java +++ b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java @@ -1022,7 +1022,9 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe int bits = Integer.decode(num); Vector c1 = mouseControllerSelect.corner1; Vector c2 = mouseControllerSelect.corner2; - modify(new ModifySetBits(c1, c2, bits)); + ModifySetBits modifySetBits = new ModifySetBits(c1, c2, bits); + if (modifySetBits.isSomethingToDo(circuit, library)) + modify(modifySetBits); removeHighLighted(); mouseNormal.activate(); } catch (NumberFormatException ex) { diff --git a/src/main/java/de/neemann/digital/gui/components/modification/ModifySetBits.java b/src/main/java/de/neemann/digital/gui/components/modification/ModifySetBits.java index b32d96160..e5320ce00 100644 --- a/src/main/java/de/neemann/digital/gui/components/modification/ModifySetBits.java +++ b/src/main/java/de/neemann/digital/gui/components/modification/ModifySetBits.java @@ -54,6 +54,32 @@ public class ModifySetBits implements Modification { circuit.modified(); } + /** + * Checks if there are relevant elements in the rectangle + * + * @param circuit the circuit + * @param library the library + * @return true if there are components with a bits attribute + */ + public boolean isSomethingToDo(Circuit circuit, ElementLibrary library) { + ArrayList list = circuit.getElementsToMove(min, max); + for (Movable m : list) + if (m instanceof VisualElement) { + VisualElement ve = (VisualElement) m; + try { + ElementTypeDescription td = library.getElementType(ve.getElementName()); + if (td != null) { + if (td.getAttributeList().contains(Keys.BITS)) + if (ve.getElementAttributes().get(Keys.BITS) != bits) + return true; + } + } catch (ElementNotFoundException e) { + e.printStackTrace(); + } + } + return false; + } + @Override public String toString() { return Lang.get("mod_set_N_BitsToSelection", bits);