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: 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 50fbf1c17..c7c49f109 100644 --- a/src/main/java/de/neemann/digital/gui/Main.java +++ b/src/main/java/de/neemann/digital/gui/Main.java @@ -309,6 +309,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()); @@ -511,11 +513,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/java/de/neemann/digital/gui/Settings.java b/src/main/java/de/neemann/digital/gui/Settings.java index bc352dd52..887ffa669 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/java/de/neemann/digital/gui/components/CircuitComponent.java b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java index 3cdafe6e5..0f9ed3e18 100644 --- a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java +++ b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java @@ -22,10 +22,7 @@ import de.neemann.digital.gui.components.modification.ModifyAttributes; 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.*; @@ -64,6 +61,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; @@ -547,11 +546,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); @@ -576,11 +571,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; @@ -799,7 +803,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 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)); diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index 5cbd74b25..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 @@ -827,7 +829,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..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 @@ -817,7 +818,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!