| /** |
| * <copyright> |
| * Copyright (c) 2010-2014 Henshin developers. 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 |
| * </copyright> |
| */ |
| package org.eclipse.emf.henshin.interpreter.ui.wizard; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| |
| import org.eclipse.emf.henshin.interpreter.ui.HenshinInterpreterUIPlugin; |
| import org.eclipse.emf.henshin.interpreter.ui.util.ParameterConfig; |
| import org.eclipse.jface.viewers.CellEditor; |
| import org.eclipse.jface.viewers.ColumnLabelProvider; |
| import org.eclipse.jface.viewers.ComboBoxCellEditor; |
| import org.eclipse.jface.viewers.EditingSupport; |
| import org.eclipse.jface.viewers.IStructuredContentProvider; |
| import org.eclipse.jface.viewers.TableViewer; |
| import org.eclipse.jface.viewers.TableViewerColumn; |
| import org.eclipse.jface.viewers.TextCellEditor; |
| import org.eclipse.jface.viewers.Viewer; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.layout.FormAttachment; |
| import org.eclipse.swt.layout.FormData; |
| import org.eclipse.swt.layout.FormLayout; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Group; |
| |
| /** |
| * |
| * @author Gregor Bonifer |
| * @author Stefan Jurack |
| */ |
| public class ParameterEditTable { |
| |
| protected int CONTROL_OFFSET = 5; |
| |
| protected Collection<ParameterChangeListener> listeners = new ArrayList<ParameterEditTable.ParameterChangeListener>(); |
| |
| protected TableViewer tableViewer; |
| |
| protected Group container; |
| |
| public ParameterEditTable(Composite parent) { |
| container = new Group(parent, SWT.NONE); |
| container.setText(HenshinInterpreterUIPlugin.LL("_UI_Parameters")); |
| container.setLayout(new FormLayout()); |
| tableViewer = new TableViewer(container, SWT.FULL_SELECTION | SWT.BORDER); |
| { |
| FormData data = new FormData(); |
| data.top = new FormAttachment(0, CONTROL_OFFSET); |
| data.left = new FormAttachment(0, CONTROL_OFFSET); |
| data.right = new FormAttachment(100, -CONTROL_OFFSET); |
| data.bottom = new FormAttachment(100, -CONTROL_OFFSET); |
| data.height = 80; |
| tableViewer.getTable().setLayoutData(data); |
| tableViewer.getTable().setLinesVisible(true); |
| tableViewer.getTable().setHeaderVisible(true); |
| |
| } |
| buildColumns(); |
| |
| tableViewer.setContentProvider(new IStructuredContentProvider() { |
| |
| @Override |
| public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { |
| |
| } |
| |
| @Override |
| public Object[] getElements(Object inputElement) { |
| @SuppressWarnings("unchecked") |
| Collection<ParameterConfig> paramCfgs = (Collection<ParameterConfig>) inputElement; |
| return paramCfgs.toArray(); |
| } |
| |
| @Override |
| public void dispose() { |
| } |
| }); |
| |
| } |
| |
| public Control getControl() { |
| return container; |
| } |
| |
| protected void buildColumns() { |
| TableViewerColumn keyColumn = new TableViewerColumn(tableViewer, SWT.NONE); |
| { |
| keyColumn.getColumn().setText(HenshinInterpreterUIPlugin.LL("_UI_ParameterColumn_Name")); |
| keyColumn.getColumn().setWidth(100); |
| keyColumn.setLabelProvider(new ColumnLabelProvider() { |
| |
| @Override |
| public String getText(Object entry) { |
| return ((ParameterConfig) entry).getName(); |
| } |
| }); |
| } |
| |
| TableViewerColumn typeColumn = new TableViewerColumn(tableViewer, SWT.NONE); |
| { |
| typeColumn.getColumn().setText(HenshinInterpreterUIPlugin.LL("_UI_ParameterColumn_Type")); |
| typeColumn.getColumn().setWidth(100); |
| typeColumn.setLabelProvider(new ColumnLabelProvider() { |
| |
| @Override |
| public String getText(Object element) { |
| ParameterConfig paramCfg = (ParameterConfig) element; |
| return paramCfg.getTypeLabel(); |
| } |
| }); |
| typeColumn.setEditingSupport(new EditingSupport(tableViewer) { |
| |
| @Override |
| protected void setValue(Object element, Object value) { |
| ParameterConfig paramCfg = (ParameterConfig) element; |
| |
| paramCfg.setType((Integer) value); |
| |
| for (ParameterChangeListener l : listeners) |
| l.parameterChanged(paramCfg); |
| tableViewer.refresh(); |
| } |
| |
| @Override |
| protected Object getValue(Object element) { |
| ParameterConfig paramCfg = (ParameterConfig) element; |
| return paramCfg.getType(); |
| } |
| |
| @Override |
| protected CellEditor getCellEditor(Object element) { |
| |
| return new ComboBoxCellEditor(tableViewer.getTable(), ParameterConfig |
| .getSupportedTypes().values().toArray(new String[0]), SWT.READ_ONLY); |
| } |
| |
| @Override |
| protected boolean canEdit(Object element) { |
| return true; |
| } |
| }); |
| } |
| |
| TableViewerColumn valueColumn = new TableViewerColumn(tableViewer, SWT.NONE); |
| { |
| valueColumn.getColumn().setText(HenshinInterpreterUIPlugin.LL("_UI_ParameterColumn_Value")); |
| valueColumn.getColumn().setWidth(100); |
| valueColumn.setLabelProvider(new ColumnLabelProvider() { |
| @Override |
| public String getText(Object element) { |
| ParameterConfig paramCfg = (ParameterConfig) element; |
| switch (paramCfg.getType()) { |
| case ParameterConfig.CLEAR: |
| return ""; |
| case ParameterConfig.NULL: |
| return "null"; |
| case ParameterConfig.STRING: |
| return "\"" + paramCfg.getValue() + "\""; |
| default: |
| return paramCfg.getValue() + ""; |
| } |
| } |
| }); |
| valueColumn.setEditingSupport(new EditingSupport(tableViewer) { |
| |
| @Override |
| protected void setValue(Object element, Object value) { |
| ParameterConfig paramCfg = (ParameterConfig) element; |
| try { |
| switch (paramCfg.getType()) { |
| case ParameterConfig.STRING: |
| paramCfg.setValue(value.toString()); |
| break; |
| case ParameterConfig.FLOAT: |
| paramCfg.setValue(Float.parseFloat(value.toString())); |
| break; |
| case ParameterConfig.DOUBLE: |
| paramCfg.setValue(Double.parseDouble(value.toString())); |
| break; |
| case ParameterConfig.INT: |
| paramCfg.setValue(Integer.parseInt(value.toString())); |
| break; |
| case ParameterConfig.LONG: |
| paramCfg.setValue(Long.parseLong(value.toString())); |
| break; |
| case ParameterConfig.BOOLEAN: |
| paramCfg.setValue((Integer) value > 0 ? true : false); |
| break; |
| default: |
| paramCfg.setValue(value); |
| } |
| for (ParameterChangeListener l : listeners) |
| l.parameterChanged(paramCfg); |
| tableViewer.refresh(); |
| } catch (Exception e) { |
| } |
| } |
| |
| @Override |
| protected Object getValue(Object entry) { |
| ParameterConfig paramCfg = (ParameterConfig) entry; |
| switch (paramCfg.getType()) { |
| case ParameterConfig.BOOLEAN: |
| boolean value = (Boolean) paramCfg.getValue(); |
| return value ? 1 : 0; |
| default: |
| return paramCfg.getValue() + ""; |
| } |
| } |
| |
| @Override |
| protected CellEditor getCellEditor(Object element) { |
| ParameterConfig paramCfg = (ParameterConfig) element; |
| // case ParameterConfiguration.NULL is not editable |
| switch (paramCfg.getType()) { |
| case ParameterConfig.BOOLEAN: |
| return new ComboBoxCellEditor(tableViewer.getTable(), new String[] { |
| "false", "true" }, SWT.READ_ONLY); |
| default: |
| // default covers the cases: |
| // STRING,INT,LONG,FLOAT,DOUBLE |
| return new TextCellEditor(tableViewer.getTable()); |
| } |
| } |
| |
| @Override |
| protected boolean canEdit(Object element) { |
| ParameterConfig paramCfg = (ParameterConfig) element; |
| return paramCfg.getType() != ParameterConfig.NULL |
| && paramCfg.getType() != ParameterConfig.CLEAR; |
| } |
| }); |
| } |
| |
| } |
| |
| public void addParameterChangeListener(ParameterChangeListener listener) { |
| listeners.add(listener); |
| } |
| |
| public static interface ParameterChangeListener { |
| void parameterChanged(ParameterConfig paramCfg); |
| } |
| |
| public void setParameters(Collection<ParameterConfig> paramCfgs) { |
| tableViewer.setInput(paramCfgs); |
| } |
| |
| } |