Java tutorial
/* * uDig - User Friendly Desktop Internet GIS client * http://udig.refractions.net * (C) 2012, Refractions Research Inc. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * (http://www.eclipse.org/legal/epl-v10.html), and the Refractions BSD * License v1.0 (http://udig.refractions.net/files/bsd3-v10.html). */ package org.locationtech.udig.catalog.service.database; import java.io.Serializable; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.EditingSupport; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; public class TableBasedExtraParamsControl implements ExtraParamsControl { private List<ExtraParams> paramsDefinition; public TableBasedExtraParamsControl(List<ExtraParams> paramsDefinition) { this.paramsDefinition = paramsDefinition; } public Control createControl(Composite parent) { TableViewer viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER); createColumns(parent, viewer); final Table table = viewer.getTable(); table.setHeaderVisible(false); table.setLinesVisible(true); viewer.setContentProvider(new ArrayContentProvider()); viewer.setInput(paramsDefinition); return viewer.getControl(); } private void createColumns(Composite parent, final TableViewer viewer) { TableViewerColumn col = createTableViewerColumn(viewer, "c1", 200); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { ExtraParams p = (ExtraParams) element; return p.name; } }); col = createTableViewerColumn(viewer, "c2", 300); col.setEditingSupport(new ParamEditingSupport(viewer)); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { ExtraParams p = (ExtraParams) element; if (p.getCellEditor() == null) { p.setCellEditor(p.createCellEditor(viewer.getTable())); } return p.getValue(); } }); } private TableViewerColumn createTableViewerColumn(TableViewer viewer, String title, int bound) { final TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.NONE); final TableColumn column = viewerColumn.getColumn(); column.setText(title); column.setWidth(bound); column.setResizable(true); column.setMoveable(true); return viewerColumn; } public Map<String, Serializable> getParams() { Map<String, Serializable> params = new HashMap<String, Serializable>(); for (ExtraParams def : paramsDefinition) { CellEditor cellEditor = def.getCellEditor(); if (cellEditor != null && cellEditor.getValue() != null) { params.put(def.param.key, def.convertValue(cellEditor.getValue())); } } return params; } class ParamEditingSupport extends EditingSupport { private TableViewer viewer; public ParamEditingSupport(TableViewer viewer) { super(viewer); this.viewer = viewer; } @Override protected CellEditor getCellEditor(Object element) { ExtraParams extraParams = (ExtraParams) element; CellEditor cellEditor = extraParams.getCellEditor(); return cellEditor; } @Override protected boolean canEdit(Object element) { return true; } @Override protected Object getValue(Object element) { ExtraParams def = (ExtraParams) element; return def.getCellEditor().getValue(); } @Override protected void setValue(Object element, Object value) { ExtraParams def = (ExtraParams) element; viewer.refresh(element, true); def.getCellEditor().setValue(value); } } }