From 52b2e9bb0d414b4686f93375f82418b7b1d8aac2 Mon Sep 17 00:00:00 2001 From: hoijui Date: Mon, 1 Jun 2020 13:50:55 +0200 Subject: [PATCH] proof of concept for Swing tool-tips This works, but is *really* only a proof of concept. one needs to activate it with: `(view as DefaultView).setToolTips(true)` And one needs to use gs-ui-swing of course. Then, the `String` attributes "ui.tooltip" set on nodes, edges and sprites are shown as Swing `JToolTip`s. --- .../ui/swing_viewer/DefaultView.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/org/graphstream/ui/swing_viewer/DefaultView.java b/src/org/graphstream/ui/swing_viewer/DefaultView.java index 4c9ff17..09ab041 100644 --- a/src/org/graphstream/ui/swing_viewer/DefaultView.java +++ b/src/org/graphstream/ui/swing_viewer/DefaultView.java @@ -34,9 +34,11 @@ import java.awt.BorderLayout; import java.awt.Graphics; import java.awt.Graphics2D; +import java.awt.Point; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.KeyListener; +import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.WindowEvent; @@ -46,6 +48,7 @@ import java.util.EnumSet; import javax.swing.JFrame; +import javax.swing.ToolTipManager; import org.graphstream.ui.graphicGraph.GraphicElement; import org.graphstream.ui.graphicGraph.GraphicGraph; @@ -115,6 +118,9 @@ public class DefaultView extends ViewPanel implements WindowListener, ComponentListener { private static final long serialVersionUID = -4489484861592064398L; + private static final EnumSet ALL_ELEMS + = EnumSet.allOf(InteractiveElement.class); + /** * Parent viewer. */ @@ -240,6 +246,50 @@ public void openInAFrame(boolean on) { } } + /** + * Turns tool-tips on or off. + * They are off by default. + * This is most useful for tool-tips of individual graph elements (like nodes and edges), + * and it displays the hovered-over elements tooltip text, + * as taken from it's "ui.tooltip" attribute, if one is set. + * @param enabled whether tool-tips are enabled or disabled. + */ + public void setToolTips(final boolean enabled) { + + if (enabled) { + ToolTipManager.sharedInstance().registerComponent(this); + } else { + ToolTipManager.sharedInstance().unregisterComponent(this); + } + } + + @Override + public String getToolTipText(final MouseEvent evt) { + String text = null; + + final GraphicElement graphElement = findGraphicElementAt(ALL_ELEMS, evt.getX(), evt.getY()); + if (graphElement != null) { + text = graphElement.getAttribute("ui.tooltip", String.class); + } + + if (text == null) { + text = graph.getAttribute("ui.tooltip", String.class); + } + + if (text == null) { + text = super.getToolTipText(evt); + } + + return text; + } + + @Override + public Point getToolTipLocation(final MouseEvent evt) { + final Point p = evt.getPoint(); + p.y += 15; + return p; + } + public void render(Graphics2D g) { // this might only be needed to fix a bug in JetBrains IntelliJ: // Even if this JComponent is part of a complex AWT layout, getX() and getY() always returns (0,0) - even if