package org.eclipse.linuxtools.tmf.ui.views.histogram;
-import org.eclipse.linuxtools.tmf.core.event.ITmfTimestamp;
-import org.eclipse.linuxtools.tmf.core.event.TmfTimestamp;
-import org.eclipse.linuxtools.tmf.core.event.TmfTimestampFormat;
import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;
import org.eclipse.linuxtools.tmf.core.signal.TmfSignalManager;
import org.eclipse.linuxtools.tmf.core.signal.TmfTimestampFormatUpdateSignal;
+import org.eclipse.linuxtools.tmf.core.timestamp.ITmfTimestamp;
+import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimestamp;
+import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimestampFormat;
import org.eclipse.linuxtools.tmf.ui.views.TmfView;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
*/
protected TmfView fParentView;
- private Composite fParent;
+ private Composite fComposite;
private Font fFont;
// Histogram text fields
*/
public Histogram(final TmfView view, final Composite parent) {
fParentView = view;
- fParent = parent;
- createWidget(parent);
+ fComposite = createWidget(parent);
fDataModel = new HistogramDataModel();
fDataModel.addHistogramListener(this);
clear();
fDataModel.removeHistogramListener(this);
}
- private void createWidget(final Composite parent) {
+ private Composite createWidget(final Composite parent) {
final Color labelColor = parent.getBackground();
fFont = adjustFont(parent);
fTimeRangeStartText = new Text(composite, SWT.READ_ONLY);
fTimeRangeStartText.setFont(fFont);
fTimeRangeStartText.setBackground(labelColor);
- fTimeRangeStartText.setText(TmfTimestamp.ZERO.toString());
fTimeRangeStartText.setLayoutData(gridData);
// Window range end time
fTimeRangeEndText = new Text(composite, SWT.READ_ONLY);
fTimeRangeEndText.setFont(fFont);
fTimeRangeEndText.setBackground(labelColor);
- fTimeRangeEndText.setText(TmfTimestamp.ZERO.toString());
fTimeRangeEndText.setLayoutData(gridData);
+
+ return composite;
}
private static Font adjustFont(final Composite composite) {
*/
public void clear() {
fDataModel.clear();
- fScaledData = null;
+ synchronized (fDataModel) {
+ fScaledData = null;
+ }
}
/**
}
fDataModel.setCurrentEvent(fCurrentEventTime);
fScaledData = fDataModel.scaleTo(canvasWidth, canvasHeight, 1);
- synchronized(fScaledData) {
+ synchronized(fDataModel) {
if (fScaledData != null) {
fCanvas.redraw();
- // Display histogram and update X-,Y-axis labels
- fTimeRangeStartText.setText(TmfTimestampFormat.getDefaulTimeFormat().format(fDataModel.getFirstBucketTime()));
- fTimeRangeEndText.setText(TmfTimestampFormat.getDefaulTimeFormat().format(fDataModel.getEndTime()));
+ if (fDataModel.getNbEvents() != 0) {
+ // Display histogram and update X-,Y-axis labels
+ fTimeRangeStartText.setText(TmfTimestampFormat.getDefaulTimeFormat().format(fDataModel.getFirstBucketTime()));
+ fTimeRangeEndText.setText(TmfTimestampFormat.getDefaulTimeFormat().format(fDataModel.getEndTime()));
+ } else {
+ fTimeRangeStartText.setText(""); //$NON-NLS-1$
+ fTimeRangeEndText.setText(""); //$NON-NLS-1$
+ }
fMaxNbEventsText.setText(Long.toString(fScaledData.fMaxValue));
// The Y-axis area might need to be re-sized
fMaxNbEventsText.getParent().layout();
*/
@TmfSignalHandler
public void timestampFormatUpdated(TmfTimestampFormatUpdateSignal signal) {
- Point size = fTimeRangeStartText.getSize();
+ if (fDataModel.getNbEvents() == 0) {
+ return;
+ }
+
String newTS = TmfTimestampFormat.getDefaulTimeFormat().format(fDataModel.getFirstBucketTime());
- size.x = getTextSize(newTS);
- fTimeRangeStartText.setSize(size);
fTimeRangeStartText.setText(newTS);
newTS = TmfTimestampFormat.getDefaulTimeFormat().format(fDataModel.getEndTime());
- Rectangle rect = fTimeRangeEndText.getBounds();
- int newWidth = getTextSize(newTS);
- rect.x += rect.width - newWidth;
- rect.width = newWidth;
- fTimeRangeEndText.setBounds(rect);
fTimeRangeEndText.setText(newTS);
- }
-
- /**
- * Compute the width of a String.
- *
- * @param text the Text to measure
- * @return The result size
- * @since 2.0
- */
- private int getTextSize(final String text) {
- GC controlGC = new GC(fParent);
- controlGC.setFont(fFont);
-
- int textSize = 0;
- for (int pos = 0; pos < text.length(); pos++) {
- textSize += controlGC.getAdvanceWidth(text.charAt(pos));
- }
- // Add an extra space
- textSize += controlGC.getAdvanceWidth(' ');
-
- controlGC.dispose();
- return textSize;
+ fComposite.layout();
}
}