timing.core: Bug 493897 show correct system call columns in density view
[deliverable/tracecompass.git] / analysis / org.eclipse.tracecompass.analysis.timing.ui / src / org / eclipse / tracecompass / analysis / timing / ui / views / segmentstore / density / AbstractSegmentStoreDensityView.java
1 /******************************************************************************
2 * Copyright (c) 2015, 2016 Ericsson
3 *
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 *******************************************************************************/
9
10 package org.eclipse.tracecompass.analysis.timing.ui.views.segmentstore.density;
11
12 import java.util.List;
13
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;
26
27 /**
28 * Displays the segment store analysis data in a density chart and a table
29 * corresponding to the selected latencies.
30 *
31 * @author Matthew Khouzam
32 * @author Marc-Andre Laperle
33 */
34 public abstract class AbstractSegmentStoreDensityView extends TmfView {
35
36 private static final int[] DEFAULT_WEIGHTS = new int[] { 4, 6 };
37
38 private @Nullable AbstractSegmentStoreDensityViewer fDensityViewer;
39 private @Nullable AbstractSegmentStoreTableViewer fTableViewer;
40
41 /**
42 * Constructs a segment store density view
43 *
44 * @param viewName
45 * the name of the view
46 */
47 public AbstractSegmentStoreDensityView(String viewName) {
48 super(viewName);
49 }
50
51 /**
52 * Used to keep the table in sync with the density viewer.
53 */
54 private final class DataChangedListener implements ISegmentStoreDensityViewerDataListener {
55 @Override
56 public void dataChanged(List<ISegment> data) {
57 updateTableModel(data);
58 }
59
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[] {}));
64 }
65 }
66
67 @Override
68 public void dataSelectionChanged(@Nullable List<ISegment> data) {
69 updateTableModel(data);
70 }
71 }
72
73 @Override
74 public void createPartControl(@Nullable Composite parent) {
75 super.createPartControl(parent);
76
77 final SashForm sashForm = new SashForm(parent, SWT.NONE);
78
79 fTableViewer = createSegmentStoreTableViewer(sashForm);
80 fDensityViewer = createSegmentStoreDensityViewer(sashForm);
81 fDensityViewer.addDataListener(new DataChangedListener());
82
83 sashForm.setWeights(DEFAULT_WEIGHTS);
84
85 Action zoomOut = new ZoomOutAction(this);
86 IToolBarManager toolBar = getViewSite().getActionBars().getToolBarManager();
87 toolBar.add(zoomOut);
88 ITmfTrace trace = TmfTraceManager.getInstance().getActiveTrace();
89 if (trace != null) {
90 TmfTraceSelectedSignal signal = new TmfTraceSelectedSignal(this, trace);
91 if (fDensityViewer != null) {
92 fDensityViewer.traceSelected(signal);
93 }
94 if (fTableViewer != null) {
95 fTableViewer.traceSelected(signal);
96 }
97 }
98 }
99
100 /**
101 * Create a table viewer suitable for displaying the segment store content.
102 *
103 * @param parent
104 * the parent composite
105 * @return the table viewer
106 */
107 protected abstract AbstractSegmentStoreTableViewer createSegmentStoreTableViewer(Composite parent);
108
109 /**
110 * Create a density viewer suitable for displaying the segment store
111 * content.
112 *
113 * @param parent
114 * the parent composite
115 * @return the density viewer
116 */
117 protected abstract AbstractSegmentStoreDensityViewer createSegmentStoreDensityViewer(Composite parent);
118
119 @Override
120 public void setFocus() {
121 final AbstractSegmentStoreDensityViewer viewer = fDensityViewer;
122 if (viewer != null) {
123 viewer.getControl().setFocus();
124 }
125 }
126
127 @Override
128 public void dispose() {
129 final AbstractSegmentStoreDensityViewer densityViewer = fDensityViewer;
130 if (densityViewer != null) {
131 densityViewer.dispose();
132 }
133
134 final AbstractSegmentStoreTableViewer tableViewer = fTableViewer;
135 if (tableViewer != null) {
136 tableViewer.dispose();
137 }
138
139 super.dispose();
140 }
141
142 // Package-visible on purpose for ZoomOutAction
143 @Nullable
144 AbstractSegmentStoreDensityViewer getDensityViewer() {
145 return fDensityViewer;
146 }
147 }
This page took 0.050614 seconds and 5 git commands to generate.