From 16ceaeb06d8986c775a840725d59c2efb581e032 Mon Sep 17 00:00:00 2001 From: hneemann Date: Tue, 16 May 2017 08:39:22 +0200 Subject: [PATCH] added lazy loading of tool tip texts from the circuits --- .../digital/draw/library/ElementLibrary.java | 2 +- .../digital/draw/library/LibraryNode.java | 4 ++++ .../de/neemann/digital/gui/InsertAction.java | 21 +++++++++++++++++++ .../neemann/digital/gui/LibrarySelector.java | 4 +--- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java b/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java index 81fd4448d..8ca79988e 100644 --- a/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java +++ b/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java @@ -482,7 +482,7 @@ public class ElementLibrary implements Iterable /** * Returns the filename - * the retuned file is opened if the user wants to modify the element + * The returned file is opened if the user wants to modify the element * * @return the filename */ diff --git a/src/main/java/de/neemann/digital/draw/library/LibraryNode.java b/src/main/java/de/neemann/digital/draw/library/LibraryNode.java index a38d19ccb..fe222ae7b 100644 --- a/src/main/java/de/neemann/digital/draw/library/LibraryNode.java +++ b/src/main/java/de/neemann/digital/draw/library/LibraryNode.java @@ -9,6 +9,8 @@ import de.neemann.digital.draw.shapes.ShapeFactory; import de.neemann.digital.lang.Lang; import de.neemann.gui.IconCreator; import de.neemann.gui.LineBreaker; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.swing.*; import java.io.File; @@ -21,6 +23,7 @@ import java.util.Iterator; * Created by hneemann on 25.03.17. */ public class LibraryNode implements Iterable { + private static final Logger LOGGER = LoggerFactory.getLogger(LibraryNode.class); private static final Icon ICON_NOT_UNIQUE = IconCreator.create("testFailed.png"); private final ArrayList children; @@ -325,6 +328,7 @@ public class LibraryNode implements Iterable { if (description == null) { if (toolTipText == null) { try { + LOGGER.debug("load tooltip from "+file); Circuit c = Circuit.loadCircuit(file, null); toolTipText = c.getAttributes().get(Keys.DESCRIPTION); } catch (Exception e) { diff --git a/src/main/java/de/neemann/digital/gui/InsertAction.java b/src/main/java/de/neemann/digital/gui/InsertAction.java index dfb78c73d..8cfb3204f 100644 --- a/src/main/java/de/neemann/digital/gui/InsertAction.java +++ b/src/main/java/de/neemann/digital/gui/InsertAction.java @@ -90,4 +90,25 @@ public final class InsertAction extends ToolTipAction { public LibraryNode getNode() { return node; } + + + /** + * Implements a lazy loading of the tooltips. + * Avoids the reading of all tooltips from the lib files if menu is created. + * This code ensures, that the tooltips are onli loaded from the file if the text is shown to the user. + * + * @return the JMenuItem created + */ + @Override + public JMenuItem createJMenuItem() { + JMenuItem i = new JMenuItem(node.getTranslatedName(), getIcon()) { + @Override + public String getToolTipText() { + return node.getToolTipText(); + } + }; + i.addActionListener(InsertAction.this); + ToolTipManager.sharedInstance().registerComponent(i); + return i; + } } diff --git a/src/main/java/de/neemann/digital/gui/LibrarySelector.java b/src/main/java/de/neemann/digital/gui/LibrarySelector.java index 599ace3a6..1eb281502 100644 --- a/src/main/java/de/neemann/digital/gui/LibrarySelector.java +++ b/src/main/java/de/neemann/digital/gui/LibrarySelector.java @@ -83,9 +83,7 @@ public class LibrarySelector implements LibraryListener { private void addComponents(JMenu parts, LibraryNode node) { if (node.isLeaf()) { - parts.add(new InsertAction(node, insertHistory, circuitComponent, shapeFactory) - .setToolTip(node.getToolTipText()) - .createJMenuItem()); + parts.add(new InsertAction(node, insertHistory, circuitComponent, shapeFactory).createJMenuItem()); } else { JMenu subMenu = new JMenu(node.getName()); for (LibraryNode child : node)