blob: fb95e1b7da7480db3e20a8b68e82118df508ec28 [file] [log] [blame]
== UI Core ==
Plug-in "org.eclipse.modisco.infra.browser.uicore" contains the core parts of the browser, that can be integrated in any tree viewer.
It provides a tree content provider, a label provider, and a customization manager.
<code>CustomizableModelContentProvider</code> and <code>CustomizableModelLabelProvider</code> are abstract classes that must be sub-classed, providing an instance of a <code>CustomizationManager</code>.
The <code>CustomizationManager</code> class is the entry point for customizing the way things look and behave in the browser, through:
* Browser customizations ("uiCustom" files)
* Facets ("facetSet" files)
* APIs to control options that would appear in the MoDisco Browser's toolbar (sort instances, show empty links, etc.)
If parameters are modified in <code>CustomizationManager</code> after the <code>TreeViewer</code> was displayed, the viewer must be refreshed explicitly to account for these changes.
You may also want to override method <code>getRootElements</code> in <code>CustomizableModelContentProvider</code>, to provide the <code>EObject</code>s you want to display at the root of the tree.
Pay attention to the fact that the elements in the JFace model are not directly <code>EObject</code>s, but objects internal to the browser. So, don't redefine the <code>getElements</code> method to return <code>EObject</code>s, since that wouldn't work.
=== EObject from selection ===
If you want to get an <code>EObject</code> from a selection, you must use an adapter like this:
EObject eObject = (EObject) Platform.getAdapterManager().getAdapter(selectedElement, EObject.class);
=== Selection from EObject ===
To select an EObject in a TreeViewer created using UiCore, you can't just create a StructuredSelection(eObject), since the TreeViewer is composed of elements that encapsulate the EObjects.
Instead, you can retrieve the wrapping element by doing something like this:
public Object findElementForEObject(EObject eObjectToFind, TreeViewer treeViewer) {
ITreeContentProvider contentProvider = (ITreeContentProvider) treeViewer
.getContentProvider();
Object[] elements = contentProvider.getElements(treeViewer.getInput());
LinkedList<Object> elementsToHandle = new LinkedList<Object>();
for (Object element : elements) {
elementsToHandle.add(element);
}
while (!elementsToHandle.isEmpty()) {
Object e = elementsToHandle.removeFirst();
EObject eObject = (EObject) Platform.getAdapterManager().getAdapter(e, EObject.class);
if (eObject != null && eObject.equals(eObjectToFind)) {
return e;
}
if (contentProvider.hasChildren(e)) {
Object[] children = contentProvider.getChildren(e);
if (children != null) {
for (Object child : children) {
elementsToHandle.addLast(child);
}
}
}
}
return null;
}
=== Context menu / Selection provider ===
If you need to use a selection provider, for example if you want to add a context menu on your UiCore viewer, you can use <code>UnwrappingSelectionProvider</code> :
getSite().registerContextMenu(MENU_ID, contextMenu, new UnwrappingSelectionProvider(treeViewer));
<code>UnwrappingSelectionProvider</code> also offers static methods should you need them:
* <code>ISelection unwrapSelection(ISelection selection)</code>
* <code>Object unwrapElement(Object element)</code>