Mega Code Archive

 
Categories / Java / SWT Jface Eclipse
 

SWT Table Editor

/* SWT/JFace in Action GUI Design with Eclipse 3.0 Matthew Scarpino, Stephen Holder, Stanford Ng, and Laurent Mihalkovic ISBN: 1932394273 Publisher: Manning */ import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ComboBoxCellEditor; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; public class Ch9TableEditorComposite extends Composite {   private static final Object[] CONTENT = new Object[] {       new EditableTableItem("item 1", new Integer(0)),       new EditableTableItem("item 2", new Integer(1)) };   private static final String[] VALUE_SET = new String[] { "xxx", "yyy",       "zzz" };   private static final String NAME_PROPERTY = "name";   private static final String VALUE_PROPERTY = "value";   private TableViewer viewer;   public Ch9TableEditorComposite(Composite parent) {     super(parent, SWT.NULL);     buildControls();   }   private class NewRowAction extends Action {     public NewRowAction() {       super("Insert New Row");     }     public void run() {       EditableTableItem newItem = new EditableTableItem("new row",           new Integer(2));       viewer.add(newItem);     }   }   protected void buildControls() {     FillLayout compositeLayout = new FillLayout();     setLayout(compositeLayout);     final Table table = new Table(this, SWT.FULL_SELECTION);     viewer = buildAndLayoutTable(table);     attachContentProvider(viewer);     attachLabelProvider(viewer);     attachCellEditors(viewer, table);     MenuManager popupMenu = new MenuManager();     IAction newRowAction = new NewRowAction();     popupMenu.add(newRowAction);     Menu menu = popupMenu.createContextMenu(table);     table.setMenu(menu);     viewer.setInput(CONTENT);   }   private void attachLabelProvider(TableViewer viewer) {     viewer.setLabelProvider(new ITableLabelProvider() {       public Image getColumnImage(Object element, int columnIndex) {         return null;       }       public String getColumnText(Object element, int columnIndex) {         switch (columnIndex) {         case 0:           return ((EditableTableItem) element).name;         case 1:           Number index = ((EditableTableItem) element).value;           return VALUE_SET[index.intValue()];         default:           return "Invalid column: " + columnIndex;         }       }       public void addListener(ILabelProviderListener listener) {       }       public void dispose() {       }       public boolean isLabelProperty(Object element, String property) {         return false;       }       public void removeListener(ILabelProviderListener lpl) {       }     });   }   private void attachContentProvider(TableViewer viewer) {     viewer.setContentProvider(new IStructuredContentProvider() {       public Object[] getElements(Object inputElement) {         return (Object[]) inputElement;       }       public void dispose() {       }       public void inputChanged(Viewer viewer, Object oldInput,           Object newInput) {       }     });   }   private TableViewer buildAndLayoutTable(final Table table) {     TableViewer tableViewer = new TableViewer(table);     TableLayout layout = new TableLayout();     layout.addColumnData(new ColumnWeightData(50, 75, true));     layout.addColumnData(new ColumnWeightData(50, 75, true));     table.setLayout(layout);     TableColumn nameColumn = new TableColumn(table, SWT.CENTER);     nameColumn.setText("Name");     TableColumn valColumn = new TableColumn(table, SWT.CENTER);     valColumn.setText("Value");     table.setHeaderVisible(true);     return tableViewer;   }   private void attachCellEditors(final TableViewer viewer, Composite parent) {     viewer.setCellModifier(new ICellModifier() {       public boolean canModify(Object element, String property) {         return true;       }       public Object getValue(Object element, String property) {         if (NAME_PROPERTY.equals(property))           return ((EditableTableItem) element).name;         else           return ((EditableTableItem) element).value;       }       public void modify(Object element, String property, Object value) {         TableItem tableItem = (TableItem) element;         EditableTableItem data = (EditableTableItem) tableItem             .getData();         if (NAME_PROPERTY.equals(property))           data.name = value.toString();         else           data.value = (Integer) value;         viewer.refresh(data);       }     });     viewer.setCellEditors(new CellEditor[] { new TextCellEditor(parent),         new ComboBoxCellEditor(parent, VALUE_SET) });     viewer         .setColumnProperties(new String[] { NAME_PROPERTY,             VALUE_PROPERTY });   } } class EditableTableItem {   public String name;   public Integer value;   public EditableTableItem(String n, Integer v) {     name = n;     value = v;   } }