/*******************************************************************************
* Copyright (c) 2007, 2010 Association for Decentralized Information Management
* in Industry THTH ry.
* 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:
* VTT Technical Research Centre of Finland - initial API and implementation
*******************************************************************************/
package org.simantics.diagram.layer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.IContributedContentsView;
import org.eclipse.ui.part.IPage;
import org.eclipse.ui.part.IPageBookViewPage;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.part.MessagePage;
import org.eclipse.ui.part.PageBook;
import org.eclipse.ui.part.PageBookView;
public class LayersView extends PageBookView implements ISelectionProvider, ISelectionChangedListener {
/**
* The plugin prefix.
*/
public static final String PREFIX = PlatformUI.PLUGIN_ID + "."; //$NON-NLS-1$
/**
* Help context id used for the content outline view
* (value "org.eclipse.ui.content_outline_context"
).
*/
public static final String LAYERS_VIEW_HELP_CONTEXT_ID = PREFIX + "layers_context";//$NON-NLS-1$
/**
* Message to show on the default page.
*/
private String defaultText = Messages.LayersView_noLayers;
/**
* Creates a content outline view with no content outline pages.
*/
public LayersView() {
super();
}
/* (non-Javadoc)
* Method declared on ISelectionProvider.
*/
public void addSelectionChangedListener(ISelectionChangedListener listener) {
getSelectionProvider().addSelectionChangedListener(listener);
}
/* (non-Javadoc)
* Method declared on PageBookView.
*/
protected IPage createDefaultPage(PageBook book) {
MessagePage page = new MessagePage();
initPage(page);
page.createControl(book);
page.setMessage(defaultText);
return page;
}
/**
* The PageBookView
implementation of this IWorkbenchPart
* method creates a PageBook
control with its default page showing.
*/
public void createPartControl(Composite parent) {
super.createPartControl(parent);
PlatformUI.getWorkbench().getHelpSystem().setHelp(getPageBook(),
LAYERS_VIEW_HELP_CONTEXT_ID);
}
/* (non-Javadoc)
* Method declared on PageBookView.
*/
protected PageRec doCreatePage(IWorkbenchPart part) {
// Try to get an outline page.
ILayersViewPage page = (ILayersViewPage)part.getAdapter(ILayersViewPage.class);
if (page != null) {
if (page instanceof IPageBookViewPage) {
initPage((IPageBookViewPage) page);
}
page.createControl(getPageBook());
return new PageRec(part, page);
}
// There is no content outline
return null;
}
/* (non-Javadoc)
* Method declared on PageBookView.
*/
protected void doDestroyPage(IWorkbenchPart part, PageRec rec) {
ILayersViewPage page = (ILayersViewPage) rec.page;
page.dispose();
rec.dispose();
}
/* (non-Javadoc)
* Method declared on IAdaptable.
*/
@SuppressWarnings("rawtypes")
public Object getAdapter(Class key) {
if (key == IContributedContentsView.class) {
return new IContributedContentsView() {
public IWorkbenchPart getContributingPart() {
return getContributingEditor();
}
};
}
return super.getAdapter(key);
}
/* (non-Javadoc)
* Method declared on PageBookView.
*/
protected IWorkbenchPart getBootstrapPart() {
IWorkbenchPage page = getSite().getPage();
if (page != null) {
return page.getActiveEditor();
}
return null;
}
/**
* Returns the editor which contributed the current
* page to this view.
*
* @return the editor which contributed the current page
* or null
if no editor contributed the current page
*/
private IWorkbenchPart getContributingEditor() {
return getCurrentContributingPart();
}
/* (non-Javadoc)
* Method declared on ISelectionProvider.
*/
public ISelection getSelection() {
// get the selection from the selection provider
return getSelectionProvider().getSelection();
}
/* (non-Javadoc)
* Method declared on PageBookView.
* We only want to track editors.
*/
protected boolean isImportant(IWorkbenchPart part) {
//We only care about editors
return (part instanceof IEditorPart);
}
/* (non-Javadoc)
* Method declared on IViewPart.
* Treat this the same as part activation.
*/
public void partBroughtToTop(IWorkbenchPart part) {
partActivated(part);
}
/* (non-Javadoc)
* Method declared on ISelectionProvider.
*/
public void removeSelectionChangedListener(
ISelectionChangedListener listener) {
getSelectionProvider().removeSelectionChangedListener(listener);
}
/* (non-Javadoc)
* Method declared on ISelectionChangedListener.
*/
public void selectionChanged(SelectionChangedEvent event) {
getSelectionProvider().selectionChanged(event);
}
/* (non-Javadoc)
* Method declared on ISelectionProvider.
*/
public void setSelection(ISelection selection) {
getSelectionProvider().setSelection(selection);
}
/**
* The ContentOutline
implementation of this PageBookView
method
* extends the behavior of its parent to use the current page as a selection provider.
*
* @param pageRec the page record containing the page to show
*/
protected void showPageRec(PageRec pageRec) {
IPageSite pageSite = getPageSite(pageRec.page);
ISelectionProvider provider = pageSite.getSelectionProvider();
if (provider == null && (pageRec.page instanceof ILayersViewPage)) {
// This means that the page did not set a provider during its initialization
// so for backward compatibility we will set the page itself as the provider.
pageSite.setSelectionProvider((ILayersViewPage) pageRec.page);
}
super.showPageRec(pageRec);
}
}