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
9 * Intel Corporation - Initial API and implementation
11 * $Id: ThreadFilterDialog.java,v 1.2 2008/03/05 17:31:07 ewchan Exp $
12 *****************************************************************************/
14 package org
.eclipse
.linuxtools
.tmf
.ui
.widgets
.timegraph
.dialogs
;
16 import java
.util
.Arrays
;
18 import org
.eclipse
.jface
.dialogs
.TitleAreaDialog
;
19 import org
.eclipse
.jface
.viewers
.CheckStateChangedEvent
;
20 import org
.eclipse
.jface
.viewers
.CheckboxTableViewer
;
21 import org
.eclipse
.jface
.viewers
.ICheckStateListener
;
22 import org
.eclipse
.jface
.viewers
.IStructuredContentProvider
;
23 import org
.eclipse
.jface
.viewers
.ITableLabelProvider
;
24 import org
.eclipse
.jface
.viewers
.LabelProvider
;
25 import org
.eclipse
.jface
.viewers
.Viewer
;
26 import org
.eclipse
.jface
.viewers
.ViewerComparator
;
27 import org
.eclipse
.jface
.window
.Window
;
28 import org
.eclipse
.linuxtools
.internal
.tmf
.ui
.Messages
;
29 import org
.eclipse
.linuxtools
.tmf
.ui
.widgets
.timegraph
.model
.ITmfTimeAnalysisEntry
;
30 import org
.eclipse
.swt
.SWT
;
31 import org
.eclipse
.swt
.graphics
.Image
;
32 import org
.eclipse
.swt
.layout
.GridData
;
33 import org
.eclipse
.swt
.widgets
.Composite
;
34 import org
.eclipse
.swt
.widgets
.Control
;
35 import org
.eclipse
.swt
.widgets
.Shell
;
36 import org
.eclipse
.swt
.widgets
.Table
;
37 import org
.eclipse
.swt
.widgets
.TableColumn
;
39 public class TmfTimeFilterDialog
extends TitleAreaDialog
{
40 private CheckboxTableViewer viewer
;
41 private Object
[] threads
;
42 private boolean[] filter
;
43 private ViewContentProvider viewContentProvider
;
44 private TraceComparator viewTraceComparator
;
45 private ViewLabelProvider viewViewLabelProvider
;
47 public TmfTimeFilterDialog(Shell parentShell
, Object
[] threads
,
51 this.threads
= (threads
!= null) ? Arrays
.copyOf(threads
, threads
.length
) : null;
53 this.filter
= (boolean[]) filter
.clone();
55 viewContentProvider
= new ViewContentProvider();
56 viewTraceComparator
= new TraceComparator();
57 viewViewLabelProvider
= new ViewLabelProvider();
60 public static boolean getTraceFilter(Shell parentShell
, Object
[] threads
,
62 TmfTimeFilterDialog dlg
= new TmfTimeFilterDialog(parentShell
, threads
,
64 if (dlg
.open() != Window
.OK
)
67 boolean f
[] = dlg
.getFilter();
68 if (java
.util
.Arrays
.equals(f
, filter
))
70 for (int i
= f
.length
- 1; i
>= 0; i
--)
77 protected Control
createDialogArea(Composite parent
) {
78 Composite composite
= (Composite
) super.createDialogArea(parent
);
80 viewer
= CheckboxTableViewer
.newCheckList(composite
, SWT
.BORDER
83 Table table
= viewer
.getTable();
84 table
.setLayoutData(new GridData(GridData
.FILL_BOTH
));
85 table
.setBackground(parent
.getBackground());
88 //Assign providers to the viewer.
89 viewer
.setContentProvider(viewContentProvider
);
90 viewer
.setComparator(viewTraceComparator
);
91 viewer
.setLabelProvider(viewViewLabelProvider
);
93 viewer
.setInput(new Object());
95 viewer
.addCheckStateListener(new ICheckStateListener() {
97 public void checkStateChanged(CheckStateChangedEvent event
) {
98 Object o
= event
.getElement();
99 for (int i
= threads
.length
- 1; i
>= 0; i
--) {
100 if (threads
[i
].equals(o
))
101 filter
[i
] = event
.getChecked();
106 if (filter
!= null) {
107 for (int i
= 0; i
< filter
.length
; i
++)
108 viewer
.setChecked(threads
[i
], filter
[i
]);
111 setMessage(Messages
.TmfTimeFilterDialog_TRACE_FILTER_DESC
);
112 setTitle(Messages
.TmfTimeFilterDialog_TRACE_FILTER
);
113 setDialogHelpAvailable(false);
114 setHelpAvailable(false);
116 // setTitleImage(org.eclipse.hyades.trace.internal.ui.PDPluginImages.DESC_IMG_UI_WZ_EDITPROFSET
122 private void createColumns(Table table
) {
123 table
.setHeaderVisible(true);
125 String headers
[] = { "", Messages
.TmfTimeFilterDialog_TRACE_ID
, Messages
.TmfTimeFilterDialog_TRACE_NAME
}; //$NON-NLS-1$
126 int width
[] = { 20, 80, 400 };
128 for (int i
= 0; i
< headers
.length
; i
++) {
129 TableColumn tc
= new TableColumn(table
, SWT
.NONE
, i
);
130 tc
.setResizable(true);
131 tc
.setText(headers
[i
]);
132 tc
.setWidth(width
[i
]);
137 protected void configureShell(Shell shell
) {
138 super.configureShell(shell
);
139 shell
.setText(Messages
.TmfTimeFilterDialog_EDIT_PROFILING_OPTIONS
);
142 public boolean[] getFilter() {
143 return (filter
!= null) ? Arrays
.copyOf(filter
, filter
.length
) : null;
147 * @param viewContentProvider
149 public void setViewContentProvider(ViewContentProvider viewContentProvider
) {
150 this.viewContentProvider
= viewContentProvider
;
154 * @param viewThreadComparator
156 public void setViewThreadComparator(TraceComparator viewThreadComparator
) {
157 this.viewTraceComparator
= viewThreadComparator
;
161 * @param viewViewLabelProvider
163 public void setViewViewLabelProvider(ViewLabelProvider viewViewLabelProvider
) {
164 this.viewViewLabelProvider
= viewViewLabelProvider
;
167 class ViewContentProvider
implements IStructuredContentProvider
{
169 public void dispose() {
173 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
177 public Object
[] getElements(Object input
) {
182 private static class ViewLabelProvider
extends LabelProvider
implements
183 ITableLabelProvider
{
185 public Image
getImage(Object obj
) {
190 public Image
getColumnImage(Object element
, int columnIndex
) {
195 public String
getColumnText(Object element
, int columnIndex
) {
196 // TODO: AA: Provide Label Provider externally
197 ITmfTimeAnalysisEntry t
= (ITmfTimeAnalysisEntry
) element
;
199 if (columnIndex
== 1)
200 return String
.valueOf(t
.getId());
201 else if (columnIndex
== 2)
204 return ""; //$NON-NLS-1$
208 private static class TraceComparator
extends ViewerComparator
{
210 public int compare(Viewer viewer
, Object e1
, Object e2
) {
211 // TODO: AA: Provide comparator externally
212 int id1
= ((ITmfTimeAnalysisEntry
) e1
).getId();
213 int id2
= ((ITmfTimeAnalysisEntry
) e2
).getId();
218 return (id1
< id2
) ?
-1 : 1;