package org.fipro.eclipse.migration.ui.view.overview; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.eclipse.core.databinding.observable.IObservable; import org.eclipse.core.databinding.observable.list.WritableList; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.ViewPart; import org.fipro.eclipse.migration.model.Person; import org.fipro.eclipse.migration.service.PersonServiceImpl; import org.fipro.eclipse.migration.ui.editor.PersonEditor; import org.fipro.eclipse.migration.ui.editor.PersonEditorInput; public class OverviewView extends ViewPart { TableViewer viewer; @Override public void createPartControl(Composite parent) { parent.setLayout(new GridLayout()); IObservable list = new WritableList(PersonServiceImpl.getPersons(10), Person.class); viewer = new TableViewer(parent, SWT.MULTI|SWT.BORDER|SWT.H_SCROLL|SWT.V_SCROLL|SWT.FULL_SELECTION); ObservableListContentProvider cp = new ObservableListContentProvider(); viewer.setContentProvider(cp); viewer.getTable().setHeaderVisible(true); viewer.getTable().setLinesVisible(true); GridDataFactory.fillDefaults().grab(true, true).applyTo(viewer.getControl()); TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE); column.getColumn().setText("Firstname"); column.getColumn().setWidth(100); column.setLabelProvider(new FirstNameLabelProvider()); // column.setEditingSupport(new FirstNameEditingSupport(viewer)); column = new TableViewerColumn(viewer, SWT.NONE); column.getColumn().setText("Lastname"); column.getColumn().setWidth(100); column.setLabelProvider(new LastNameLabelProvider()); // column.setEditingSupport(new LastNameEditingSupport(viewer)); column = new TableViewerColumn(viewer, SWT.NONE); column.getColumn().setText("Married"); column.getColumn().setWidth(60); column.setLabelProvider(new MarriedLabelProvider()); // column.setEditingSupport(new MarriedEditingSupport(viewer)); column = new TableViewerColumn(viewer, SWT.NONE); column.getColumn().setText("Gender"); column.getColumn().setWidth(80); column.setLabelProvider(new GenderLabelProvider()); // column.setEditingSupport(new GenderEditingSupport(viewer)); viewer.setInput(list); // set the viewer as selection provider getSite().setSelectionProvider(viewer); // hook double click for opening an editor viewer.addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(DoubleClickEvent event) { ISelection selection = viewer.getSelection(); if (selection != null && selection instanceof IStructuredSelection) { Object obj = ((IStructuredSelection) selection).getFirstElement(); // if we had a selection lets open the editor if (obj != null) { Person person = (Person) obj; person.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { viewer.refresh(); } }); PersonEditorInput input = new PersonEditorInput(person); try { getSite().getWorkbenchWindow().getActivePage().openEditor(input, PersonEditor.ID); } catch (PartInitException e) { throw new RuntimeException(e); } } } } }); } @Override public void setFocus() { this.viewer.getControl().setFocus(); } }