4f9d7de2319e03c6ce5c740de74822f1ed13eff6
[deliverable/tracecompass.git] / analysis / org.eclipse.tracecompass.analysis.lami.ui / src / org / eclipse / tracecompass / internal / provisional / analysis / lami / ui / views / LamiViewerControl.java
1 /*******************************************************************************
2 * Copyright (c) 2015, 2016 EfficiOS Inc., Alexandre Montplaisir
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.internal.provisional.analysis.lami.ui.views;
11
12 import org.eclipse.jdt.annotation.Nullable;
13 import org.eclipse.jface.action.Action;
14 import org.eclipse.jface.resource.ImageDescriptor;
15 import org.eclipse.swt.widgets.Composite;
16 import org.eclipse.tracecompass.internal.analysis.lami.ui.Activator;
17 import org.eclipse.tracecompass.internal.provisional.analysis.lami.ui.viewers.LamiTableViewer;
18 import org.eclipse.tracecompass.internal.provisional.tmf.chart.core.chart.ChartData;
19 import org.eclipse.tracecompass.internal.provisional.tmf.chart.core.chart.ChartModel;
20 import org.eclipse.tracecompass.internal.provisional.tmf.chart.core.chart.ChartType;
21 import org.eclipse.tracecompass.internal.provisional.tmf.chart.ui.chart.IChartViewer;
22 import org.eclipse.tracecompass.tmf.ui.viewers.TmfViewer;
23
24 /**
25 * Control for Lami viewers.
26 *
27 * Since viewers can be disposed, the "viewer control" will remain and be ready
28 * to re-instantiate the viewer if required to.
29 *
30 * @author Alexandre Montplaisir
31 */
32 public final class LamiViewerControl {
33
34 private final Action fToggleAction;
35
36 private @Nullable TmfViewer fViewer;
37
38 /**
39 * Build a new control for a Lami table viewer.
40 *
41 * @param parent
42 * The parent composite
43 * @param page
44 * The {@link LamiReportViewTabPage} page parent
45 */
46 public LamiViewerControl(Composite parent, LamiReportViewTabPage page) {
47 fToggleAction = new Action() {
48 @Override
49 public void run() {
50 TmfViewer viewer = fViewer;
51 if (viewer == null) {
52 fViewer = LamiTableViewer.createLamiTable(parent, page);
53 } else {
54 viewer.dispose();
55 fViewer = null;
56 }
57 parent.layout();
58 }
59 };
60 fToggleAction.setText(Messages.LamiReportView_ActivateTableAction_ButtonName);
61 fToggleAction.setToolTipText(Messages.LamiReportView_ActivateTableAction_ButtonTooltip);
62 fToggleAction.setImageDescriptor(Activator.getDefault().getImageDescripterFromPath("icons/table.gif")); //$NON-NLS-1$
63 }
64
65 /**
66 * Build a new control for a graph viewer.
67 *
68 * @param parent
69 * The parent composite
70 * @param data
71 * The {@link LamiReportViewTabPage} parent page
72 * @param model
73 * The graph model
74 */
75 public LamiViewerControl(Composite parent, ChartData data, ChartModel model) {
76 fToggleAction = new Action() {
77 @Override
78 public void run() {
79 TmfViewer viewer = fViewer;
80 if (viewer == null) {
81 fViewer = (TmfViewer) IChartViewer.createChart(parent, data, model);
82 } else {
83 viewer.dispose();
84 fViewer = null;
85 }
86 parent.layout();
87 }
88 };
89 fToggleAction.setText(Messages.LamiReportView_ToggleAction_ButtonNamePrefix + ' ' + model.getTitle());
90 fToggleAction.setToolTipText(Messages.LamiReportView_ToggleAction_ButtonTooltip);
91 fToggleAction.setImageDescriptor(getIconForGraphType(model.getChartType()));
92 }
93
94 /**
95 * Get the viewer of this control. Returns null if the viewer is current
96 * disposed.
97 *
98 * @return The viewer
99 */
100 public @Nullable TmfViewer getViewer() {
101 return fViewer;
102 }
103
104 /**
105 * Get the toggle action that shows/hide this control's viewer.
106 *
107 * @return The toggle action
108 */
109 public Action getToggleAction() {
110 return fToggleAction;
111 }
112
113 /**
114 * Explicitly dispose this control's viewer.
115 */
116 public void dispose() {
117 if (fViewer != null) {
118 fViewer.dispose();
119 }
120 }
121
122 private static @Nullable ImageDescriptor getIconForGraphType(ChartType chartType) {
123 switch (chartType) {
124 case BAR_CHART:
125 return Activator.getDefault().getImageDescripterFromPath("icons/histogram.gif"); //$NON-NLS-1$
126 case PIE_CHART:
127 case SCATTER_CHART:
128 default:
129 // FIXME Use other icons
130 return Activator.getDefault().getImageDescripterFromPath("icons/histogram.gif"); //$NON-NLS-1$
131 }
132 }
133
134 }
This page took 0.032981 seconds and 4 git commands to generate.