use of org.eclipse.tracecompass.tmf.ui.signal.TmfTimeViewAlignmentSignal in project tracecompass by tracecompass.
the class HistogramView method createPartControl.
// ------------------------------------------------------------------------
// TmfView
// ------------------------------------------------------------------------
@Override
public void createPartControl(Composite parent) {
super.createPartControl(parent);
// Control labels
final String selectionStartLabel = Messages.HistogramView_selectionStartLabel;
final String selectionEndLabel = Messages.HistogramView_selectionEndLabel;
final String windowSpanLabel = Messages.HistogramView_windowSpanLabel;
// --------------------------------------------------------------------
// Set the HistogramView layout
// --------------------------------------------------------------------
Composite viewComposite = new Composite(getParentComposite(), SWT.FILL);
GridLayout gridLayout = new GridLayout(1, false);
gridLayout.verticalSpacing = 0;
gridLayout.marginHeight = 0;
gridLayout.marginWidth = 0;
viewComposite.setLayout(gridLayout);
// --------------------------------------------------------------------
// Add a sash for time controls and time range histogram
// --------------------------------------------------------------------
/*
* The ScrolledComposite preferred size can be larger than its visible
* width. This affects the preferred width of the SashForm. Set the
* preferred width to 1 to prevent it from affecting the preferred width
* of the view composite.
*/
fSashForm = new SashForm(viewComposite, SWT.NONE) {
@Override
public Point computeSize(int wHint, int hHint) {
Point computedSize = super.computeSize(wHint, hHint);
if (wHint == SWT.DEFAULT) {
return new Point(1, computedSize.y);
}
return computedSize;
}
@Override
public Point computeSize(int wHint, int hHint, boolean changed) {
Point computedSize = super.computeSize(wHint, hHint, changed);
if (wHint == SWT.DEFAULT) {
return new Point(1, computedSize.y);
}
return computedSize;
}
};
GridData gridData = new GridData(GridData.FILL, GridData.FILL, false, true);
fSashForm.setLayoutData(gridData);
// --------------------------------------------------------------------
// Time controls
// --------------------------------------------------------------------
fScrollComposite = new PackedScrolledComposite(fSashForm, SWT.H_SCROLL | SWT.V_SCROLL);
fTimeControlsComposite = new Composite(fScrollComposite, SWT.NONE);
fScrollComposite.setContent(fTimeControlsComposite);
gridLayout = new GridLayout(1, false);
gridLayout.marginHeight = 0;
gridLayout.marginWidth = 0;
fScrollComposite.setLayout(gridLayout);
fScrollComposite.setExpandHorizontal(true);
fScrollComposite.setExpandVertical(true);
gridLayout = new GridLayout(1, false);
gridLayout.marginHeight = 0;
gridLayout.marginWidth = 0;
fTimeControlsComposite.setLayout(gridLayout);
gridData = new GridData(GridData.FILL, GridData.CENTER, false, true);
fTimeControlsComposite.setLayoutData(gridData);
Composite innerComp = new Composite(fTimeControlsComposite, SWT.NONE);
gridLayout = new GridLayout(2, false);
innerComp.setLayout(gridLayout);
gridLayout.marginHeight = 0;
gridLayout.marginWidth = 0;
gridLayout.horizontalSpacing = 5;
gridLayout.verticalSpacing = 1;
gridData = new GridData(GridData.FILL, GridData.CENTER, false, true);
innerComp.setLayoutData(gridData);
Composite selectionGroup = new Composite(innerComp, SWT.BORDER);
gridLayout = new GridLayout(1, false);
gridLayout.marginHeight = 0;
gridLayout.marginWidth = 0;
selectionGroup.setLayout(gridLayout);
gridData = new GridData(GridData.BEGINNING, GridData.CENTER, false, false);
selectionGroup.setLayoutData(gridData);
// Selection start control
gridData = new GridData(GridData.FILL, GridData.CENTER, false, false);
fSelectionStartControl = new HistogramSelectionStartControl(this, selectionGroup, selectionStartLabel, 0L);
fSelectionStartControl.setLayoutData(gridData);
fSelectionStartControl.setValue(Long.MIN_VALUE);
// Selection end control
gridData = new GridData(GridData.FILL, GridData.CENTER, false, false);
fSelectionEndControl = new HistogramSelectionEndControl(this, selectionGroup, selectionEndLabel, 0L);
fSelectionEndControl.setLayoutData(gridData);
fSelectionEndControl.setValue(Long.MIN_VALUE);
// Link button
gridData = new GridData(GridData.BEGINNING, GridData.CENTER, false, false);
fLinkButton = new Label(innerComp, SWT.NONE);
fLinkButton.setImage(LINK_IMG);
fLinkButton.setLayoutData(gridData);
addLinkButtonListeners();
// Window span time control
gridData = new GridData(GridData.FILL, GridData.CENTER, false, false);
fTimeSpanControl = new HistogramTimeRangeControl(this, innerComp, windowSpanLabel, 0L);
fTimeSpanControl.setLayoutData(gridData);
fTimeSpanControl.setValue(Long.MIN_VALUE);
IStatusLineManager statusLineManager = getViewSite().getActionBars().getStatusLineManager();
// --------------------------------------------------------------------
// Time range histogram
// --------------------------------------------------------------------
fTimeRangeComposite = new Composite(fSashForm, SWT.NONE);
gridLayout = new GridLayout(1, true);
gridLayout.marginTop = 0;
gridLayout.marginWidth = 0;
fTimeRangeComposite.setLayout(gridLayout);
// Use remaining horizontal space
gridData = new GridData(GridData.FILL, GridData.FILL, true, true);
fTimeRangeComposite.setLayoutData(gridData);
// Histogram
fTimeRangeHistogram = new TimeRangeHistogram(this, fTimeRangeComposite, true);
fTimeRangeHistogram.setStatusLineManager(statusLineManager);
// --------------------------------------------------------------------
// Full range histogram
// --------------------------------------------------------------------
final Composite fullRangeComposite = new Composite(viewComposite, SWT.FILL);
gridLayout = new GridLayout(1, true);
fullRangeComposite.setLayout(gridLayout);
// Use remaining horizontal space
gridData = new GridData(GridData.FILL, GridData.FILL, true, true, 2, 1);
fullRangeComposite.setLayoutData(gridData);
// Histogram
fFullTraceHistogram = new FullTraceHistogram(this, fullRangeComposite);
fFullTraceHistogram.setStatusLineManager(statusLineManager);
fLegendArea = new Composite(viewComposite, SWT.FILL);
fLegendArea.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false, 2, 1));
fLegendArea.setLayout(new RowLayout());
// Add mouse wheel listener to time span control
MouseWheelListener listener = fFullTraceHistogram.getZoom();
fTimeSpanControl.addMouseWheelListener(listener);
// View Action Handling
contributeToActionBars();
ITmfTrace trace = TmfTraceManager.getInstance().getActiveTrace();
if (trace != null) {
traceSelected(new TmfTraceSelectedSignal(this, trace));
}
fSashForm.setVisible(true);
fSashForm.setWeights(DEFAULT_WEIGHTS);
fTimeControlsComposite.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
// drag listener here
if (fSashDragListener == null) {
for (Control control : fSashForm.getChildren()) {
if (control instanceof Sash) {
fSashDragListener = event -> TmfSignalManager.dispatchSignal(new TmfTimeViewAlignmentSignal(fSashForm, getTimeViewAlignmentInfo()));
control.removePaintListener(this);
control.addListener(SWT.Selection, fSashDragListener);
// There should be only one sash
break;
}
}
}
}
});
}
use of org.eclipse.tracecompass.tmf.ui.signal.TmfTimeViewAlignmentSignal in project tracecompass by tracecompass.
the class TimeGraphControl method mouseDoubleClick.
@Override
public void mouseDoubleClick(MouseEvent e) {
if (null == fTimeProvider) {
return;
}
if (1 == e.button && (e.stateMask & SWT.BUTTON_MASK) == 0) {
if (isOverSplitLine(e.x) && fTimeProvider.getNameSpace() != 0) {
fTimeProvider.setNameSpace(fIdealNameSpace);
boolean mouseOverSplitLine = isOverSplitLine(e.x);
if (fMouseOverSplitLine != mouseOverSplitLine) {
redraw();
}
fMouseOverSplitLine = mouseOverSplitLine;
TmfSignalManager.dispatchSignal(new TmfTimeViewAlignmentSignal(this, getTimeViewAlignmentInfo()));
return;
}
int idx = getItemIndexAtY(e.y);
if (idx >= 0) {
selectItem(idx, false);
fireDefaultSelection();
}
}
}
use of org.eclipse.tracecompass.tmf.ui.signal.TmfTimeViewAlignmentSignal in project tracecompass by tracecompass.
the class TimeGraphControl method mouseMove.
@Override
public void mouseMove(MouseEvent e) {
if (null == fTimeProvider) {
return;
}
Point size = getSize();
if (DRAG_TRACE_ITEM == fDragState) {
int nameWidth = fTimeProvider.getNameSpace();
if (e.x > nameWidth && size.x > nameWidth && fDragX != e.x) {
fDragX = e.x;
long timeDelta = getTimeAtX(fDragX) - getTimeAtX(fDragX0);
long time1 = fTime1bak - timeDelta;
long maxTime = fTimeProvider.getMaxTime();
if (time1 > maxTime) {
time1 = maxTime;
}
long time0 = time1 - (fTime1bak - fTime0bak);
if (time0 < fTimeProvider.getMinTime()) {
time0 = fTimeProvider.getMinTime();
time1 = time0 + (fTime1bak - fTime0bak);
}
fTimeProvider.setStartFinishTimeNotify(time0, time1);
setElementPosition(fDragEntry, e.y);
}
} else if (DRAG_SPLIT_LINE == fDragState) {
fDragX = e.x;
fTimeProvider.setNameSpace(e.x);
TmfSignalManager.dispatchSignal(new TmfTimeViewAlignmentSignal(this, getTimeViewAlignmentInfo()));
} else if (DRAG_SELECTION == fDragState) {
if (fDragBeginMarker) {
fDragX0 = Math.min(Math.max(e.x, fTimeProvider.getNameSpace()), size.x - RIGHT_MARGIN);
} else {
fDragX = Math.min(Math.max(e.x, fTimeProvider.getNameSpace()), size.x - RIGHT_MARGIN);
}
redraw();
fTimeGraphScale.setDragRange(fDragX0, fDragX);
fireDragSelectionChanged(getTimeAtX(fDragX0), getTimeAtX(fDragX));
} else if (DRAG_ZOOM == fDragState) {
fDragX = Math.min(Math.max(e.x, fTimeProvider.getNameSpace()), size.x - RIGHT_MARGIN);
redraw();
fTimeGraphScale.setDragRange(fDragX0, fDragX);
} else if (DRAG_NONE == fDragState) {
boolean mouseOverSplitLine = isOverSplitLine(e.x);
if (fMouseOverSplitLine != mouseOverSplitLine) {
redraw();
}
fMouseOverSplitLine = mouseOverSplitLine;
}
if (e.x >= fTimeProvider.getNameSpace()) {
fHasNamespaceFocus = false;
} else {
fHasNamespaceFocus = true;
}
updateCursor(e.x, e.stateMask);
updateStatusLine(e.x);
}
use of org.eclipse.tracecompass.tmf.ui.signal.TmfTimeViewAlignmentSignal in project tracecompass by tracecompass.
the class Histogram method modelUpdated.
/**
* Refresh the histogram display
*/
@Override
public void modelUpdated() {
if (!fCanvas.isDisposed() && fCanvas.getDisplay() != null) {
fCanvas.getDisplay().asyncExec(() -> {
if (!fCanvas.isDisposed()) {
// Retrieve and normalize the data
final int canvasWidth = fCanvas.getBounds().width;
final int canvasHeight = fCanvas.getBounds().height;
if (canvasWidth <= 0 || canvasHeight <= 0) {
return;
}
fDataModel.setSelection(fSelectionBegin, fSelectionEnd);
fScaledData = fDataModel.scaleTo(canvasWidth, canvasHeight, 1);
synchronized (fDataModel) {
if (fScaledData != null) {
fCanvas.redraw();
HistogramTimeAdapter adapter = (HistogramTimeAdapter) fTimeLineScale.getTimeProvider();
adapter.setTimeSpace(canvasWidth);
// Display histogram and update X-,Y-axis labels
long maxNbEvents = HistogramScaledData.hideLostEvents ? fScaledData.fMaxValue : fScaledData.fMaxCombinedValue;
String old = fMaxNbEventsLabel.getText();
fMaxNbEventsLabel.setText(Long.toString(maxNbEvents));
// The Y-axis area might need to be re-sized
GridData gd = (GridData) fMaxNbEventsLabel.getLayoutData();
gd.widthHint = Math.max(gd.widthHint, fMaxNbEventsLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT).x);
fMaxNbEventsLabel.getParent().layout();
if (old.length() < fMaxNbEventsLabel.getText().length()) {
if ((fSendTimeAlignSignals) && (fParentView instanceof ITmfTimeAligned)) {
TmfSignalManager.dispatchSignal(new TmfTimeViewAlignmentSignal(this, ((ITmfTimeAligned) fParentView).getTimeViewAlignmentInfo(), true));
}
}
}
fTimeLineScale.redraw();
}
}
});
}
}
use of org.eclipse.tracecompass.tmf.ui.signal.TmfTimeViewAlignmentSignal in project tracecompass by tracecompass.
the class TmfChartView method createPartControl.
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
@Override
public void createPartControl(Composite parent) {
super.createPartControl(parent);
IMenuManager menuManager = getViewSite().getActionBars().getMenuManager();
fClampAction = createClampAction();
menuManager.add(new Separator());
menuManager.add(fClampAction);
fSashForm = new SashForm(parent, SWT.NONE);
fTmfViewer = createLeftChildViewer(fSashForm);
fXYViewerContainer = new Composite(fSashForm, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
fXYViewerContainer.setLayout(layout);
fChartViewer = createChartViewer(fXYViewerContainer);
fChartViewer.setSendTimeAlignSignals(true);
fChartViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
fChartViewer.getSwtChart().addMouseListener(new MouseAdapter() {
@Override
public void mouseDoubleClick(MouseEvent e) {
super.mouseDoubleClick(e);
resetStartFinishTime();
}
});
fChartViewer.getControl().addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
// drag listener here
if (fSashDragListener == null) {
for (Control control : fSashForm.getChildren()) {
if (control instanceof Sash) {
fSashDragListener = event -> TmfSignalManager.dispatchSignal(new TmfTimeViewAlignmentSignal(fSashForm, getTimeViewAlignmentInfo()));
control.removePaintListener(this);
control.addListener(SWT.Selection, fSashDragListener);
// There should be only one sash
break;
}
}
}
}
});
fSashForm.setWeights(DEFAULT_WEIGHTS);
fZoomInAction = getZoomInAction();
fZoomOutAction = getZoomOutAction();
IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
toolBarManager.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, fResetScaleAction);
toolBarManager.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, fZoomInAction);
toolBarManager.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, fZoomOutAction);
ITmfTrace trace = TmfTraceManager.getInstance().getActiveTrace();
if (trace != null) {
loadTrace();
}
IStatusLineManager statusLineManager = getViewSite().getActionBars().getStatusLineManager();
fChartViewer.setStatusLineManager(statusLineManager);
fOriginalTabLabel = getPartName();
coupleSelectViewer();
IWorkbenchPartSite site = getSite();
fContextService = site.getWorkbenchWindow().getService(IContextService.class);
TmfXYChartViewer chartViewer = getChartViewer();
if (chartViewer != null) {
chartViewer.getControl().addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
deactivateContextService();
}
@Override
public void focusGained(FocusEvent e) {
activateContextService();
}
});
}
}
Aggregations