2010-11-09 Francois Chouinard <fchouinard@gmail.com> Contribution for Bug315307
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / viewers / timeAnalysis / dialogs / TmfTimeFilterDialog.java
1 /*****************************************************************************
2 * Copyright (c) 2008 Intel Corporation.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 * Intel Corporation - Initial API and implementation
10 *
11 * $Id: ThreadFilterDialog.java,v 1.2 2008/03/05 17:31:07 ewchan Exp $
12 *****************************************************************************/
13
14 package org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.dialogs;
15
16 import org.eclipse.jface.dialogs.TitleAreaDialog;
17 import org.eclipse.jface.viewers.CheckStateChangedEvent;
18 import org.eclipse.jface.viewers.CheckboxTableViewer;
19 import org.eclipse.jface.viewers.ICheckStateListener;
20 import org.eclipse.jface.viewers.IStructuredContentProvider;
21 import org.eclipse.jface.viewers.ITableLabelProvider;
22 import org.eclipse.jface.viewers.LabelProvider;
23 import org.eclipse.jface.viewers.Viewer;
24 import org.eclipse.jface.viewers.ViewerComparator;
25 import org.eclipse.jface.window.Window;
26 import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.Messages;
27 import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.model.ITmfTimeAnalysisEntry;
28 import org.eclipse.swt.SWT;
29 import org.eclipse.swt.graphics.Image;
30 import org.eclipse.swt.layout.GridData;
31 import org.eclipse.swt.widgets.Composite;
32 import org.eclipse.swt.widgets.Control;
33 import org.eclipse.swt.widgets.Shell;
34 import org.eclipse.swt.widgets.Table;
35 import org.eclipse.swt.widgets.TableColumn;
36
37 public class TmfTimeFilterDialog extends TitleAreaDialog {
38 private CheckboxTableViewer viewer;
39 private Object[] threads;
40 private boolean[] filter;
41 private ViewContentProvider viewContentProvider;
42 private TraceComparator viewTraceComparator;
43 private ViewLabelProvider viewViewLabelProvider;
44
45 public TmfTimeFilterDialog(Shell parentShell, Object[] threads,
46 boolean[] filter) {
47 super(parentShell);
48
49 this.threads = threads;
50 if (filter != null)
51 this.filter = (boolean[]) filter.clone();
52
53 viewContentProvider = new ViewContentProvider();
54 viewTraceComparator = new TraceComparator();
55 viewViewLabelProvider = new ViewLabelProvider();
56 }
57
58 public static boolean getTraceFilter(Shell parentShell, Object[] threads,
59 boolean[] filter) {
60 TmfTimeFilterDialog dlg = new TmfTimeFilterDialog(parentShell, threads,
61 filter);
62 if (dlg.open() != Window.OK)
63 return false;
64
65 boolean f[] = dlg.getFilter();
66 if (java.util.Arrays.equals(f, filter))
67 return false;
68 for (int i = f.length - 1; i >= 0; i--)
69 filter[i] = f[i];
70
71 return true;
72 }
73
74 @Override
75 protected Control createDialogArea(Composite parent) {
76 Composite composite = (Composite) super.createDialogArea(parent);
77
78 viewer = CheckboxTableViewer.newCheckList(composite, SWT.BORDER
79 | SWT.V_SCROLL);
80
81 Table table = viewer.getTable();
82 table.setLayoutData(new GridData(GridData.FILL_BOTH));
83 table.setBackground(parent.getBackground());
84 createColumns(table);
85
86 //Assign providers to the viewer.
87 viewer.setContentProvider(viewContentProvider);
88 viewer.setComparator(viewTraceComparator);
89 viewer.setLabelProvider(viewViewLabelProvider);
90
91 viewer.setInput(new Object());
92
93 viewer.addCheckStateListener(new ICheckStateListener() {
94 @Override
95 public void checkStateChanged(CheckStateChangedEvent event) {
96 Object o = event.getElement();
97 for (int i = threads.length - 1; i >= 0; i--) {
98 if (threads[i].equals(o))
99 filter[i] = event.getChecked();
100 }
101 }
102 });
103
104 if (filter != null) {
105 for (int i = 0; i < filter.length; i++)
106 viewer.setChecked(threads[i], filter[i]);
107 }
108
109 setMessage(Messages._TRACE_FILTER_DESC);
110 setTitle(Messages._TRACE_FILTER);
111 setDialogHelpAvailable(false);
112 setHelpAvailable(false);
113
114 // setTitleImage(org.eclipse.hyades.trace.internal.ui.PDPluginImages.DESC_IMG_UI_WZ_EDITPROFSET
115 // .createImage());
116
117 return composite;
118 }
119
120 private void createColumns(Table table) {
121 table.setHeaderVisible(true);
122
123 String headers[] = { "", Messages._TRACE_ID, Messages._TRACE_NAME }; //$NON-NLS-1$
124 int width[] = { 20, 80, 400 };
125
126 for (int i = 0; i < headers.length; i++) {
127 TableColumn tc = new TableColumn(table, SWT.NONE, i);
128 tc.setResizable(true);
129 tc.setText(headers[i]);
130 tc.setWidth(width[i]);
131 }
132 }
133
134 @Override
135 protected void configureShell(Shell shell) {
136 super.configureShell(shell);
137 shell.setText(Messages._EDIT_PROFILING_OPTIONS);
138 }
139
140 public boolean[] getFilter() {
141 return filter;
142 }
143
144 /**
145 * @param viewContentProvider
146 */
147 public void setViewContentProvider(ViewContentProvider viewContentProvider) {
148 this.viewContentProvider = viewContentProvider;
149 }
150
151 /**
152 * @param viewThreadComparator
153 */
154 public void setViewThreadComparator(TraceComparator viewThreadComparator) {
155 this.viewTraceComparator = viewThreadComparator;
156 }
157
158 /**
159 * @param viewViewLabelProvider
160 */
161 public void setViewViewLabelProvider(ViewLabelProvider viewViewLabelProvider) {
162 this.viewViewLabelProvider = viewViewLabelProvider;
163 }
164
165 class ViewContentProvider implements IStructuredContentProvider {
166 @Override
167 public void dispose() {
168 }
169
170 @Override
171 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
172 }
173
174 @Override
175 public Object[] getElements(Object input) {
176 return threads;
177 }
178 }
179
180 class ViewLabelProvider extends LabelProvider implements
181 ITableLabelProvider {
182 @Override
183 public Image getImage(Object obj) {
184 return null;
185 }
186
187 @Override
188 public Image getColumnImage(Object element, int columnIndex) {
189 return null;
190 }
191
192 @Override
193 public String getColumnText(Object element, int columnIndex) {
194 // TODO: AA: Provide Label Provider externally
195 ITmfTimeAnalysisEntry t = (ITmfTimeAnalysisEntry) element;
196
197 if (columnIndex == 1)
198 return String.valueOf(t.getId());
199 else if (columnIndex == 2)
200 return t.getName();
201 else
202 return ""; //$NON-NLS-1$
203 }
204 }
205
206 class TraceComparator extends ViewerComparator {
207 @Override
208 public int compare(Viewer viewer, Object e1, Object e2) {
209 // TODO: AA: Provide comparator externally
210 int id1 = ((ITmfTimeAnalysisEntry) e1).getId();
211 int id2 = ((ITmfTimeAnalysisEntry) e2).getId();
212
213 if (id1 == id2)
214 return 0;
215
216 return (id1 < id2) ? -1 : 1;
217 // return 0;
218 }
219 }
220 }
This page took 0.03585 seconds and 5 git commands to generate.