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