1 /******************************************************************************
2 * Copyright (c) 2015, 2016 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *******************************************************************************/
10 package org
.eclipse
.tracecompass
.analysis
.timing
.ui
.views
.segmentstore
.density
;
12 import java
.util
.List
;
14 import org
.eclipse
.jdt
.annotation
.Nullable
;
15 import org
.eclipse
.jface
.action
.Action
;
16 import org
.eclipse
.jface
.action
.IToolBarManager
;
17 import org
.eclipse
.swt
.SWT
;
18 import org
.eclipse
.swt
.custom
.SashForm
;
19 import org
.eclipse
.swt
.widgets
.Composite
;
20 import org
.eclipse
.tracecompass
.analysis
.timing
.ui
.views
.segmentstore
.table
.AbstractSegmentStoreTableViewer
;
21 import org
.eclipse
.tracecompass
.segmentstore
.core
.ISegment
;
22 import org
.eclipse
.tracecompass
.tmf
.core
.signal
.TmfTraceSelectedSignal
;
23 import org
.eclipse
.tracecompass
.tmf
.core
.trace
.ITmfTrace
;
24 import org
.eclipse
.tracecompass
.tmf
.core
.trace
.TmfTraceManager
;
25 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.TmfView
;
28 * Displays the segment store analysis data in a density chart and a table
29 * corresponding to the selected latencies.
31 * @author Matthew Khouzam
32 * @author Marc-Andre Laperle
34 public abstract class AbstractSegmentStoreDensityView
extends TmfView
{
36 private static final int[] DEFAULT_WEIGHTS
= new int[] { 4, 6 };
38 private @Nullable AbstractSegmentStoreDensityViewer fDensityViewer
;
39 private @Nullable AbstractSegmentStoreTableViewer fTableViewer
;
42 * Constructs a segment store density view
45 * the name of the view
47 public AbstractSegmentStoreDensityView(String viewName
) {
52 * Used to keep the table in sync with the density viewer.
54 private final class DataChangedListener
implements ISegmentStoreDensityViewerDataListener
{
56 public void dataChanged(List
<ISegment
> data
) {
57 updateTableModel(data
);
60 private void updateTableModel(@Nullable List
<ISegment
> data
) {
61 final AbstractSegmentStoreTableViewer viewer
= fTableViewer
;
62 if (viewer
!= null && data
!= null) {
63 viewer
.updateModel(data
.toArray(new ISegment
[] {}));
68 public void dataSelectionChanged(@Nullable List
<ISegment
> data
) {
69 updateTableModel(data
);
74 public void createPartControl(@Nullable Composite parent
) {
75 super.createPartControl(parent
);
77 final SashForm sashForm
= new SashForm(parent
, SWT
.NONE
);
79 fTableViewer
= createSegmentStoreTableViewer(sashForm
);
80 fDensityViewer
= createSegmentStoreDensityViewer(sashForm
);
81 fDensityViewer
.addDataListener(new DataChangedListener());
83 sashForm
.setWeights(DEFAULT_WEIGHTS
);
85 Action zoomOut
= new ZoomOutAction(this);
86 IToolBarManager toolBar
= getViewSite().getActionBars().getToolBarManager();
88 ITmfTrace trace
= TmfTraceManager
.getInstance().getActiveTrace();
90 TmfTraceSelectedSignal signal
= new TmfTraceSelectedSignal(this, trace
);
91 if (fDensityViewer
!= null) {
92 fDensityViewer
.traceSelected(signal
);
94 if (fTableViewer
!= null) {
95 fTableViewer
.traceSelected(signal
);
101 * Create a table viewer suitable for displaying the segment store content.
104 * the parent composite
105 * @return the table viewer
107 protected abstract AbstractSegmentStoreTableViewer
createSegmentStoreTableViewer(Composite parent
);
110 * Create a density viewer suitable for displaying the segment store
114 * the parent composite
115 * @return the density viewer
117 protected abstract AbstractSegmentStoreDensityViewer
createSegmentStoreDensityViewer(Composite parent
);
120 public void setFocus() {
121 final AbstractSegmentStoreDensityViewer viewer
= fDensityViewer
;
122 if (viewer
!= null) {
123 viewer
.getControl().setFocus();
128 public void dispose() {
129 final AbstractSegmentStoreDensityViewer densityViewer
= fDensityViewer
;
130 if (densityViewer
!= null) {
131 densityViewer
.dispose();
134 final AbstractSegmentStoreTableViewer tableViewer
= fTableViewer
;
135 if (tableViewer
!= null) {
136 tableViewer
.dispose();
142 // Package-visible on purpose for ZoomOutAction
144 AbstractSegmentStoreDensityViewer
getDensityViewer() {
145 return fDensityViewer
;