Search in sources :

Example 1 with TmfView

use of org.eclipse.tracecompass.tmf.ui.views.TmfView in project tracecompass by tracecompass.

the class TmfAlignmentSynchronizer method queueAlignment.

private void queueAlignment(TmfTimeViewAlignmentInfo timeViewAlignmentInfo, boolean synchronous) {
    if (isAlignViewsPreferenceEnabled()) {
        IWorkbenchWindow workbenchWindow = getWorkbenchWindow(timeViewAlignmentInfo.getShell());
        if (workbenchWindow == null || workbenchWindow.getActivePage() == null) {
            // Only time aligned views that are part of a workbench window are supported
            return;
        }
        // We need a view so that we can compute position right as we are
        // about to realign the views. The view could have been resized,
        // moved, etc.
        TmfView view = (TmfView) getReferenceView(timeViewAlignmentInfo, null);
        if (view == null) {
            // No valid view found for this alignment
            return;
        }
        AlignmentOperation operation = new AlignmentOperation(view, timeViewAlignmentInfo);
        if (synchronous) {
            performAlignment(operation);
        } else {
            queue(operation);
        }
    }
}
Also used : IWorkbenchWindow(org.eclipse.ui.IWorkbenchWindow) TmfView(org.eclipse.tracecompass.tmf.ui.views.TmfView)

Example 2 with TmfView

use of org.eclipse.tracecompass.tmf.ui.views.TmfView 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;
                    }
                }
            }
        }
    });
}
Also used : CLabel(org.eclipse.swt.custom.CLabel) TmfTraceOpenedSignal(org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal) TmfTimestamp(org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp) SashForm(org.eclipse.swt.custom.SashForm) TmfTraceUpdatedSignal(org.eclipse.tracecompass.tmf.core.signal.TmfTraceUpdatedSignal) IAction(org.eclipse.jface.action.IAction) IStatusLineManager(org.eclipse.jface.action.IStatusLineManager) TmfTraceClosedSignal(org.eclipse.tracecompass.tmf.core.signal.TmfTraceClosedSignal) GC(org.eclipse.swt.graphics.GC) Point(org.eclipse.swt.graphics.Point) TmfSelectionRangeUpdatedSignal(org.eclipse.tracecompass.tmf.core.signal.TmfSelectionRangeUpdatedSignal) PaintEvent(org.eclipse.swt.events.PaintEvent) TmfTraceContext(org.eclipse.tracecompass.tmf.core.trace.TmfTraceContext) Composite(org.eclipse.swt.widgets.Composite) TmfTraceRangeUpdatedSignal(org.eclipse.tracecompass.tmf.core.signal.TmfTraceRangeUpdatedSignal) TmfTraceManager(org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager) TmfTraceSelectedSignal(org.eclipse.tracecompass.tmf.core.signal.TmfTraceSelectedSignal) Separator(org.eclipse.jface.action.Separator) TmfSignalHandler(org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler) ITmfTrace(org.eclipse.tracecompass.tmf.core.trace.ITmfTrace) MouseWheelListener(org.eclipse.swt.events.MouseWheelListener) Collection(java.util.Collection) Sash(org.eclipse.swt.widgets.Sash) Display(org.eclipse.swt.widgets.Display) Objects(java.util.Objects) MouseEvent(org.eclipse.swt.events.MouseEvent) ITmfTimestamp(org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp) TmfTimeViewAlignmentInfo(org.eclipse.tracecompass.tmf.ui.signal.TmfTimeViewAlignmentInfo) SWT(org.eclipse.swt.SWT) TmfTimeRange(org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange) ExecutionType(org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest.ExecutionType) TmfSignalManager(org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager) NonNull(org.eclipse.jdt.annotation.NonNull) MouseAdapter(org.eclipse.swt.events.MouseAdapter) Label(org.eclipse.swt.widgets.Label) ITmfTimeAligned(org.eclipse.tracecompass.tmf.ui.views.ITmfTimeAligned) PaintListener(org.eclipse.swt.events.PaintListener) ITmfEventRequest(org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest) Image(org.eclipse.swt.graphics.Image) Rectangle(org.eclipse.swt.graphics.Rectangle) TmfUiSignalThrottler(org.eclipse.tracecompass.tmf.ui.signal.TmfUiSignalThrottler) ITmfImageConstants(org.eclipse.tracecompass.internal.tmf.ui.ITmfImageConstants) TmfTimeViewAlignmentSignal(org.eclipse.tracecompass.tmf.ui.signal.TmfTimeViewAlignmentSignal) TmfView(org.eclipse.tracecompass.tmf.ui.views.TmfView) Listener(org.eclipse.swt.widgets.Listener) GridData(org.eclipse.swt.layout.GridData) Action(org.eclipse.jface.action.Action) IActionBars(org.eclipse.ui.IActionBars) Activator(org.eclipse.tracecompass.internal.tmf.ui.Activator) RowLayout(org.eclipse.swt.layout.RowLayout) ScrolledComposite(org.eclipse.swt.custom.ScrolledComposite) TmfWindowRangeUpdatedSignal(org.eclipse.tracecompass.tmf.core.signal.TmfWindowRangeUpdatedSignal) Control(org.eclipse.swt.widgets.Control) GridLayout(org.eclipse.swt.layout.GridLayout) CLabel(org.eclipse.swt.custom.CLabel) Label(org.eclipse.swt.widgets.Label) MouseWheelListener(org.eclipse.swt.events.MouseWheelListener) GridLayout(org.eclipse.swt.layout.GridLayout) Control(org.eclipse.swt.widgets.Control) RowLayout(org.eclipse.swt.layout.RowLayout) TmfTraceSelectedSignal(org.eclipse.tracecompass.tmf.core.signal.TmfTraceSelectedSignal) PaintEvent(org.eclipse.swt.events.PaintEvent) Composite(org.eclipse.swt.widgets.Composite) ScrolledComposite(org.eclipse.swt.custom.ScrolledComposite) Sash(org.eclipse.swt.widgets.Sash) IStatusLineManager(org.eclipse.jface.action.IStatusLineManager) PaintListener(org.eclipse.swt.events.PaintListener) Point(org.eclipse.swt.graphics.Point) Point(org.eclipse.swt.graphics.Point) SashForm(org.eclipse.swt.custom.SashForm) ITmfTrace(org.eclipse.tracecompass.tmf.core.trace.ITmfTrace) GridData(org.eclipse.swt.layout.GridData) TmfTimeViewAlignmentSignal(org.eclipse.tracecompass.tmf.ui.signal.TmfTimeViewAlignmentSignal)

