tmf: add simple tooltip provider for swt charts
authorBernd Hufmann <Bernd.Hufmann@ericsson.com>
Thu, 19 Dec 2013 19:41:20 +0000 (14:41 -0500)
committerBernd Hufmann <bernd.hufmann@ericsson.com>
Tue, 7 Jan 2014 14:00:47 +0000 (09:00 -0500)
Change-Id: Iaddea6d160fac65f781863b7f07a797cdbb3c072
Signed-off-by: Bernd Hufmann <Bernd.Hufmann@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/20156
Reviewed-by: Genevieve Bastien <gbastien+lttng@versatic.net>
IP-Clean: Genevieve Bastien <gbastien+lttng@versatic.net>
Tested-by: Genevieve Bastien <gbastien+lttng@versatic.net>
Tested-by: Hudson CI
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/xycharts/TmfSimpleTooltipProvider.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/xycharts/TmfXYChartViewer.java

diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/xycharts/TmfSimpleTooltipProvider.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/xycharts/TmfSimpleTooltipProvider.java
new file mode 100644 (file)
index 0000000..6ca6be1
--- /dev/null
@@ -0,0 +1,97 @@
+/**********************************************************************
+ * Copyright (c) 2013 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Bernd Hufmann - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.linuxtools.tmf.ui.viewers.xycharts;
+
+import org.eclipse.linuxtools.tmf.core.timestamp.ITmfTimestamp;
+import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimestamp;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseTrackListener;
+import org.swtchart.IAxis;
+
+/**
+ * Tool tip provider for TMF chart viewer. It displays the x and y
+ * value of the current mouse position.
+ *
+ * @author Bernd Hufmann
+ * @since 3.0
+ */
+public class TmfSimpleTooltipProvider extends TmfBaseProvider implements MouseTrackListener {
+
+    // ------------------------------------------------------------------------
+    // Constructors
+    // ------------------------------------------------------------------------
+    /**
+     * Constructor for a tool tip provider.
+     *
+     * @param tmfChartViewer
+     *                  The parent chart viewer
+     */
+    public TmfSimpleTooltipProvider(ITmfChartTimeProvider tmfChartViewer) {
+        super(tmfChartViewer);
+        register();
+    }
+
+    // ------------------------------------------------------------------------
+    // TmfBaseProvider
+    // ------------------------------------------------------------------------
+    @Override
+    public void register() {
+        getChart().getPlotArea().addMouseTrackListener(this);
+    }
+
+    @Override
+    public void deregister() {
+        if ((getChartViewer().getControl() != null) && !getChartViewer().getControl().isDisposed()) {
+            getChart().getPlotArea().removeMouseTrackListener(this);
+        }
+    }
+
+    @Override
+    public void refresh() {
+        // nothing to do
+    }
+
+    // ------------------------------------------------------------------------
+    // MouseTrackListener
+    // ------------------------------------------------------------------------
+    @Override
+    public void mouseEnter(MouseEvent e) {
+    }
+
+    @Override
+    public void mouseExit(MouseEvent e) {
+    }
+
+    @Override
+    public void mouseHover(MouseEvent e) {
+        if (getChartViewer().getWindowDuration() == 0) {
+            return;
+        }
+
+        IAxis xAxis = getChart().getAxisSet().getXAxis(0);
+        IAxis yAxis = getChart().getAxisSet().getYAxis(0);
+
+        double xCoordinate = xAxis.getDataCoordinate(e.x);
+        double yCoordinate = yAxis.getDataCoordinate(e.y);
+
+        ITmfChartTimeProvider viewer = getChartViewer();
+
+        /* set tooltip of current data point */
+        StringBuffer buffer = new StringBuffer();
+        buffer.append("x="); //$NON-NLS-1$
+        buffer.append(new TmfTimestamp((long) xCoordinate + viewer.getTimeOffset(), ITmfTimestamp.NANOSECOND_SCALE).toString());
+        buffer.append("\n"); //$NON-NLS-1$
+        buffer.append("y="); //$NON-NLS-1$
+        buffer.append((long) yCoordinate);
+        getChart().getPlotArea().setToolTipText(buffer.toString());
+    }
+}
\ No newline at end of file
index 750c9d6d864982c94b9c2c70f29cec726c29cce5..9c65578d69ba1cd10fdf031b225fd733b53bdf22 100644 (file)
@@ -80,6 +80,8 @@ public abstract class TmfXYChartViewer extends TmfViewer implements ITmfChartTim
     private TmfBaseProvider fMouseDragZoomProvider;
     /** The mouse wheel zoom provider */
     private TmfBaseProvider fMouseWheelZoomProvider;
+    /** The tooltip provider */
+    private TmfBaseProvider fToolTipProvider;
 
     // ------------------------------------------------------------------------
     // Constructors
@@ -124,6 +126,7 @@ public abstract class TmfXYChartViewer extends TmfViewer implements ITmfChartTim
         fMouseSelectionProvider = new TmfMouseSelectionProvider(this);
         fMouseDragZoomProvider = new TmfMouseDragZoomProvider(this);
         fMouseWheelZoomProvider = new TmfMouseWheelZoomProvider(this);
+        fToolTipProvider = new TmfSimpleTooltipProvider(this);
     }
 
     // ------------------------------------------------------------------------
@@ -291,6 +294,20 @@ public abstract class TmfXYChartViewer extends TmfViewer implements ITmfChartTim
         fMouseWheelZoomProvider = provider;
     }
 
+    /**
+     * Sets a tooltip provider. An existing provider will be
+     * disposed. Use <code>null</code> to disable the tooltip provider.
+     *
+     * @param provider
+     *            The tooltip provider to set
+     */
+    public void setTooltipProvider(TmfBaseProvider provider) {
+        if (fToolTipProvider != null) {
+            fToolTipProvider.dispose();
+        }
+        fToolTipProvider = provider;
+    }
+
     // ------------------------------------------------------------------------
     // ITmfChartTimeProvider
     // ------------------------------------------------------------------------
@@ -397,6 +414,10 @@ public abstract class TmfXYChartViewer extends TmfViewer implements ITmfChartTim
         if (fMouseWheelZoomProvider != null) {
             fMouseWheelZoomProvider.dispose();
         }
+
+        if (fToolTipProvider != null) {
+            fToolTipProvider.dispose();
+        }
     }
 
     // ------------------------------------------------------------------------
This page took 0.030142 seconds and 5 git commands to generate.