|
Added
Link Here
|
| 1 |
/**************************************************************************** |
| 2 |
* Copyright (c) 2008 Versant Corp. and others. |
| 3 |
* All rights reserved. This program and the accompanying materials |
| 4 |
* are made available under the terms of the Eclipse Public License v1.0 |
| 5 |
* which accompanies this distribution, and is available at |
| 6 |
* http://www.eclipse.org/legal/epl-v10.html |
| 7 |
* |
| 8 |
* Contributors: |
| 9 |
* Versant Corp. - initial API and implementation |
| 10 |
*****************************************************************************/ |
| 11 |
package org.eclipse.ecf.internal.discovery.ui.views; |
| 12 |
|
| 13 |
import org.eclipse.ecf.discovery.edit.provider.DiscoveryEditingDomainProvider; |
| 14 |
import org.eclipse.ecf.internal.discovery.ui.statusline.AdapterFactoryStatuslineProvider; |
| 15 |
import org.eclipse.emf.common.util.EList; |
| 16 |
import org.eclipse.emf.ecore.resource.Resource; |
| 17 |
import org.eclipse.emf.edit.provider.ComposedAdapterFactory; |
| 18 |
import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor; |
| 19 |
import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; |
| 20 |
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; |
| 21 |
import org.eclipse.jface.action.IMenuListener; |
| 22 |
import org.eclipse.jface.action.IMenuManager; |
| 23 |
import org.eclipse.jface.action.IToolBarManager; |
| 24 |
import org.eclipse.jface.action.MenuManager; |
| 25 |
import org.eclipse.jface.action.Separator; |
| 26 |
import org.eclipse.jface.util.LocalSelectionTransfer; |
| 27 |
import org.eclipse.jface.viewers.StructuredSelection; |
| 28 |
import org.eclipse.jface.viewers.StructuredViewer; |
| 29 |
import org.eclipse.jface.viewers.TreeViewer; |
| 30 |
import org.eclipse.jface.viewers.ViewerComparator; |
| 31 |
import org.eclipse.jface.viewers.ViewerFilter; |
| 32 |
import org.eclipse.swt.SWT; |
| 33 |
import org.eclipse.swt.dnd.DND; |
| 34 |
import org.eclipse.swt.dnd.DragSourceAdapter; |
| 35 |
import org.eclipse.swt.dnd.DragSourceEvent; |
| 36 |
import org.eclipse.swt.dnd.Transfer; |
| 37 |
import org.eclipse.swt.widgets.Composite; |
| 38 |
import org.eclipse.swt.widgets.Menu; |
| 39 |
import org.eclipse.ui.IActionBars; |
| 40 |
import org.eclipse.ui.IWorkbenchActionConstants; |
| 41 |
import org.eclipse.ui.PlatformUI; |
| 42 |
import org.eclipse.ui.handlers.CollapseAllHandler; |
| 43 |
import org.eclipse.ui.handlers.IHandlerService; |
| 44 |
import org.eclipse.ui.part.DrillDownAdapter; |
| 45 |
import org.eclipse.ui.part.ViewPart; |
| 46 |
|
| 47 |
|
| 48 |
public class DiscoveryView extends ViewPart { |
| 49 |
|
| 50 |
public static final String ID = "org.eclipse.ecf.discovery.ui.DiscoveryView"; |
| 51 |
|
| 52 |
private DrillDownAdapter drillDownAdapter; |
| 53 |
|
| 54 |
private TreeViewer selectionViewer; |
| 55 |
|
| 56 |
private CollapseAllHandler collapseHandler; |
| 57 |
|
| 58 |
|
| 59 |
private void contributeToActionBars() { |
| 60 |
IActionBars bars = getViewSite().getActionBars(); |
| 61 |
fillLocalPullDown(bars.getMenuManager()); |
| 62 |
fillLocalToolBar(bars.getToolBarManager()); |
| 63 |
} |
| 64 |
|
| 65 |
/** |
| 66 |
* This creates a context menu for the viewer and adds a listener as well registering the menu for extension. <!-- |
| 67 |
* begin-user-doc --> <!-- end-user-doc --> |
| 68 |
*/ |
| 69 |
protected void createContextMenuFor(StructuredViewer viewer) { |
| 70 |
MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$ |
| 71 |
contextMenu.add(new Separator("additions")); //$NON-NLS-1$ |
| 72 |
contextMenu.setRemoveAllWhenShown(true); |
| 73 |
Menu menu = contextMenu.createContextMenu(viewer.getControl()); |
| 74 |
viewer.getControl().setMenu(menu); |
| 75 |
getSite().registerContextMenu(contextMenu, viewer); |
| 76 |
} |
| 77 |
|
| 78 |
/* (non-Javadoc) |
| 79 |
* @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) |
| 80 |
*/ |
| 81 |
public void createPartControl(Composite parent) { |
| 82 |
ComposedAdapterFactory adapterFactory = DiscoveryEditingDomainProvider.eINSTANCE.getAdapterFactory(); |
| 83 |
|
| 84 |
// create the viewer |
| 85 |
selectionViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); |
| 86 |
selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory)); |
| 87 |
selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory)); |
| 88 |
selectionViewer.setComparator(new ViewerComparator()); |
| 89 |
selectionViewer.setFilters(getViewerFilters()); |
| 90 |
getSite().setSelectionProvider(selectionViewer); |
| 91 |
|
| 92 |
// populate the viewer with the model if available |
| 93 |
EList<Resource> resources = DiscoveryEditingDomainProvider.eINSTANCE.getEditingDomain().getResourceSet() |
| 94 |
.getResources(); |
| 95 |
if (resources != null) { |
| 96 |
selectionViewer.setInput(resources.get(0)); |
| 97 |
selectionViewer.setSelection(new StructuredSelection(resources.get(0)), true); |
| 98 |
} |
| 99 |
|
| 100 |
new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory); |
| 101 |
selectionViewer.addPostSelectionChangedListener(new AdapterFactoryStatuslineProvider(adapterFactory, |
| 102 |
getViewSite().getActionBars().getStatusLineManager())); |
| 103 |
|
| 104 |
drillDownAdapter = new DrillDownAdapter(selectionViewer); |
| 105 |
createContextMenuFor(selectionViewer); |
| 106 |
hookContextMenu(); |
| 107 |
contributeToActionBars(); |
| 108 |
|
| 109 |
// add collapse handler |
| 110 |
IHandlerService handlerService = (IHandlerService) getSite().getService(IHandlerService.class); |
| 111 |
collapseHandler = new CollapseAllHandler(selectionViewer); |
| 112 |
handlerService.activateHandler(CollapseAllHandler.COMMAND_ID, collapseHandler); |
| 113 |
|
| 114 |
// add DND support |
| 115 |
Transfer[] supportedTransfers = { LocalSelectionTransfer.getTransfer() }; |
| 116 |
selectionViewer.addDragSupport(DND.DROP_DEFAULT | DND.DROP_COPY | DND.DROP_MOVE, supportedTransfers, new DragSourceAdapter() { |
| 117 |
@Override |
| 118 |
public void dragSetData(DragSourceEvent event) { |
| 119 |
LocalSelectionTransfer.getTransfer().setSelection(selectionViewer.getSelection()); |
| 120 |
} |
| 121 |
}); |
| 122 |
|
| 123 |
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, "org.eclipse.ecf.discovery.ui.ServiceView"); |
| 124 |
} |
| 125 |
|
| 126 |
/** |
| 127 |
* @return |
| 128 |
*/ |
| 129 |
private ViewerFilter[] getViewerFilters() { |
| 130 |
//TODO lookup view filters via EP |
| 131 |
return new ViewerFilter[0]; |
| 132 |
} |
| 133 |
|
| 134 |
private void fillContextMenu(IMenuManager manager) { |
| 135 |
manager.add(new Separator()); |
| 136 |
drillDownAdapter.addNavigationActions(manager); |
| 137 |
|
| 138 |
// Other plug-ins can contribute their actions here |
| 139 |
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); |
| 140 |
} |
| 141 |
|
| 142 |
private void fillLocalPullDown(IMenuManager manager) { |
| 143 |
manager.add(new Separator()); |
| 144 |
} |
| 145 |
|
| 146 |
private void fillLocalToolBar(IToolBarManager manager) { |
| 147 |
drillDownAdapter.addNavigationActions(manager); |
| 148 |
} |
| 149 |
|
| 150 |
private void hookContextMenu() { |
| 151 |
MenuManager menuMgr = new MenuManager("#PopupMenu"); |
| 152 |
menuMgr.setRemoveAllWhenShown(true); |
| 153 |
menuMgr.addMenuListener(new IMenuListener() { |
| 154 |
/* (non-Javadoc) |
| 155 |
* @see org.eclipse.jface.action.IMenuListener#menuAboutToShow(org.eclipse.jface.action.IMenuManager) |
| 156 |
*/ |
| 157 |
public void menuAboutToShow(IMenuManager manager) { |
| 158 |
//TODO https://bugs.eclipse.org/bugs/show_bug.cgi?id=151604 |
| 159 |
// add a menu listener |
| 160 |
// that will fire a selection changed event, in order |
| 161 |
// to update the selection in contributed actions |
| 162 |
selectionViewer.setSelection(selectionViewer.getSelection()); |
| 163 |
|
| 164 |
DiscoveryView.this.fillContextMenu(manager); |
| 165 |
} |
| 166 |
}); |
| 167 |
Menu menu = menuMgr.createContextMenu(selectionViewer.getControl()); |
| 168 |
selectionViewer.getControl().setMenu(menu); |
| 169 |
getSite().registerContextMenu(menuMgr, selectionViewer); |
| 170 |
} |
| 171 |
|
| 172 |
/* (non-Javadoc) |
| 173 |
* @see org.eclipse.ui.part.WorkbenchPart#setFocus() |
| 174 |
*/ |
| 175 |
public void setFocus() { |
| 176 |
selectionViewer.getControl().setFocus(); |
| 177 |
} |
| 178 |
|
| 179 |
/* (non-Javadoc) |
| 180 |
* @see org.eclipse.ui.part.WorkbenchPart#dispose() |
| 181 |
*/ |
| 182 |
public void dispose() { |
| 183 |
super.dispose(); |
| 184 |
collapseHandler.dispose(); |
| 185 |
} |
| 186 |
} |