Example 3 with TmfView

use of org.eclipse.tracecompass.tmf.ui.views.TmfView in project tracecompass by tracecompass.

the class TmfAlignmentSynchronizer method performAlignment.

private static void performAlignment(AlignmentOperation info) {
    TmfView referenceView = info.fView;
    if (isDisposedView(referenceView)) {
        return;
    }
    TmfTimeViewAlignmentInfo alignmentInfo = info.fAlignmentInfo;
    // The location of the view might have changed (resize, etc). Update the alignment info.
    alignmentInfo = new TmfTimeViewAlignmentInfo(alignmentInfo.getShell(), getViewLocation(referenceView), getClampedTimeAxisOffset(alignmentInfo));
    TmfView narrowestView = getNarrowestView(alignmentInfo);
    if (narrowestView == null) {
        // No valid view found for this alignment. This could mean that the views for this alignment are now too narrow (width == 0) or that shell is not a workbench window.
        return;
    }
    int narrowestWidth = ((ITmfTimeAligned) narrowestView).getAvailableWidth(getClampedTimeAxisOffset(alignmentInfo));
    narrowestWidth = getClampedTimeAxisWidth(alignmentInfo, narrowestWidth);
    IViewReference[] viewReferences = referenceView.getSite().getPage().getViewReferences();
    for (IViewReference ref : viewReferences) {
        IViewPart view = ref.getView(false);
        if (isTimeAlignedView(view)) {
            TmfView tmfView = (TmfView) view;
            ITmfTimeAligned alignedView = (ITmfTimeAligned) view;
            if (!isDisposedView(tmfView) && isViewLocationNear(getViewLocation(tmfView), alignmentInfo.getViewLocation())) {
                alignedView.performAlign(getClampedTimeAxisOffset(alignmentInfo), narrowestWidth);
            }
        }
    }
}
Also used : IViewPart(org.eclipse.ui.IViewPart) TmfView(org.eclipse.tracecompass.tmf.ui.views.TmfView) ITmfTimeAligned(org.eclipse.tracecompass.tmf.ui.views.ITmfTimeAligned) IViewReference(org.eclipse.ui.IViewReference) TmfTimeViewAlignmentInfo(org.eclipse.tracecompass.tmf.ui.signal.TmfTimeViewAlignmentInfo) Point(org.eclipse.swt.graphics.Point)

