/* * Copyright (c) 2012 Eike Stepper (Berlin, Germany) and others. * 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: * Eike Stepper - initial API and implementation */ package org.eclipse.emf.cdo.transfer.ui.swt; import org.eclipse.emf.cdo.transfer.CDOTransfer; import org.eclipse.emf.cdo.transfer.CDOTransferMapping; import org.eclipse.emf.cdo.transfer.ui.TransferContentProvider; import org.eclipse.emf.cdo.transfer.ui.TransferLabelProvider; import org.eclipse.net4j.ui.shared.SharedIcons; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.TreeViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; /** * A {@link Composite composite} that contains a {@link #getViewer() tree viewer} for the {@link CDOTransferMapping mappings} of a {@link #getTransfer() transfer}. * * @author Eike Stepper * @since 4.2 */ public class TransferTreeComposite extends Composite { private CDOTransfer transfer; private TreeViewer viewer; public TransferTreeComposite(Composite parent, int style, CDOTransfer transfer) { super(parent, style); this.transfer = transfer; setLayout(new FillLayout(SWT.VERTICAL)); viewer = new TreeViewer(this, SWT.FULL_SELECTION); Tree tree = viewer.getTree(); tree.setLinesVisible(true); tree.setHeaderVisible(true); TreeViewerColumn sourceViewerColumn = new TreeViewerColumn(viewer, SWT.NONE); TreeColumn sourceColumn = sourceViewerColumn.getColumn(); sourceColumn.setWidth(350); sourceColumn.setText("From " + transfer.getSourceSystem()); TreeViewerColumn typeViewerColumn = new TreeViewerColumn(viewer, SWT.NONE); TreeColumn typeColumn = typeViewerColumn.getColumn(); typeColumn.setWidth(100); typeColumn.setText("Type"); TreeViewerColumn targetViewerColumn = new TreeViewerColumn(viewer, SWT.NONE); TreeColumn targetColumn = targetViewerColumn.getColumn(); targetColumn.setWidth(450); targetColumn.setText("To " + transfer.getTargetSystem()); TreeViewerColumn statusViewerColumn = new TreeViewerColumn(viewer, SWT.NONE); TreeColumn statusColumn = statusViewerColumn.getColumn(); statusColumn.setWidth(100); statusColumn.setText("Status"); viewer.setAutoExpandLevel(2); viewer.setContentProvider(new TransferContentProvider()); viewer.setLabelProvider(new TransferLabelProvider(transfer)); viewer.setInput(transfer.getRootMapping()); MenuManager manager = new MenuManager(); Menu menu = manager.createContextMenu(tree); manager.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { IStructuredSelection selection = (IStructuredSelection)viewer.getSelection(); CDOTransferMapping mapping = (CDOTransferMapping)selection.getFirstElement(); manager.add(new UnmapAction(mapping)); } }); manager.setRemoveAllWhenShown(true); tree.setMenu(menu); } public CDOTransfer getTransfer() { return transfer; } public TreeViewer getViewer() { return viewer; } public CDOTransferMapping getSelectedMapping() { IStructuredSelection selection = (IStructuredSelection)viewer.getSelection(); return (CDOTransferMapping)selection.getFirstElement(); } @Override public boolean setFocus() { return viewer.getTree().setFocus(); } /** * An {@link Action action} to {@link CDOTransferMapping#unmap() unmap} a {@link CDOTransferMapping transfer mapping}. * * @author Eike Stepper */ public static class UnmapAction extends Action { private CDOTransferMapping mapping; public UnmapAction(CDOTransferMapping mapping) { super("Unmap", SharedIcons.getDescriptor(SharedIcons.ETOOL_DELETE)); this.mapping = mapping; } public CDOTransferMapping getMapping() { return mapping; } @Override public void run() { mapping.unmap(); } } }