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  * class to generate a FilterTableViewer-like class
00049  *
00050  * since we couldn't derive CheckboxTableViewer, we need to create a class that
00051  * automatically set and configure CheckboxTableViewer to mimic something  like
00052  * FilterTableViewer
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         // pattern column
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         // type column
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         // the content of the table is an array of a map between a string and a boolean
00099         ctv.setContentProvider( new ArrayContentProvider() );
00100         
00101         // customize the check value
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         // set comparison class for sorting the content of the table
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         // BEGIN: I have no idea what are these below statements, just copied in from the internet
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         // END: I have no idea what are these above statements, just copied in from the internet
00145         // -------------------------------------------------------------------------------------------------
00146 
00147         // set the input of the table
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      * Class to show a combo box inside a table cell 
00161      * The combo contains any enumerations in {@link edu.rice.cs.hpc.data.filter.FilterAttribute.Type }
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             // fill the content of the combo box
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                     // save it to the global world
00217                     FilterMap map          = FilterMap.getInstance();
00218                     map.put(key, att);
00219                     getViewer().update(element, null);
00220                 }
00221             }
00222         }       
00223     }
00224 }

Generated on 5 May 2015 for HPCVIEWER by  doxygen 1.6.1