Example 4 with TmfView

use of org.eclipse.tracecompass.tmf.ui.views.TmfView in project tracecompass by tracecompass.

the class TmfAlignmentSynchronizer method getNarrowestView.

/**
 * Get the narrowest view that corresponds to the given alignment information.
 */
private static TmfView getNarrowestView(TmfTimeViewAlignmentInfo alignmentInfo) {
    IWorkbenchWindow workbenchWindow = getWorkbenchWindow(alignmentInfo.getShell());
    if (workbenchWindow == null || workbenchWindow.getActivePage() == null) {
        // Only time aligned views that are part of a workbench window are supported
        return null;
    }
    IWorkbenchPage page = workbenchWindow.getActivePage();
    int narrowestWidth = Integer.MAX_VALUE;
    TmfView narrowestView = null;
    for (IViewReference ref : page.getViewReferences()) {
        IViewPart view = ref.getView(false);
        if (isTimeAlignedView(view)) {
            TmfView tmfView = (TmfView) view;
            if (isCandidateForNarrowestView(tmfView, alignmentInfo, narrowestWidth)) {
                narrowestWidth = ((ITmfTimeAligned) tmfView).getAvailableWidth(getClampedTimeAxisOffset(alignmentInfo));
                narrowestWidth = getClampedTimeAxisWidth(alignmentInfo, narrowestWidth);
                narrowestView = tmfView;
            }
        }
    }
    return narrowestView;
}
Also used : IWorkbenchWindow(org.eclipse.ui.IWorkbenchWindow) IViewPart(org.eclipse.ui.IViewPart) TmfView(org.eclipse.tracecompass.tmf.ui.views.TmfView) IViewReference(org.eclipse.ui.IViewReference) IWorkbenchPage(org.eclipse.ui.IWorkbenchPage) Point(org.eclipse.swt.graphics.Point)

Aggregations

TmfView (org.eclipse.tracecompass.tmf.ui.views.TmfView)4 Point (org.eclipse.swt.graphics.Point)3 IViewPart (org.eclipse.ui.IViewPart)2 IViewReference (org.eclipse.ui.IViewReference)2 Collection (java.util.Collection)1 Objects (java.util.Objects)1 NonNull (org.eclipse.jdt.annotation.NonNull)1 Action (org.eclipse.jface.action.Action)1 IAction (org.eclipse.jface.action.IAction)1 IStatusLineManager (org.eclipse.jface.action.IStatusLineManager)1 Separator (org.eclipse.jface.action.Separator)1 SWT (org.eclipse.swt.SWT)1 CLabel (org.eclipse.swt.custom.CLabel)1 SashForm (org.eclipse.swt.custom.SashForm)1 ScrolledComposite (org.eclipse.swt.custom.ScrolledComposite)1 MouseAdapter (org.eclipse.swt.events.MouseAdapter)1 MouseEvent (org.eclipse.swt.events.MouseEvent)1 MouseWheelListener (org.eclipse.swt.events.MouseWheelListener)1 PaintEvent (org.eclipse.swt.events.PaintEvent)1 PaintListener (org.eclipse.swt.events.PaintListener)1