Merge branch 'develop' into LibrAlign
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / CdmViewerContextMenu.java
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 }