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 3dccccdf5b9a7a1d20e3ab244ba52e283d8b25d4..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
@@ -137,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);
+        });
     }
 
     /**
@@ -719,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 {
@@ -798,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);
     }
 }
 
@@ -822,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);
     }
 }
 
@@ -846,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);
     }
 }
 
@@ -870,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);
     }
 }
 
@@ -895,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);
     }
 }
 
@@ -920,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);
     }
 }
 
@@ -945,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);
     }
 }
 
@@ -971,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.027354 seconds and 5 git commands to generate.