package com.sap.ide.refactoring.op.move;
import java.util.Collection;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import com.sap.ide.refactoring.model.move.MovableElementTarget;
import com.sap.ide.treeprovider.ModelElementImageFacade;
public class MoveInputPage extends UserInputWizardPage {
/**
* Table label provider for the target selection table.
*/
public static class TargetLabelProvider extends LabelProvider implements ITableLabelProvider {
@Override
public Image getColumnImage(final Object element, final int column) {
if (column == 0 && element instanceof MovableElementTarget) {
return ModelElementImageFacade.getImage(((MovableElementTarget) element).getWrappedModelElement());
} else {
return null;
}
}
@Override
public String getColumnText(final Object element, final int column) {
final MovableElementTarget target = (MovableElementTarget) element;
switch (column) {
case 0:
return target.getName();
case 1:
return target.getType();
case 2:
return target.getRole();
default:
return null;
}
}
}
public MoveInputPage(String name) {
super(name);
}
@Override
protected MoveRefactoring getRefactoring() {
return (MoveRefactoring) super.getRefactoring();
}
@Override
public void createControl(final Composite parent) {
final Composite control = new Composite(parent, SWT.NONE);
setControl(control);
final GridLayout layout = new GridLayout();
layout.numColumns = 2;
control.setLayout(layout);
Label label = new Label(control, SWT.SINGLE);
label.setText("Select new composite parent:");
GridData data = new GridData();
data.horizontalSpan = 2;
label.setLayoutData(data);
final Composite composite = new Composite(control, SWT.NULL);
final Table table = new Table(composite, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION);
table.setHeaderVisible(true);
table.setLinesVisible(false);
TableColumn columnName = new TableColumn(table, SWT.NONE);
columnName.setText("Name");
columnName.setResizable(true);
TableColumn columnType = new TableColumn(table, SWT.NONE);
columnType.setText("Type");
columnType.setResizable(true);
TableColumn columnRole = new TableColumn(table, SWT.NONE);
columnRole.setText("Role");
columnRole.setResizable(true);
TableColumnLayout tableColumnLayout = new TableColumnLayout();
composite.setLayout(tableColumnLayout);
tableColumnLayout.setColumnData(columnName, new ColumnWeightData(40, true));
tableColumnLayout.setColumnData(columnType, new ColumnWeightData(40, true));
tableColumnLayout.setColumnData(columnRole, new ColumnWeightData(40, true));
final TableViewer viewer = new TableViewer(table);
viewer.setContentProvider(new ArrayContentProvider());
viewer.setLabelProvider(new TargetLabelProvider());
final Collection<MovableElementTarget> targets = getRefactoring().getElementToMove().getPotentialMovingTargets();
viewer.setInput(targets.toArray());
viewer.setSelection(new StructuredSelection(new Object[] { targets.iterator().next() }));
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public final void selectionChanged(final SelectionChangedEvent event) {
final Object element = ((IStructuredSelection) event.getSelection()).getFirstElement();
if (element instanceof MovableElementTarget) {
final MovableElementTarget target = (MovableElementTarget) element;
handleTargetChanged(target);
}
}
});
data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
data.heightHint = getTableHeightHint(table, 7);
data.widthHint = convertWidthInCharsToPixels(30);
data.horizontalSpan = 2;
composite.setLayoutData(data);
table.setFocus();
}
private void handleTargetChanged(MovableElementTarget target) {
getRefactoring().setTarget(target);
}
private int getTableHeightHint(Table table, int rows) {
if (table.getFont().equals(JFaceResources.getDefaultFont())) {
table.setFont(JFaceResources.getDialogFont());
}
int result = table.getItemHeight() * rows + table.getHeaderHeight();
if (table.getLinesVisible()) {
result += table.getGridLineWidth() * (rows - 1);
}
return result;
}
}