| /******************************************************************************* |
| * Copyright (c) 2003, 2010 IBM Corporation and others. |
| * 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: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.gef.ui.views.palette; |
| |
| import org.eclipse.swt.widgets.Composite; |
| |
| import org.eclipse.ui.IEditorPart; |
| import org.eclipse.ui.IPerspectiveDescriptor; |
| import org.eclipse.ui.IPerspectiveListener; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.IWorkbenchPart; |
| 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; |
| |
| import org.eclipse.gef.internal.GEFMessages; |
| |
| /** |
| * The GEF palette view |
| * |
| * @author Pratik Shah |
| * @since 3.0 |
| */ |
| public class PaletteView extends PageBookView { |
| |
| private boolean viewInPage = true; |
| |
| /** |
| * The ID for this view. This is the same as the String used to register |
| * this view with the platform's extension point. |
| */ |
| public static final String ID = "org.eclipse.gef.ui.palette_view"; //$NON-NLS-1$ |
| |
| private IPerspectiveListener perspectiveListener = new IPerspectiveListener() { |
| public void perspectiveChanged(IWorkbenchPage page, |
| IPerspectiveDescriptor perspective, String changeId) { |
| } |
| |
| // fix for bug 109245 and 69098 - fake a partActivated when the |
| // perpsective is switched |
| public void perspectiveActivated(IWorkbenchPage page, |
| IPerspectiveDescriptor perspective) { |
| viewInPage = page.findViewReference(ID) != null; |
| // getBootstrapPart could return null; but isImportant() can handle |
| // null |
| partActivated(getBootstrapPart()); |
| } |
| }; |
| |
| /** |
| * Creates a default page saying that a palette is not available. |
| * |
| * @see org.eclipse.ui.part.PageBookView#createDefaultPage(org.eclipse.ui.part.PageBook) |
| */ |
| protected IPage createDefaultPage(PageBook book) { |
| MessagePage page = new MessagePage(); |
| initPage(page); |
| page.createControl(book); |
| page.setMessage(GEFMessages.Palette_Not_Available); |
| return page; |
| } |
| |
| /** |
| * Add a perspective listener so the palette view can be updated when the |
| * perspective is switched. |
| * |
| * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) |
| */ |
| public void createPartControl(Composite parent) { |
| super.createPartControl(parent); |
| getSite().getPage().getWorkbenchWindow() |
| .addPerspectiveListener(perspectiveListener); |
| } |
| |
| /** |
| * Remove the perspective listener. |
| * |
| * @see org.eclipse.ui.IWorkbenchPart#dispose() |
| */ |
| public void dispose() { |
| getSite().getPage().getWorkbenchWindow() |
| .removePerspectiveListener(perspectiveListener); |
| super.dispose(); |
| } |
| |
| /** |
| * @see org.eclipse.ui.part.PageBookView#doCreatePage(org.eclipse.ui.IWorkbenchPart) |
| */ |
| protected PageRec doCreatePage(IWorkbenchPart part) { |
| // Try to get a custom palette page |
| Object obj = part.getAdapter(PalettePage.class); |
| |
| if (obj != null && obj instanceof IPage) { |
| IPage page = (IPage) obj; |
| page.createControl(getPageBook()); |
| initPage((IPageBookViewPage) page); |
| return new PageRec(part, page); |
| } |
| // Use the default page by returning null |
| return null; |
| } |
| |
| /** |
| * @see PageBookView#doDestroyPage(org.eclipse.ui.IWorkbenchPart, |
| * org.eclipse.ui.part.PageBookView.PageRec) |
| */ |
| protected void doDestroyPage(IWorkbenchPart part, PageRec rec) { |
| rec.page.dispose(); |
| } |
| |
| /** |
| * The view shows the palette associated with the active editor. |
| * |
| * @see PageBookView#getBootstrapPart() |
| */ |
| protected IWorkbenchPart getBootstrapPart() { |
| IWorkbenchPage page = getSite().getPage(); |
| if (page != null) |
| return page.getActiveEditor(); |
| return null; |
| } |
| |
| /** |
| * Only editors in the same perspective as the view are important. |
| * |
| * @see PageBookView#isImportant(org.eclipse.ui.IWorkbenchPart) |
| */ |
| protected boolean isImportant(IWorkbenchPart part) { |
| // Workaround for Bug# 69098 -- This should be removed when/if Bug# |
| // 70510 is fixed |
| // We only want a palette page to be created when this view is visible |
| // in the current |
| // perspective, i.e., when both this view and the given editor are on |
| // the same page. |
| return viewInPage && part instanceof IEditorPart; |
| } |
| |
| } |