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