/******************************************************************************* * Copyright (c) 2012 Google, Inc. * 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: * Google, Inc. - initial API and implementation *******************************************************************************/ package com.windowtester.test.locator.swt.shells; /* 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.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; public class TableCellTestShell { private final Object[] CONTENT = new Object[] { new EditableTableItem("item 1", new Integer(0)), new EditableTableItem("item 2", new Integer(1)) }; private final String[] VALUE_SET = new String[] { "xxx", "yyy", "zzz" }; private static final String NAME_PROPERTY = "name"; private static final String VALUE_PROPERTY = "value"; protected Shell shell; private TableViewer viewer; public TableCellTestShell() { } public void open(){ shell = new Shell(); final GridLayout gridLayout = new GridLayout(); shell.setLayout(gridLayout); shell.setSize(500, 300); shell.setText("TableCellEditor Test"); shell.open(); buildControls(shell); shell.layout(); } 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(Composite parent) { final Table table = new Table(parent, 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"); nameColumn.setWidth(150); TableColumn valColumn = new TableColumn(table, SWT.CENTER); valColumn.setText("Value"); valColumn.setWidth(150); 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 }); } public Shell getShell() { return shell; } /** * Launch the application * @param args */ public static void main(String[] args) { try { TableCellTestShell window = new TableCellTestShell(); window.open(); final Display display = Display.getDefault(); while (!window.getShell().isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } } catch (Exception e) { e.printStackTrace(); } } } class EditableTableItem { public String name; public Integer value; public EditableTableItem(String n, Integer v) { name = n; value = v; } }