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
.trace
.ITmfTrace
;
23 import org
.eclipse
.tracecompass
.tmf
.core
.trace
.TmfTraceManager
;
24 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.TmfView
;
27 * Displays the segment store analysis data in a density chart and a table
28 * corresponding to the selected latencies.
30 * @author Matthew Khouzam
31 * @author Marc-Andre Laperle
33 public abstract class AbstractSegmentStoreDensityView
extends TmfView
{
35 private static final int[] DEFAULT_WEIGHTS
= new int[] { 4, 6 };
37 private @Nullable AbstractSegmentStoreDensityViewer fDensityViewer
;
38 private @Nullable AbstractSegmentStoreTableViewer fTableViewer
;
41 * Constructs a segment store density view
44 * the name of the view
46 public AbstractSegmentStoreDensityView(String viewName
) {
51 * Used to keep the table in sync with the density viewer.
53 private final class DataChangedListener
implements ISegmentStoreDensityViewerDataListener
{
55 public void dataChanged(List
<ISegment
> data
) {
56 updateTableModel(data
);
59 private void updateTableModel(@Nullable List
<ISegment
> data
) {
60 final AbstractSegmentStoreTableViewer viewer
= fTableViewer
;
61 if (viewer
!= null && data
!= null) {
62 viewer
.updateModel(data
.toArray(new ISegment
[] {}));
67 public void dataSelectionChanged(@Nullable List
<ISegment
> data
) {
68 updateTableModel(data
);
73 public void createPartControl(@Nullable Composite parent
) {
74 super.createPartControl(parent
);
76 final SashForm sashForm
= new SashForm(parent
, SWT
.NONE
);
78 fTableViewer
= createSegmentStoreTableViewer(sashForm
);
79 fDensityViewer
= createSegmentStoreDensityViewer(sashForm
);
80 fDensityViewer
.addDataListener(new DataChangedListener());
82 sashForm
.setWeights(DEFAULT_WEIGHTS
);
84 Action zoomOut
= new ZoomOutAction(this);
85 IToolBarManager toolBar
= getViewSite().getActionBars().getToolBarManager();
87 ITmfTrace trace
= TmfTraceManager
.getInstance().getActiveTrace();
88 if (trace
!= null && fDensityViewer
!= null) {
89 fDensityViewer
.loadTrace(trace
);
94 * Create a table viewer suitable for displaying the segment store content.
97 * the parent composite
98 * @return the table viewer
100 protected abstract AbstractSegmentStoreTableViewer
createSegmentStoreTableViewer(Composite parent
);
103 * Create a density viewer suitable for displaying the segment store
107 * the parent composite
108 * @return the density viewer
110 protected abstract AbstractSegmentStoreDensityViewer
createSegmentStoreDensityViewer(Composite parent
);
113 public void setFocus() {
114 final AbstractSegmentStoreDensityViewer viewer
= fDensityViewer
;
115 if (viewer
!= null) {
116 viewer
.getControl().setFocus();
121 public void dispose() {
122 final AbstractSegmentStoreDensityViewer densityViewer
= fDensityViewer
;
123 if (densityViewer
!= null) {
124 densityViewer
.dispose();
127 final AbstractSegmentStoreTableViewer tableViewer
= fTableViewer
;
128 if (tableViewer
!= null) {
129 tableViewer
.dispose();
135 // Package-visible on purpose for ZoomOutAction
137 AbstractSegmentStoreDensityViewer
getDensityViewer() {
138 return fDensityViewer
;