1
|
package eu.etaxonomy.taxeditor.view;
|
2
|
|
3
|
import java.util.Map;
|
4
|
import java.util.Map.Entry;
|
5
|
|
6
|
import org.eclipse.jface.action.ContributionItem;
|
7
|
import org.eclipse.jface.action.IContributionItem;
|
8
|
import org.eclipse.jface.viewers.ISelection;
|
9
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
10
|
import org.eclipse.swt.SWT;
|
11
|
import org.eclipse.swt.events.SelectionAdapter;
|
12
|
import org.eclipse.swt.events.SelectionEvent;
|
13
|
import org.eclipse.swt.widgets.Menu;
|
14
|
import org.eclipse.swt.widgets.MenuItem;
|
15
|
import org.eclipse.ui.IWorkbenchWindow;
|
16
|
import org.eclipse.ui.PlatformUI;
|
17
|
import org.eclipse.ui.actions.CompoundContributionItem;
|
18
|
|
19
|
/**
|
20
|
* Generic context menu for opening elements in the taxeditor.
|
21
|
*
|
22
|
*/
|
23
|
public class CdmViewerContextMenu extends CompoundContributionItem {
|
24
|
|
25
|
@Override
|
26
|
protected IContributionItem[] getContributionItems() {
|
27
|
IContributionItem[] contributionItems = new IContributionItem[] {
|
28
|
new ContributionItem() {
|
29
|
@Override
|
30
|
public void fill(Menu menu, int index) {
|
31
|
MenuItem addItem = new MenuItem(menu, SWT.CASCADE);
|
32
|
addItem.setText("Open in...");
|
33
|
Menu addMenu = new Menu(menu);
|
34
|
addItem.setMenu(addMenu);
|
35
|
final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
|
36
|
final ISelection selection = window.getActivePage().getSelection();
|
37
|
if(selection instanceof IStructuredSelection){
|
38
|
Object firstElement = ((IStructuredSelection) selection).getFirstElement();
|
39
|
Map<Entry<Class<?>, String>, ICdmViewer> nameViewerMap = CdmViewerUtil.getNameViewerMap(firstElement);
|
40
|
for(Entry<Entry<Class<?>, String>, ICdmViewer> entry:nameViewerMap.entrySet()){
|
41
|
Entry<Class<?>, String> viewerClass = entry.getKey();
|
42
|
MenuItem menuItem = new MenuItem(addMenu, SWT.NONE);
|
43
|
menuItem.setText(viewerClass.getValue());
|
44
|
menuItem.addSelectionListener(new OpenInViewerListener(entry.getValue(), firstElement, viewerClass.getKey()));
|
45
|
}
|
46
|
}
|
47
|
}
|
48
|
}
|
49
|
};
|
50
|
return contributionItems;
|
51
|
}
|
52
|
|
53
|
private class OpenInViewerListener extends SelectionAdapter {
|
54
|
|
55
|
private final ICdmViewer cdmViewer;
|
56
|
private final Object input;
|
57
|
private final Class<?> viewerClass;
|
58
|
|
59
|
public OpenInViewerListener(ICdmViewer cdmViewer, Object input, Class<?> viewerClass) {
|
60
|
super();
|
61
|
this.cdmViewer = cdmViewer;
|
62
|
this.input = input;
|
63
|
this.viewerClass = viewerClass;
|
64
|
}
|
65
|
|
66
|
@Override
|
67
|
public void widgetSelected(SelectionEvent e) {
|
68
|
cdmViewer.show(input, viewerClass);
|
69
|
}
|
70
|
|
71
|
}
|
72
|
|
73
|
}
|