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