Project: swtbot
/*******************************************************************************
 * Copyright (c) 2006 Tom Schindl and others. 
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License v1.0 
 * which accompanies this distribution, and is available at 
 * http://www.eclipse.org/legal/epl-v10.html 
 * 
 * Contributors: 
 *     Tom Schindl - initial API and implementation 
 *******************************************************************************/
 
 
package org.eclipse.jface.snippets.viewers; 
 
import org.eclipse.jface.viewers.CellEditor; 
import org.eclipse.jface.viewers.ICellModifier; 
import org.eclipse.jface.viewers.IStructuredContentProvider; 
import org.eclipse.jface.viewers.LabelProvider; 
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.layout.FillLayout; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.TableItem; 
 
/**
 * Edit cell values in a table 
 *  
 * @author Tom Schindl <[email protected]
 * 
 */
 
public class Snippet009CellEditors { 
 private class MyContentProvider implements IStructuredContentProvider { 
 
  /* (non-Javadoc)
   * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) 
   */
 
  public Object[] getElements(Object inputElement) { 
   return (MyModel[])inputElement; 
  
 
  /* (non-Javadoc)
   * @see org.eclipse.jface.viewers.IContentProvider#dispose() 
   */
 
  public void dispose() { 
    
  
 
  /* (non-Javadoc)
   * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) 
   */
 
  public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { 
    
  
   
 
  
 public class MyModel { 
  public int counter; 
   
  public MyModel(int counter) { 
   this.counter = counter; 
  
   
  public String toString() { 
   return "Item " + this.counter; 
  
 
  
 public Snippet009CellEditors(Shell shell) { 
  final TableViewer v = new TableViewer(shell,SWT.BORDER|SWT.FULL_SELECTION); 
  v.setLabelProvider(new LabelProvider()); 
  v.setContentProvider(new MyContentProvider()); 
  v.setCellModifier(new ICellModifier() { 
 
   /* (non-Javadoc)
    * @see org.eclipse.jface.viewers.ICellModifier#canModify(java.lang.Object, java.lang.String) 
    */
 
   public boolean canModify(Object element, String property) { 
    return ((MyModel)element).counter % 2 == 0
   
 
   /* (non-Javadoc)
    * @see org.eclipse.jface.viewers.ICellModifier#getValue(java.lang.Object, java.lang.String) 
    */
 
   public Object getValue(Object element, String property) { 
    return ((MyModel)element).counter + ""
   
 
   /* (non-Javadoc)
    * @see org.eclipse.jface.viewers.ICellModifier#modify(java.lang.Object, java.lang.String, java.lang.Object) 
    */
 
   public void modify(Object element, String property, Object value) { 
    TableItem item = (TableItem)element; 
    ((MyModel)item.getData()).counter = Integer.parseInt(value.toString()); 
    v.update(item.getData(), null); 
   
    
  }); 
  v.setColumnProperties(new String[] { "column1" }); 
  v.setCellEditors(new CellEditor[] { new TextCellEditor(v.getTable()) }); 
   
   
  MyModel[] model = createModel(); 
  v.setInput(model); 
  v.getTable().setLinesVisible(true); 
 
  
 private MyModel[] createModel() { 
  MyModel[] elements = new MyModel[10]; 
   
  forint i = 0; i < 10; i++ ) { 
   elements[i] = new MyModel(i); 
  
   
  return elements; 
 
  
 /**
  * @param args 
  */
 
 public static void main(String[] args) { 
  Display display = new Display (); 
  Shell shell = new Shell(display); 
  shell.setLayout(new FillLayout()); 
  new Snippet009CellEditors(shell); 
  shell.open (); 
   
  while (!shell.isDisposed ()) { 
   if (!display.readAndDispatch ()) display.sleep (); 
  
   
  display.dispose (); 
 
 
 
}