/*******************************************************************************
- * Copyright (c) 2011, 2012 Ericsson
+ * Copyright (c) 2011, 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
* Contributors:
* Francois Chouinard - Initial API and implementation
* Bernd Hufmann - Changed to updated histogram data model
- * Francois Chouinard - Initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.tmf.ui.views.histogram;
import org.eclipse.swt.widgets.Display;
/**
- * <b><u>FullTraceHistogram</u></b>
- * <p>
- * A histogram that displays the full trace.
+ * A histogram widget that displays the event distribution of a whole trace.
* <p>
* It also features a selected range window that can be dragged and zoomed.
+ *
+ * @version 1.1
+ * @author Francois Chouinard
*/
public class FullTraceHistogram extends Histogram implements MouseMoveListener {
private final HistogramZoom fZoom;
- private long fRangeStartTime;
+ private long fRangeStartTime = 0L;
private long fRangeDuration;
// ------------------------------------------------------------------------
// Construction
// ------------------------------------------------------------------------
+ /**
+ * Full Constructor
+ *
+ * @param view A reference to the parent histogram view
+ * @param parent A reference to the parent composite
+ */
public FullTraceHistogram(HistogramView view, Composite parent) {
super(view, parent);
fZoom = new HistogramZoom(this, fCanvas, getStartTime(), getTimeLimit());
// Operations
// ------------------------------------------------------------------------
+ @Override
+ public void clear() {
+ fRangeStartTime = 0L;
+ fRangeDuration = 0L;
+ if (fZoom != null) {
+ fZoom.setFullRange(0L, 0L);
+ fZoom.setNewRange(0L, 0L);
+ }
+ super.clear();
+ }
+
+ /**
+ * Sets the time range of the full histogram.
+ *
+ * @param startTime A start time
+ * @param endTime A end time
+ */
public void setFullRange(long startTime, long endTime) {
fZoom.setFullRange(startTime, endTime);
}
+ /**
+ * Sets the selected time range.
+ *
+ * @param startTime The histogram start time
+ * @param duration The histogram duration
+ */
public void setTimeRange(long startTime, long duration) {
fRangeStartTime = startTime;
fRangeDuration = duration;
fMouseDown = true;
fStartPosition = event.x;
}
-
+
@Override
public void mouseUp(MouseEvent event) {
if (fMouseDown) {
super.mouseDown(event);
return;
}
-
- ((HistogramView) fParentView).updateTimeRange(fRangeStartTime, fRangeStartTime + fZoom.getDuration());
+
+ ((HistogramView) fParentView).updateTimeRange(fRangeStartTime, fRangeStartTime + fRangeDuration);
}
}
-
-
+
+
// ------------------------------------------------------------------------
// MouseMoveListener
// ------------------------------------------------------------------------
GC rangeWindowGC = new GC(rangeRectangleImage);
if ((fScaledData != null) && (fRangeStartTime != 0)) {
- drawTimeRangeWindow(rangeWindowGC, rangeRectangleImage);
+ drawTimeRangeWindow(rangeWindowGC);
}
// Draws the buffer image onto the canvas.
rangeRectangleImage.dispose();
}
- private void drawTimeRangeWindow(GC imageGC, Image image) {
+ private void drawTimeRangeWindow(GC imageGC) {
// Map times to histogram coordinates
- long bucketSpan = Math.max(fScaledData.fBucketDuration,1);
+ long bucketSpan = Math.max(fScaledData.fBucketDuration, 1);
int rangeWidth = (int) (fRangeDuration / bucketSpan);
int left = (int) ((fRangeStartTime - fDataModel.getFirstBucketTime()) / bucketSpan);
int right = left + rangeWidth;
int center = (left + right) / 2;
- int height = fCanvas.getSize().y - 2;
+ int height = fCanvas.getSize().y;
// Draw the selection window
imageGC.setForeground(fTimeRangeColor);