FilterTableViewerFactory.java
Go to the documentation of this file.00001 package edu.rice.cs.hpc.filter.view;
00002
00003 import java.util.Map.Entry;
00004
00005 import org.eclipse.jface.dialogs.InputDialog;
00006 import org.eclipse.jface.viewers.ArrayContentProvider;
00007 import org.eclipse.jface.viewers.CellEditor;
00008 import org.eclipse.jface.viewers.CellLabelProvider;
00009 import org.eclipse.jface.viewers.CheckStateChangedEvent;
00010 import org.eclipse.jface.viewers.CheckboxTableViewer;
00011 import org.eclipse.jface.viewers.ColumnViewerEditor;
00012 import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy;
00013 import org.eclipse.jface.viewers.ComboBoxCellEditor;
00014 import org.eclipse.jface.viewers.DoubleClickEvent;
00015 import org.eclipse.jface.viewers.EditingSupport;
00016 import org.eclipse.jface.viewers.ICheckStateListener;
00017 import org.eclipse.jface.viewers.ICheckStateProvider;
00018 import org.eclipse.jface.viewers.IDoubleClickListener;
00019 import org.eclipse.jface.viewers.ISelection;
00020 import org.eclipse.jface.viewers.ISelectionChangedListener;
00021 import org.eclipse.jface.viewers.SelectionChangedEvent;
00022 import org.eclipse.jface.viewers.StructuredSelection;
00023 import org.eclipse.jface.viewers.TableViewer;
00024 import org.eclipse.jface.viewers.TableViewerColumn;
00025 import org.eclipse.jface.viewers.TableViewerEditor;
00026 import org.eclipse.jface.viewers.Viewer;
00027 import org.eclipse.jface.viewers.ViewerCell;
00028 import org.eclipse.jface.viewers.ViewerComparator;
00029 import org.eclipse.jface.window.Window;
00030 import org.eclipse.swt.SWT;
00031 import org.eclipse.swt.layout.GridData;
00032 import org.eclipse.swt.widgets.Composite;
00033 import org.eclipse.swt.widgets.Shell;
00034 import org.eclipse.swt.widgets.Table;
00035 import org.eclipse.swt.widgets.TableColumn;
00036 import org.eclipse.ui.IWorkbenchWindow;
00037 import org.eclipse.ui.services.ISourceProviderService;
00038
00039 import edu.rice.cs.hpc.common.ui.Util;
00040 import edu.rice.cs.hpc.data.filter.FilterAttribute;
00041 import edu.rice.cs.hpc.filter.pattern.PatternValidator;
00042 import edu.rice.cs.hpc.filter.service.FilterMap;
00043 import edu.rice.cs.hpc.filter.service.FilterStateProvider;
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 public class FilterTableViewerFactory
00055 {
00056 static CheckboxTableViewer getTable(Composite parent)
00057 {
00058 final CheckboxTableViewer ctv = CheckboxTableViewer.newCheckList(parent, SWT.BORDER | SWT.MULTI);
00059
00060 final Table table = ctv.getTable();
00061 table.setLayoutData(new GridData(GridData.FILL_BOTH));
00062
00063
00064
00065
00066 final TableViewerColumn columnPattern = new TableViewerColumn(ctv, SWT.LEFT);
00067 TableColumn col = columnPattern.getColumn();
00068 col.setText("Pattern");
00069 col.setWidth(100);
00070 col.setToolTipText("Select a filter to delete or check/uncheck a filter pattern to enable/disable");
00071 columnPattern.setLabelProvider(new CellLabelProvider() {
00072
00073 @Override
00074 public void update(ViewerCell cell) {
00075 Entry<String, FilterAttribute> item = (Entry<String, FilterAttribute>) cell.getElement();
00076 cell.setText(item.getKey());
00077 }
00078 });
00079
00080
00081
00082
00083 final TableViewerColumn columnType = new TableViewerColumn(ctv, SWT.LEFT);
00084 col = columnType.getColumn();
00085 col.setText("Type");
00086 col.setWidth(100);
00087 col.setToolTipText("Select a type of filtering: exclusive means only the filtered scope is elided while inclusive means the filtered scope and its descendants are elided.");
00088 columnType.setLabelProvider(new CellLabelProvider() {
00089
00090 @Override
00091 public void update(ViewerCell cell) {
00092 Entry<String, FilterAttribute> item = (Entry<String, FilterAttribute>) cell.getElement();
00093 cell.setText(item.getValue().getFilterType());
00094 }
00095 });
00096 columnType.setEditingSupport(new ComboEditingSupport(ctv));
00097
00098
00099 ctv.setContentProvider( new ArrayContentProvider() );
00100
00101
00102 ctv.setCheckStateProvider( new ICheckStateProvider() {
00103
00104 @Override
00105 public boolean isGrayed(Object element) {
00106 return false;
00107 }
00108
00109 @Override
00110 public boolean isChecked(Object element) {
00111 if (element instanceof Entry<?,?>)
00112 {
00113 FilterAttribute value = (FilterAttribute) ((Entry<String, FilterAttribute>)element).getValue();
00114 return value.enable.booleanValue();
00115 }
00116 return false;
00117 }
00118 } );
00119
00120
00121
00122 ctv.setComparator( new ViewerComparator() {
00123 @Override
00124 public int compare(Viewer viewer, Object e1, Object e2)
00125 {
00126 Entry<String, FilterAttribute> item1 = (Entry<String, FilterAttribute>) e1;
00127 Entry<String, FilterAttribute> item2 = (Entry<String, FilterAttribute>) e2;
00128 return (item1.getKey().compareTo(item2.getKey()));
00129 }
00130 });
00131
00132
00133
00134
00135 ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(ctv);
00136
00137 int feature = ColumnViewerEditor.TABBING_HORIZONTAL
00138 | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
00139 | ColumnViewerEditor.TABBING_VERTICAL
00140 | ColumnViewerEditor.KEYBOARD_ACTIVATION;
00141
00142 TableViewerEditor.create(ctv, null, actSupport, feature);
00143
00144
00145
00146
00147
00148 FilterMap filterMap = FilterMap.getInstance();
00149 ctv.setInput(filterMap.getEntrySet());
00150
00151 table.setHeaderVisible(true);
00152 table.pack();
00153
00154 return ctv;
00155 }
00156
00157
00158
00159
00160
00161
00162
00163
00164 private static class ComboEditingSupport extends EditingSupport
00165 {
00166 final private ComboBoxCellEditor editor;
00167
00168 public ComboEditingSupport(TableViewer viewer) {
00169 super(viewer);
00170
00171
00172 FilterAttribute.Type []types = FilterAttribute.Type.values();
00173 String []items = new String[types.length];
00174 for(int i=0; i<types.length; i++)
00175 {
00176 items[i] = types[i].name();
00177 }
00178 editor = new ComboBoxCellEditor(viewer.getTable(), items);
00179 }
00180
00181 @Override
00182 protected CellEditor getCellEditor(Object element) {
00183 return editor;
00184 }
00185
00186 @Override
00187 protected boolean canEdit(Object element) {
00188 return true;
00189 }
00190
00191 @Override
00192 protected Object getValue(Object element) {
00193 if (element instanceof Entry<?, ?>)
00194 {
00195 Entry<String, FilterAttribute> item = (Entry<String, FilterAttribute>) element;
00196 FilterAttribute att = item.getValue();
00197 return att.filterType.ordinal();
00198 }
00199 return 0;
00200 }
00201
00202 @Override
00203 protected void setValue(Object element, Object value) {
00204 if (element instanceof Entry<?, ?>)
00205 {
00206 Entry<String, FilterAttribute> item = (Entry<String, FilterAttribute>) element;
00207 if (value instanceof Integer)
00208 {
00209 FilterAttribute att = item.getValue();
00210 Integer ordinal = (Integer) value;
00211 FilterAttribute.Type typeNew = FilterAttribute.Type.values()[ordinal];
00212 att.filterType = typeNew;
00213
00214 String key = item.getKey();
00215
00216
00217 FilterMap map = FilterMap.getInstance();
00218 map.put(key, att);
00219 getViewer().update(element, null);
00220 }
00221 }
00222 }
00223 }
00224 }