/************************************************************************************
* Copyright (c) 2008 William Chen. *
* *
* 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 *
* *
* Use is subject to the terms of Eclipse Public License v1.0. *
* *
* Contributors: *
* William Chen - initial API and implementation. *
************************************************************************************/
package org.dyno.visual.swing.editors;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.PlatformObject;
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.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.part.IContributedContentsView;
import org.eclipse.ui.part.IPage;
import org.eclipse.ui.part.IPageBookViewPage;
import org.eclipse.ui.part.MessagePage;
import org.eclipse.ui.part.PageBook;
import org.eclipse.ui.part.PageBookView;
/**
*
* PaletteView
*
* @version 1.0.0, 2008-7-3
* @author William Chen
*/
@SuppressWarnings("unchecked")
public class PaletteView extends PageBookView implements ISelectionProvider,
ISelectionChangedListener {
public static final String ID = "org.dyno.visual.swing.editors.PaletteView";
public PaletteView() {
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("No components available!");
return page;
}
private static Object getAdapter(Object sourceObject, Class adapter, boolean activatePlugins) {
Assert.isNotNull(adapter);
if (sourceObject == null) {
return null;
}
if (adapter.isInstance(sourceObject)) {
return sourceObject;
}
if (sourceObject instanceof IAdaptable) {
IAdaptable adaptable = (IAdaptable) sourceObject;
Object result = adaptable.getAdapter(adapter);
if (result != null) {
// Sanity-check
Assert.isTrue(adapter.isInstance(result));
return result;
}
}
if (!(sourceObject instanceof PlatformObject)) {
Object result;
if (activatePlugins) {
result = Platform.getAdapterManager().loadAdapter(sourceObject, adapter.getName());
} else {
result = Platform.getAdapterManager().getAdapter(sourceObject, adapter);
}
if (result != null) {
return result;
}
}
return null;
}
/* (non-Javadoc)
* Method declared on PageBookView.
*/
protected PageRec doCreatePage(IWorkbenchPart part) {
// Try to get an outline page.
Object obj = getAdapter(part, IPalettePage.class, false);
if (obj instanceof IPalettePage) {
IPalettePage page = (IPalettePage) obj;
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) {
IPage page = (IPage) rec.page;
page.dispose();
rec.dispose();
}
/* (non-Javadoc)
* Method declared on IAdaptable.
*/
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 <code>null</code> 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);
}
}