c6056bbd1b9362f918ead0b967ae7b568ed6545c
[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.NonNull;
15 import org.eclipse.jdt.annotation.Nullable;
16 import org.eclipse.jface.action.Action;
17 import org.eclipse.jface.action.IToolBarManager;
18 import org.eclipse.swt.SWT;
19 import org.eclipse.swt.custom.SashForm;
20 import org.eclipse.swt.widgets.Composite;
21 import org.eclipse.tracecompass.analysis.timing.ui.views.segmentstore.table.AbstractSegmentStoreTableViewer;
22 import org.eclipse.tracecompass.segmentstore.core.ISegment;
23 import org.eclipse.tracecompass.tmf.core.signal.TmfTraceSelectedSignal;
24 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
25 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
26 import org.eclipse.tracecompass.tmf.ui.views.TmfView;
27
28 import com.google.common.annotations.VisibleForTesting;
29
30 /**
31 * Displays the segment store analysis data in a density chart and a table
32 * corresponding to the selected latencies.
33 *
34 * @author Matthew Khouzam
35 * @author Marc-Andre Laperle
36 */
37 public abstract class AbstractSegmentStoreDensityView extends TmfView {
38
39 private static final int[] DEFAULT_WEIGHTS = new int[] { 4, 6 };
40
41 private @Nullable AbstractSegmentStoreDensityViewer fDensityViewer;
42 private @Nullable AbstractSegmentStoreTableViewer fTableViewer;
43
44 /**
45 * Constructs a segment store density view
46 *
47 * @param viewName
48 * the name of the view
49 */
50 public AbstractSegmentStoreDensityView(String viewName) {
51 super(viewName);
52 }
53
54 /**
55 * Used to keep the table in sync with the density viewer.
56 */
57 private final class DataChangedListener implements ISegmentStoreDensityViewerDataListener {
58 @Deprecated
59 @Override
60 public void dataChanged(List<ISegment> data) {
61 updateTableModel(data);
62 }
63
64 private void updateTableModel(@Nullable List<ISegment> data) {
65 final AbstractSegmentStoreTableViewer viewer = fTableViewer;
66 if (viewer != null && data != null) {
67 viewer.updateModel(data);
68 }
69 }
70
71 private void updateTableModel(@Nullable Iterable<? extends ISegment> data) {
72 final AbstractSegmentStoreTableViewer viewer = fTableViewer;
73 if (viewer != null && data != null) {
74 viewer.updateModel(data);
75 }
76 }
77
78 @Deprecated
79 @Override
80 public void dataSelectionChanged(@Nullable List<ISegment> data) {
81 updateTableModel(data);
82 }
83
84 @Override
85 public void viewDataChanged(@NonNull Iterable<? extends @NonNull ISegment> newData) {
86 updateTableModel(newData);
87 }
88
89 @Override
90 public void selectedDataChanged(@Nullable Iterable<? extends @NonNull ISegment> newSelectionData) {
91 updateTableModel(newSelectionData);
92 }
93
94 }
95
96 @Override
97 public void createPartControl(@Nullable Composite parent) {
98 super.createPartControl(parent);
99
100 final SashForm sashForm = new SashForm(parent, SWT.NONE);
101
102 fTableViewer = createSegmentStoreTableViewer(sashForm);
103 fDensityViewer = createSegmentStoreDensityViewer(sashForm);
104 fDensityViewer.addDataListener(new DataChangedListener());
105
106 sashForm.setWeights(DEFAULT_WEIGHTS);
107
108 Action zoomOut = new ZoomOutAction(this);
109 IToolBarManager toolBar = getViewSite().getActionBars().getToolBarManager();
110 toolBar.add(zoomOut);
111 ITmfTrace trace = TmfTraceManager.getInstance().getActiveTrace();
112 if (trace != null) {
113 TmfTraceSelectedSignal signal = new TmfTraceSelectedSignal(this, trace);
114 if (fDensityViewer != null) {
115 fDensityViewer.traceSelected(signal);
116 }
117 if (fTableViewer != null) {
118 fTableViewer.traceSelected(signal);
119 }
120 }
121 }
122
123 /**
124 * Create a table viewer suitable for displaying the segment store content.
125 *
126 * @param parent
127 * the parent composite
128 * @return the table viewer
129 */
130 protected abstract AbstractSegmentStoreTableViewer createSegmentStoreTableViewer(Composite parent);
131
132 /**
133 * Create a density viewer suitable for displaying the segment store
134 * content.
135 *
136 * @param parent
137 * the parent composite
138 * @return the density viewer
139 */
140 protected abstract AbstractSegmentStoreDensityViewer createSegmentStoreDensityViewer(Composite parent);
141
142 @Override
143 public void setFocus() {
144 final AbstractSegmentStoreDensityViewer viewer = fDensityViewer;
145 if (viewer != null) {
146 viewer.getControl().setFocus();
147 }
148 }
149
150 @Override
151 public void dispose() {
152 final AbstractSegmentStoreDensityViewer densityViewer = fDensityViewer;
153 if (densityViewer != null) {
154 densityViewer.dispose();
155 }
156
157 final AbstractSegmentStoreTableViewer tableViewer = fTableViewer;
158 if (tableViewer != null) {
159 tableViewer.dispose();
160 }
161
162 super.dispose();
163 }
164
165 /**
166 * Get the density viewer
167 *
168 * @return the density viewer
169 * @since 1.2
170 */
171 @VisibleForTesting
172 public @Nullable AbstractSegmentStoreDensityViewer getDensityViewer() {
173 return fDensityViewer;
174 }
175
176 /**
177 * Get the table viewer
178 *
179 * @return the table viewer
180 * @since 1.2
181 */
182 @VisibleForTesting
183 public @Nullable AbstractSegmentStoreTableViewer getTableViewer() {
184 return fTableViewer;
185 }
186 }
This page took 0.036714 seconds and 4 git commands to generate.