blob: 7469d5d5190706cc73f6b40ad6b641791e0d5ea5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2010 BMW Car IT, Technische Universitaet Muenchen, 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:
* BMW Car IT - Initial API and implementation
* Technische Universitaet Muenchen - Major refactoring and extension
*******************************************************************************/
package org.eclipse.emf.edapt.history.instantiation.ui;
import java.net.URL;
import java.util.List;
import org.eclipse.emf.edapt.declaration.Operation;
import org.eclipse.emf.edapt.spi.history.OperationInstance;
import org.eclipse.emf.edapt.spi.history.provider.HistoryEditPlugin;
import org.eclipse.jface.dialogs.PopupDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.HelpEvent;
import org.eclipse.swt.events.HelpListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
/**
* Table viewer to display applicable operations
* (A list of operation instances is expected as input)
*
* @author herrmama
* @author $Author$
* @version $Rev$
* @levd.rating RED Rev:
*/
public class OperationViewer extends TableViewer {
/**
* Operation icon
*/
private Image operationImage;
/**
* Default constructor
*
* @param parent Parent composite
*/
public OperationViewer(Composite parent) {
super(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);
init();
}
/**
* Initialize viewer
*
*/
private void init() {
final URL url = (URL) HistoryEditPlugin.INSTANCE.getImage("full/obj16/OperationInstance"); //$NON-NLS-1$
final ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(url);
operationImage = imageDescriptor.createImage();
final Table operationTable = getTable();
// content provider
setContentProvider(new IStructuredContentProvider() {
@Override
public Object[] getElements(Object inputElement) {
final List list = (List) inputElement;
return list.toArray();
}
@Override
public void dispose() {
// not required
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// not required
}
});
// label provider
setLabelProvider(new ITableLabelProvider() {
@Override
public Image getColumnImage(Object element, int columnIndex) {
switch (columnIndex) {
case 0:
return operationImage;
default:
return null;
}
}
@Override
public String getColumnText(Object element, int columnIndex) {
final OperationInstance operationInstance = (OperationInstance) element;
final Operation operation = operationInstance.getOperation();
switch (columnIndex) {
case 0:
return operation.getLabel();
case 1:
return operation.getDescription();
default:
return ""; //$NON-NLS-1$
}
}
@Override
public void addListener(ILabelProviderListener listener) {
// not required
}
@Override
public void dispose() {
// not required
}
@Override
public boolean isLabelProperty(Object element, String property) {
return false;
}
@Override
public void removeListener(ILabelProviderListener listener) {
// not required
}
});
// show operation description upon pressing F1
operationTable.addHelpListener(new HelpListener() {
@Override
public void helpRequested(HelpEvent e) {
if (operationTable.getSelectionCount() > 0) {
final TableItem tableItem = operationTable.getSelection()[0];
showDescription(tableItem);
}
}
});
addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event) {
if (operationTable.getSelectionCount() > 0) {
final TableItem tableItem = operationTable.getSelection()[0];
showDescription(tableItem);
}
}
});
setSorter(new ViewerSorter() {
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
final OperationInstance oi1 = (OperationInstance) e1;
final OperationInstance oi2 = (OperationInstance) e2;
return oi1.getOperation().getLabel().compareTo(
oi2.getOperation().getLabel());
}
});
addFilter(new ViewerFilter() {
/**
* {@inheritDoc}
*/
@Override
public boolean select(Viewer viewer, Object parentElement,
Object element) {
final OperationInstance operationInstance = (OperationInstance) element;
return !operationInstance.getOperation().isDeprecated();
}
});
}
/**
* Show the description of an operation which is associated to a table item
*
* @param tableItem Table item
*/
private void showDescription(TableItem tableItem) {
final OperationInstance operationInstance = (OperationInstance) tableItem.getData();
final Operation operation = operationInstance.getOperation();
final PopupDialog dialog = new TableItemPopupDialog(tableItem, operation.getLabel(), operation.getDescription());
dialog.open();
}
}