tmf: Bug 490400: Leaking widgets due to incorrect cleanup in dispose()
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / widgets / timegraph / widgets / TimeGraphScale.java
index 646ab1e659fd220b21bc82b8411581fe94dd20c7..bcb6c1d9572b465af8b795d8657e2ac2dfeb5a9b 100644 (file)
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2007, 2015 Intel Corporation, Ericsson
+ * Copyright (c) 2007, 2016 Intel Corporation, 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
@@ -38,7 +38,6 @@ import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
 import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
 import org.eclipse.tracecompass.tmf.core.signal.TmfTimestampFormatUpdateSignal;
 import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimePreferences;
-import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.IMarkerEvent;
 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.widgets.Utils.Resolution;
 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.widgets.Utils.TimeFormat;
 
@@ -123,8 +122,6 @@ public class TimeGraphScale extends TimeGraphBaseControl implements
     private boolean fIsInUpdate;
     private int fHeight;
     private List<Integer> fTickList = new ArrayList<>();
-    private List<IMarkerEvent> fMarkers = null;
-    private boolean fMarkersVisible = true;
 
     /**
      * Standard constructor
@@ -140,12 +137,9 @@ public class TimeGraphScale extends TimeGraphBaseControl implements
         addMouseListener(this);
         addMouseMoveListener(this);
         TimeDraw.updateTimeZone();
-    }
-
-    @Override
-    public void dispose() {
-        TmfSignalManager.deregister(this);
-        super.dispose();
+        addDisposeListener((e) -> {
+            TmfSignalManager.deregister(TimeGraphScale.this);
+        });
     }
 
     /**
@@ -216,28 +210,6 @@ public class TimeGraphScale extends TimeGraphBaseControl implements
         return fTickList;
     }
 
-    /**
-     * Set the markers list.
-     *
-     * @param markers
-     *            The markers list, or null
-     * @since 2.0
-     */
-    public void setMarkers(List<IMarkerEvent> markers) {
-        fMarkers = markers;
-    }
-
-    /**
-     * Set the markers visibility. The default is true.
-     *
-     * @param visible
-     *            true to show the markers, false otherwise
-     * @since 2.0
-     */
-    public void setMarkersVisible(boolean visible) {
-        fMarkersVisible = visible;
-    }
-
     private long calcTimeDelta(int width, double pixelsPerNanoSec) {
         long timeDelta;
         double minDelta = (pixelsPerNanoSec == 0) ? YEAR_IN_NS : width / pixelsPerNanoSec;
@@ -468,19 +440,6 @@ public class TimeGraphScale extends TimeGraphBaseControl implements
             }
         }
         fTickList = tickList;
