From f72983ea73fe2bd122969b861a759a1ceb861483 Mon Sep 17 00:00:00 2001 From: "helmut.neemann" Date: Wed, 3 May 2017 13:05:48 +0200 Subject: [PATCH] added a locked mode --- .../de/neemann/digital/core/element/Keys.java | 9 +- .../digital/draw/elements/Circuit.java | 1 + .../gui/components/CircuitComponent.java | 100 +++++++++++------- src/main/resources/lang/lang_de.xml | 2 + src/main/resources/lang/lang_en.xml | 2 + 5 files changed, 73 insertions(+), 41 deletions(-) diff --git a/src/main/java/de/neemann/digital/core/element/Keys.java b/src/main/java/de/neemann/digital/core/element/Keys.java index 97506b184..237d14d5f 100644 --- a/src/main/java/de/neemann/digital/core/element/Keys.java +++ b/src/main/java/de/neemann/digital/core/element/Keys.java @@ -312,12 +312,17 @@ public final class Keys { * row bits in led matrix */ public static final Key.KeyBits ROW_DATA_BITS - = new Key.KeyBits("rowDataBits", 8);; + = new Key.KeyBits("rowDataBits", 8); /** * column address bits in led matrix */ public static final Key.KeyBits COL_ADDR_BITS - = new Key.KeyBits("colAddrBits", 3);; + = new Key.KeyBits("colAddrBits", 3); + /** + * In locked mode the circuit can not be modified + */ + public static final Key LOCKED_MODE + = new Key<>("lockedMode", false); } diff --git a/src/main/java/de/neemann/digital/draw/elements/Circuit.java b/src/main/java/de/neemann/digital/draw/elements/Circuit.java index 861093e01..549fe55b6 100644 --- a/src/main/java/de/neemann/digital/draw/elements/Circuit.java +++ b/src/main/java/de/neemann/digital/draw/elements/Circuit.java @@ -51,6 +51,7 @@ public class Circuit { ATTR_LIST.add(Keys.WIDTH); ATTR_LIST.add(Keys.BACKGROUND_COLOR); ATTR_LIST.add(Keys.DESCRIPTION); + ATTR_LIST.add(Keys.LOCKED_MODE); } private int version = 1; 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 f6323769e..f35166ac8 100644 --- a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java +++ b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java @@ -133,20 +133,22 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe pasteAction = new AbstractAction(Lang.get("menu_paste")) { @Override public void actionPerformed(ActionEvent e) { - Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); - try { - Object data = clipboard.getData(DataFlavor.stringFlavor); - if (data instanceof String) { - Vector posVector = getPosVector(lastMousePos.x, lastMousePos.y); - ArrayList elements = CircuitTransferable.createList(data, shapeFactory, posVector); - if (elements != null) { - removeHighLighted(); - mouseInsertList.activate(elements, posVector); + if (!isLocked()) { + Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + try { + Object data = clipboard.getData(DataFlavor.stringFlavor); + if (data instanceof String) { + Vector posVector = getPosVector(lastMousePos.x, lastMousePos.y); + ArrayList elements = CircuitTransferable.createList(data, shapeFactory, posVector); + if (elements != null) { + removeHighLighted(); + mouseInsertList.activate(elements, posVector); + } } + } catch (Exception e1) { + e1.printStackTrace(); + SwingUtilities.invokeLater(new ErrorMessage(Lang.get("msg_clipboardContainsNoImportableData")).setComponent(CircuitComponent.this)); } - } catch (Exception e1) { - e1.printStackTrace(); - SwingUtilities.invokeLater(new ErrorMessage(Lang.get("msg_clipboardContainsNoImportableData")).setComponent(CircuitComponent.this)); } } }; @@ -640,6 +642,10 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe repaint(); } + private boolean isLocked() { + return circuit.getAttributes().get(Keys.LOCKED_MODE); + } + private class MouseDispatcher extends MouseAdapter implements MouseMotionListener { private Vector pos; private boolean isMoved; @@ -767,17 +773,19 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe Vector pos = getPosVector(e); if (e.getButton() == MouseEvent.BUTTON3) { - VisualElement vp = getVisualElement(pos, true); - if (vp != null) - editAttributes(vp, e); + if (!isLocked()) { + VisualElement vp = getVisualElement(pos, true); + if (vp != null) + editAttributes(vp, e); + } } else if (e.getButton() == MouseEvent.BUTTON1) { VisualElement vp = getVisualElement(pos, false); if (vp != null) { - if (circuit.isPinPos(raster(pos), vp) && !e.isControlDown()) - mouseWire.activate(pos); - else + if (circuit.isPinPos(raster(pos), vp) && !e.isControlDown()) { + if (!isLocked()) mouseWire.activate(pos); + } else mouseMoveElement.activate(vp, pos); - } else { + } else if (!isLocked()) { if (e.isControlDown()) { Wire wire = circuit.getWireAt(pos, SIZE2); if (wire != null) @@ -845,7 +853,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe @Override void clicked(MouseEvent e) { - if (e.getButton() == MouseEvent.BUTTON1) { + if (e.getButton() == MouseEvent.BUTTON1 && !isLocked()) { circuit.add(element); hasChanged(); } @@ -889,16 +897,19 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe @Override void clicked(MouseEvent e) { - visualElement.setPos(raster(visualElement.getPos())); + if (!isLocked()) + visualElement.setPos(raster(visualElement.getPos())); mouseNormal.activate(); } @Override void moved(MouseEvent e) { - Vector pos = getPosVector(e); - visualElement.setPos(raster(pos.add(delta))); - circuit.modified(); - hasChanged(); + if (!isLocked()) { + Vector pos = getPosVector(e); + visualElement.setPos(raster(pos.add(delta))); + circuit.modified(); + hasChanged(); + } } @Override @@ -908,22 +919,28 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe @Override public void delete() { - circuit.delete(visualElement); - mouseNormal.activate(); - isManualScale = true; + if (!isLocked()) { + circuit.delete(visualElement); + mouseNormal.activate(); + isManualScale = true; + } } @Override public void rotate() { - visualElement.rotate(); - circuit.modified(); - hasChanged(); + if (!isLocked()) { + visualElement.rotate(); + circuit.modified(); + hasChanged(); + } } @Override public void escapePressed() { - visualElement.setPos(raster(initialPos)); - visualElement.setRotation(initialRot); + if (!isLocked()) { + visualElement.setPos(raster(initialPos)); + visualElement.setRotation(initialRot); + } mouseNormal.activate(); } } @@ -1075,7 +1092,8 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe @Override boolean dragged(MouseEvent e) { if (wasReleased) { - mouseMoveSelected.activate(corner1, corner2, getPosVector(e)); + if (!isLocked()) + mouseMoveSelected.activate(corner1, corner2, getPosVector(e)); } else { corner2 = getPosVector(e); if ((e.getModifiersEx() & CTRL_DOWN_MASK) != 0) { @@ -1118,14 +1136,18 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe @Override public void delete() { - circuit.delete(Vector.min(corner1, corner2), Vector.max(corner1, corner2)); - mouseNormal.activate(); - isManualScale = true; + if (!isLocked()) { + circuit.delete(Vector.min(corner1, corner2), Vector.max(corner1, corner2)); + mouseNormal.activate(); + isManualScale = true; + } } public void rotate() { - mouseMoveSelected.activate(corner1, corner2, lastMousePos); - mouseMoveSelected.rotate(); + if (!isLocked()) { + mouseMoveSelected.activate(corner1, corner2, lastMousePos); + mouseMoveSelected.rotate(); + } } @Override diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index f750e670d..fddf3177c 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -590,6 +590,8 @@ Sind evtl. die Namen der Variablen nicht eindeutig? Gibt direkt die Zahl der Zeilen an, indem die Anzahl der Bits des Zeilenwortes festgegelgt wird. Adressbits der Spalten Adressiert die einzelnen Spalten. Drei Bits bedeuten also acht Spalten. + Bearbeitung gesperrt + Die Schaltung ist für die Bearbeitung gesperrt. Dioden und FG-FETs können jedoch konfiguriert werden. Logisch Arithmetik diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index 4c071be96..c125c73aa 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -580,6 +580,8 @@ The names of the variables may not be unique. Specifies the number of rows by specifying the number of bits of the row word. Address bits of columns Addresses the individual columns. Three bits means eight columns. + Modification locked + The circuit is locked. It is possible to configure diodes and FGF-FETs. Logic Arithmetic