/***************************************************************************** * Copyright (c) 2010 LIFL & CEA LIST. * * * 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: * Cedric Dumoulin (LIFL) cedric.dumoulin@lifl.fr - Initial API and implementation * *****************************************************************************/ package org.eclipse.papyrus.views.modelexplorer.core.ui.pagebookview; import org.eclipse.core.runtime.CoreException; import org.eclipse.papyrus.infra.core.editor.IMultiDiagramEditor; import org.eclipse.papyrus.views.modelexplorer.Activator; import org.eclipse.ui.IMemento; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IViewSite; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.IPage; import org.eclipse.ui.part.IPageBookViewPage; import org.eclipse.ui.part.PageBook; import org.eclipse.ui.part.PageBookView; /** * Base class for PageBookView in Papyrus. * The PageBook mechanism can be moved in the core, as it can be reused by other Views. * * @author cedric dumoulin * */ public abstract class MultiViewPageBookView extends PageBookView { /** * Remember the IMemento */ private IMemento memento; /** * @see org.eclipse.ui.part.PageBookView#createDefaultPage(org.eclipse.ui.part.PageBook) * * @param book * @return */ @Override protected IPageBookViewPage createDefaultPage(PageBook book) { IPageBookViewPage page = new DefaultPage(); // Set Site initPage(page); page.createControl(book); return page; } /** * Subclass must implement this method. * The subclass implementation look like this: * <ul> * <li>ViewPartPage page = new MyPage();</li> * <li>call initPage(page, part);</li> * <li>call page.createControl(getPageBook());</li> * <li>return new PageRec(part, page);</li> * </ul> * * @param part * @return */ @Override abstract protected PageRec doCreatePage(IWorkbenchPart part); /** * @see org.eclipse.ui.part.PageBookView#doDestroyPage(org.eclipse.ui.IWorkbenchPart, org.eclipse.ui.part.PageBookView.PageRec) * * @param part * @param pageRecord */ @Override protected void doDestroyPage(IWorkbenchPart part, PageRec pageRecord) { // Dispose the associated page. pageRecord.page.dispose(); } /** * Check if the currently active part is a {@link IMultiDiagramEditor}. * If true, return it. * * @see org.eclipse.ui.part.PageBookView#getBootstrapPart() * * @return The currently active editor if it is a IMultiDiagramEditor, null otherwise. */ @Override protected IWorkbenchPart getBootstrapPart() { IWorkbenchPart part = null; try { IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if(activeWorkbenchWindow != null) { IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage(); if(activePage != null) { part = activePage.getActiveEditor(); } } } catch (NullPointerException e) { // An element is not active yet return null; } if(isImportant(part)) { return part; } // The current active part is not for us. return null; } /** * return true if the activated part is a {@link IMultiDiagramEditor}. * * @see org.eclipse.ui.part.PageBookView#isImportant(org.eclipse.ui.IWorkbenchPart) * * @param part * @return */ @Override protected boolean isImportant(IWorkbenchPart part) { if(part instanceof IMultiDiagramEditor) return true; return false; } /** * Record the IMemento to use it when pages are created * * @see org.eclipse.ui.part.ViewPart#init(org.eclipse.ui.IViewSite, org.eclipse.ui.IMemento) * * @param site * @param memento * @throws PartInitException */ @Override public void init(IViewSite site, IMemento memento) throws PartInitException { super.init(site, memento); this.memento = memento; } /** * Create a Site that is also a {@link IViewSite}. * * @see org.eclipse.ui.part.PageBookView#initPage(org.eclipse.ui.part.IPageBookViewPage) * * @param page */ protected void initPage(ViewPartPage page, IWorkbenchPart part) { try { page.init(part, new ViewPageSite(getViewSite()), memento, getConfigurationElement()); } catch (PartInitException e) { Activator.log.error("initPage", e); //$NON-NLS-1$ } catch (CoreException e) { Activator.log.error("initPage", e); //$NON-NLS-1$ } } /** * Get the currently nested active view. * * @return The active Viewer, or null if none. */ public IViewPart getActiveView() { IPage page = getCurrentPage(); if(page instanceof ViewPartPage) return ((ViewPartPage)page).getViewer(); // not found return null; } }