From 41f70752197af87e16b2697e9f08fcfdc74d6d3a Mon Sep 17 00:00:00 2001 From: hneemann Date: Fri, 26 May 2017 08:05:17 +0200 Subject: [PATCH 1/6] better dragging detection on high dpi screens --- .../neemann/digital/gui/components/CircuitComponent.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) 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 33c356793..e165fbaa9 100644 --- a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java +++ b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java @@ -19,10 +19,7 @@ import de.neemann.digital.gui.Main; import de.neemann.digital.gui.sync.NoSync; import de.neemann.digital.gui.sync.Sync; import de.neemann.digital.lang.Lang; -import de.neemann.gui.ErrorMessage; -import de.neemann.gui.IconCreator; -import de.neemann.gui.LineBreaker; -import de.neemann.gui.ToolTipAction; +import de.neemann.gui.*; import javax.swing.*; import java.awt.*; @@ -58,6 +55,8 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe private static final int MOUSE_BORDER_SMALL = 10; private static final int MOUSE_BORDER_LARGE = 50; + private static final int DRAG_DISTANCE = (int) (SIZE2 * Screen.getInstance().getScaling()); + private final Main parent; private final ElementLibrary library; private final HashSet highLighted; @@ -700,7 +699,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe private boolean wasMoved(MouseEvent e) { Vector d = new Vector(e.getX(), e.getY()).sub(pos); - return Math.abs(d.x) > SIZE2 || Math.abs(d.y) > SIZE2; + return Math.abs(d.x) > DRAG_DISTANCE || Math.abs(d.y) > DRAG_DISTANCE; } @Override From a566f50276e2a468bfcadb9fb36463bfd9f181e3 Mon Sep 17 00:00:00 2001 From: hneemann Date: Fri, 26 May 2017 08:11:45 +0200 Subject: [PATCH 2/6] added e-mail to readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e6e813406..f1e680a7d 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,8 @@ If you want to send a bug report or feature request please use the GitHub [issue tracker](https://github.com/hneemann/Digital/issues/new). This helps me to improve Digital, so do not hesitate. +You can also send a private message to [digital-simulator@web.de](mailto:digital-simulator@web.de). + ## Motivation ## Below I would like to explain briefly the reasons which led me to start a new development: From 6599ef96f5cbeb473a4cbe5494a86994c0a1777f Mon Sep 17 00:00:00 2001 From: hneemann Date: Fri, 26 May 2017 08:26:23 +0200 Subject: [PATCH 3/6] show the restart message also if the shape type is changed --- src/main/java/de/neemann/digital/gui/Main.java | 6 ++++-- src/main/resources/lang/lang_de.xml | 2 +- src/main/resources/lang/lang_en.xml | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/neemann/digital/gui/Main.java b/src/main/java/de/neemann/digital/gui/Main.java index 7fa73703b..a8cb5dc14 100644 --- a/src/main/java/de/neemann/digital/gui/Main.java +++ b/src/main/java/de/neemann/digital/gui/Main.java @@ -508,11 +508,13 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS ToolTipAction editSettings = new ToolTipAction(Lang.get("menu_editSettings")) { @Override public void actionPerformed(ActionEvent e) { - Language oldLang = Settings.getInstance().get(Keys.SETTINGS_LANGUAGE); + final Language oldLang = Settings.getInstance().get(Keys.SETTINGS_LANGUAGE); + final boolean oldIeeeShapes = Settings.getInstance().get(Keys.SETTINGS_IEEE_SHAPES); if (new AttributeDialog(Main.this, Settings.SETTINGS_KEYS, Settings.getInstance().getAttributes()).showDialog()) { FormatToExpression.setDefaultFormat(Settings.getInstance().get(Keys.SETTINGS_EXPRESSION_FORMAT)); final Language newLang = Settings.getInstance().getAttributes().get(Keys.SETTINGS_LANGUAGE); - if (!newLang.equals(oldLang)) { + final boolean newIeeeShapes = Settings.getInstance().get(Keys.SETTINGS_IEEE_SHAPES); + if (!newLang.equals(oldLang) || (oldIeeeShapes != newIeeeShapes)) { Lang.setLanguage(newLang); JOptionPane.showMessageDialog(Main.this, Lang.get("msg_restartNeeded")); } diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index 5cbd74b25..ed3749b82 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -827,7 +827,7 @@ Die Icons stammen aus dem Tango Desktop Project. Es fehlt ein Diagramm für {0} Pinbelegung Pin {0}: {1} - Die Änderung der Sprache erfordert einen Neustart! + Die Änderung der Einstellung erfordert einen Neustart! Kein ROM im Model gefunden! Ein ROM muss als Programmspeicher gewählt werden! Mehr als einen Programmspeicher gefunden. Es darf nur einen Programmspeicher geben. Geben Sie einen Ausdruck ein: diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index 6dbdcadf0..495dfe7e7 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -817,7 +817,7 @@ The icons are taken from the Tango Desktop Project. Shape {0} is missing Pin assignment Pin {0}: {1} - To change the GUI language a restart is required! + A restart is required for the changes to take effect! No ROM found! ROM needs to be set to be program memory. More then one ROM found! Only one ROM must be set to be program memory. Command {0} unknown! From b5866ab75a90bb4168e5beaa9e62099d2bf9daef Mon Sep 17 00:00:00 2001 From: hneemann Date: Fri, 26 May 2017 08:42:56 +0200 Subject: [PATCH 4/6] added a setting which allows to enable the component tree view at startup --- src/main/java/de/neemann/digital/core/element/Keys.java | 7 +++++++ src/main/java/de/neemann/digital/gui/Main.java | 2 ++ src/main/java/de/neemann/digital/gui/Settings.java | 1 + src/main/resources/lang/lang_de.xml | 2 ++ src/main/resources/lang/lang_en.xml | 3 ++- 5 files changed, 14 insertions(+), 1 deletion(-) 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 c69991b62..2de0afea7 100644 --- a/src/main/java/de/neemann/digital/core/element/Keys.java +++ b/src/main/java/de/neemann/digital/core/element/Keys.java @@ -252,6 +252,13 @@ public final class Keys { public static final Key SETTINGS_LANGUAGE = new Key<>("Language", new Language()); + + /** + * Default state of the tree view + */ + public static final Key SETTINGS_DEFAULT_TREESELECT + = new Key<>("defTreeSelect", false); + /** * The GUI expression string representation */ diff --git a/src/main/java/de/neemann/digital/gui/Main.java b/src/main/java/de/neemann/digital/gui/Main.java index a8cb5dc14..760c1c57e 100644 --- a/src/main/java/de/neemann/digital/gui/Main.java +++ b/src/main/java/de/neemann/digital/gui/Main.java @@ -306,6 +306,8 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS } revalidate(); }); + if (Settings.getInstance().get(Keys.SETTINGS_DEFAULT_TREESELECT)) + treeCheckBox.doClick(); toolBar.add(viewHelp.createJButtonNoText()); toolBar.add(zoomIn.createJButtonNoText()); diff --git a/src/main/java/de/neemann/digital/gui/Settings.java b/src/main/java/de/neemann/digital/gui/Settings.java index 8571b9a20..cec46d3d0 100644 --- a/src/main/java/de/neemann/digital/gui/Settings.java +++ b/src/main/java/de/neemann/digital/gui/Settings.java @@ -32,6 +32,7 @@ public final class Settings implements AttributeListener { INT_LIST.add(Keys.SETTINGS_IEEE_SHAPES); INT_LIST.add(Keys.SETTINGS_LANGUAGE); INT_LIST.add(Keys.SETTINGS_EXPRESSION_FORMAT); + INT_LIST.add(Keys.SETTINGS_DEFAULT_TREESELECT); INT_LIST.add(Keys.SETTINGS_ATF1502_FITTER); } diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index ed3749b82..d553afbee 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -641,6 +641,8 @@ Sind evtl. die Namen der Variablen nicht eindeutig? Pinzuordnung bei der Programmierung eines CPLD verwendet. Pinanzahl DIL Anzahl der Pins des DILs. Wird hier eine 0 eingetragen, wird die Anzahl automatisch bestimmt. + Baumansicht beim Start aktivieren. + Wenn gesetzt, wird die Baumansicht beim Start automatisch aktiviert. Logisch Arithmetik diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index 495dfe7e7..a830fa2f2 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -631,7 +631,8 @@ The names of the variables may not be unique. the pin assignment when programming a CPLD. Number of DIL pins Number of pins. A zero means that the number od pins is determined automatically. - + Component tree view is visible at startup. + If set, the component tree view is enabled at startup. Logic Arithmetic From 03eb547b0d1352ba281f6faa23f8e68ed8854b1d Mon Sep 17 00:00:00 2001 From: hneemann Date: Fri, 26 May 2017 10:12:07 +0200 Subject: [PATCH 5/6] handle anti-alias function more consistent --- .../digital/gui/components/CircuitComponent.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) 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 e165fbaa9..69836ba12 100644 --- a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java +++ b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java @@ -464,11 +464,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe buffer = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().createCompatibleImage(getWidth(), getHeight()); Graphics2D gr2 = buffer.createGraphics(); - if (antiAlias) { - gr2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - gr2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); - gr2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); - } + enableAntiAlias(gr2); gr2.setColor(Color.WHITE); gr2.fillRect(0, 0, getWidth(), getHeight()); gr2.transform(transform); @@ -493,11 +489,20 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe Graphics2D gr2 = (Graphics2D) g; AffineTransform oldTrans = gr2.getTransform(); gr2.transform(transform); + enableAntiAlias(gr2); GraphicSwing gr = new GraphicSwing(gr2, (int) (2 / transform.getScaleX())); activeMouseController.drawTo(gr); gr2.setTransform(oldTrans); } + private void enableAntiAlias(Graphics2D gr2) { + if (antiAlias) { + gr2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + gr2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + gr2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); + } + } + @Override public void circuitHasChanged() { hasChanged = true; From 8af6a58408c998e1a57e0f44072a8c047a79e4b0 Mon Sep 17 00:00:00 2001 From: hneemann Date: Fri, 26 May 2017 10:19:32 +0200 Subject: [PATCH 6/6] selection disabled in the tree view --- .../java/de/neemann/digital/gui/components/tree/SelectTree.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/de/neemann/digital/gui/components/tree/SelectTree.java b/src/main/java/de/neemann/digital/gui/components/tree/SelectTree.java index 5c2e67503..c5e7e9734 100644 --- a/src/main/java/de/neemann/digital/gui/components/tree/SelectTree.java +++ b/src/main/java/de/neemann/digital/gui/components/tree/SelectTree.java @@ -45,7 +45,6 @@ public class SelectTree extends JTree { if (path != null && path.getPathCount() > 0) { LibraryNode node = (LibraryNode) path.getLastPathComponent(); if (node.isLeaf() && node.isUnique()) { - clearSelection(); try { ElementTypeDescription d = node.getDescription(); component.setPartToInsert(new VisualElement(d.getName()).setShapeFactory(shapeFactory));