-
-        // draw marker labels
-        if (fMarkersVisible && fMarkers != null) {
-            for (IMarkerEvent marker : fMarkers) {
-                String label = marker.getLabel();
-                if (label != null && marker.getEntry() == null) {
-                    int x = rect.x + leftSpace + (int) (Math.floor((marker.getTime() - time0) * pixelsPerNanoSec));
-                    y = rect.y + rect.height - gc.stringExtent(label).y + 1;
-                    gc.setForeground(marker.getColor());
-                    Utils.drawText(gc, label, x, y, true);
-                }
-            }
-        }
     }
 
     private static void drawRangeDecorators(Rectangle rect, GC gc, int x1, int x2) {
@@ -757,6 +716,18 @@ abstract class TimeDraw {
      */
     public void drawAbsHeader(GC gc, long nanosec, Rectangle absHeaderRect) {
     }
+
+    protected void drawAbsHeader(GC gc, long nanosec, Rectangle rect, SimpleDateFormat dateFormat) {
+        String header;
+        synchronized (dateFormat) {
+            header = dateFormat.format(new Date(nanosec / MILLISEC_IN_NS));
+        }
+        int headerwidth = gc.stringExtent(header).x + 4;
+        if (headerwidth <= rect.width) {
+            rect.x += (rect.width - headerwidth);
+            Utils.drawText(gc, header, rect, true);
+        }
+    }
 }
 
 class TimeDrawSec extends TimeDraw {
@@ -836,15 +807,7 @@ class TimeDrawAbsDay extends TimeDraw {
 
     @Override
     public void drawAbsHeader(GC gc, long nanosec, Rectangle rect) {
-        String header;
-        synchronized (DAY_FORMAT_HEADER) {
-            header = DAY_FORMAT_HEADER.format(new Date(nanosec / MILLISEC_IN_NS));
-        }
-        int headerwidth = gc.stringExtent(header).x + 4;
-        if (headerwidth <= rect.width) {
-            rect.x += (rect.width - headerwidth);
-            Utils.drawText(gc, header, rect, true);
-        }
+        drawAbsHeader(gc, nanosec, rect, DAY_FORMAT_HEADER);
     }
 }
 
@@ -860,15 +823,7 @@ class TimeDrawAbsHrs extends TimeDraw {
 
     @Override
     public void drawAbsHeader(GC gc, long nanosec, Rectangle rect) {
-        String header;
-        synchronized (HOURS_FORMAT_HEADER) {
-            header = HOURS_FORMAT_HEADER.format(new Date(nanosec / MILLISEC_IN_NS));
-        }
-        int headerwidth = gc.stringExtent(header).x + 4;
-        if (headerwidth <= rect.width) {
-            rect.x += (rect.width - headerwidth);
-            Utils.drawText(gc, header, rect, true);
-        }
+        drawAbsHeader(gc, nanosec, rect, HOURS_FORMAT_HEADER);
     }
 }
 
@@ -884,15 +839,7 @@ class TimeDrawAbsMin extends TimeDraw {
 
     @Override
     public void drawAbsHeader(GC gc, long nanosec, Rectangle rect) {
-        String header;
-        synchronized (MIN_FORMAT_HEADER) {
-            header = MIN_FORMAT_HEADER.format(new Date(nanosec / MILLISEC_IN_NS));
-        }
-        int headerwidth = gc.stringExtent(header).x + 4;
-        if (headerwidth <= rect.width) {
-            rect.x += (rect.width - headerwidth);
-            Utils.drawText(gc, header, rect, true);
-        }
+        drawAbsHeader(gc, nanosec, rect, MIN_FORMAT_HEADER);
     }
 }
 
@@ -908,15 +855,7 @@ class TimeDrawAbsSec extends TimeDraw {
 
     @Override
     public void drawAbsHeader(GC gc, long nanosec, Rectangle rect) {
-        String header;
-        synchronized (SEC_FORMAT_HEADER) {
-            header = SEC_FORMAT_HEADER.format(new Date(nanosec / MILLISEC_IN_NS));
-        }
-        int headerwidth = gc.stringExtent(header).x + 4;
-        if (headerwidth <= rect.width) {
-            rect.x += (rect.width - headerwidth);
-            Utils.drawText(gc, header, rect, true);
-        }
+        drawAbsHeader(gc, nanosec, rect, SEC_FORMAT_HEADER);
     }
 }
 
@@ -933,15 +872,7 @@ class TimeDrawAbsMillisec extends TimeDraw {
 
     @Override
     public void drawAbsHeader(GC gc, long nanosec, Rectangle rect) {
-        String header;
-        synchronized (SEC_FORMAT_HEADER) {
-            header = SEC_FORMAT_HEADER.format(new Date(nanosec / MILLISEC_IN_NS));
-        }
-        int headerwidth = gc.stringExtent(header).x + 4;
-        if (headerwidth <= rect.width) {
-            rect.x += (rect.width - headerwidth);
-            Utils.drawText(gc, header, rect, true);
-        }
+        drawAbsHeader(gc, nanosec, rect, SEC_FORMAT_HEADER);
     }
 }
 
@@ -958,15 +889,7 @@ class TimeDrawAbsMicroSec extends TimeDraw {
 
     @Override
     public void drawAbsHeader(GC gc, long nanosec, Rectangle rect) {
-        String header;
-        synchronized (SEC_FORMAT_HEADER) {
-            header = SEC_FORMAT_HEADER.format(new Date(nanosec / MILLISEC_IN_NS));
-        }
-        int headerwidth = gc.stringExtent(header).x + 4;
-        if (headerwidth <= rect.width) {
-            rect.x += (rect.width - headerwidth);
-            Utils.drawText(gc, header, rect, true);
-        }
+        drawAbsHeader(gc, nanosec, rect, SEC_FORMAT_HEADER);
     }
 }
 
@@ -983,15 +906,7 @@ class TimeDrawAbsNanoSec extends TimeDraw {
 
     @Override
     public void drawAbsHeader(GC gc, long nanosec, Rectangle rect) {
-        String header;
-        synchronized (SEC_FORMAT_HEADER) {
-            header = SEC_FORMAT_HEADER.format(new Date(nanosec / MILLISEC_IN_NS));
-        }
-        int headerwidth = gc.stringExtent(header).x + 4;
-        if (headerwidth <= rect.width) {
-            rect.x += (rect.width - headerwidth);
-            Utils.drawText(gc, header, rect, true);
-        }
+        drawAbsHeader(gc, nanosec, rect, SEC_FORMAT_HEADER);
     }
 }
 
@@ -1009,4 +924,4 @@ class TimeDrawCycles extends TimeDraw {
         String stime = Utils.formatTime(time, TimeFormat.CYCLES, Resolution.SECONDS);
         return Utils.drawText(gc, stime, rect, true);
     }
-}
+}
\ No newline at end of file
This page took 0.045936 seconds and 5 git commands to generate.