X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.browsing.ui.swt%2Fsrc%2Forg%2Fsimantics%2Fbrowsing%2Fui%2Fswt%2FTabbedPropertyPageViewSite.java;h=a5a3fcd472f750fca4fb337fd22b5ebe4ca40558;hp=4b09b40e3d0b74d5a5724599d68c6a9e24bfad65;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hpb=24e2b34260f219f0d1644ca7a138894980e25b14 diff --git a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/TabbedPropertyPageViewSite.java b/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/TabbedPropertyPageViewSite.java index 4b09b40e3..a5a3fcd47 100644 --- a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/TabbedPropertyPageViewSite.java +++ b/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/TabbedPropertyPageViewSite.java @@ -1,570 +1,570 @@ -/******************************************************************************* - * 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.browsing.ui.swt; - -/******************************************************************************* - * Copyright (c) 2000, 2008 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 - *******************************************************************************/ - -import java.util.ArrayList; - -import org.eclipse.core.runtime.Assert; -import org.eclipse.e4.core.contexts.IEclipseContext; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.viewers.ILabelDecorator; -import org.eclipse.jface.viewers.IPostSelectionProvider; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.ISelectionProvider; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.IActionBars; -import org.eclipse.ui.IEditorActionBarContributor; -import org.eclipse.ui.IKeyBindingService; -import org.eclipse.ui.INestableKeyBindingService; -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.internal.PartSite; -import org.eclipse.ui.internal.PopupMenuExtender; -import org.eclipse.ui.internal.WorkbenchPlugin; -import org.eclipse.ui.internal.services.INestable; -import org.eclipse.ui.internal.services.IServiceLocatorCreator; -import org.eclipse.ui.internal.services.ServiceLocator; -import org.eclipse.ui.part.MultiPageEditorSite; -import org.eclipse.ui.services.IDisposable; -import org.eclipse.ui.services.IServiceLocator; - -/** - * Site for a nested editor within a multi-page editor. Selection is handled by - * forwarding the event to the multi-page editor's selection listeners; most - * other methods are forwarded to the multi-page editor's site. - *

- * The base implementation of MultiPageEditor.createSite creates - * an instance of this class. This class may be instantiated or subclassed. - *

- * - * TODO: copy e4 changes from MultiPageEditorSite to this class as seen fit - */ -@SuppressWarnings({"restriction","deprecation","rawtypes"}) -public class TabbedPropertyPageViewSite implements IViewSite, INestable { - - /** - * The nested editor. - */ - private final IViewPart editor; - - /** - * The list of popup menu extenders; null if none registered. - */ - private ArrayList menuExtenders; - - /** - * The multi-page editor. - */ - private final TabbedPropertyPage multiPageEditor; - - /** - * The post selection changed listener. - */ - private ISelectionChangedListener postSelectionChangedListener = null; - - /** - * The selection change listener, initialized lazily; null if - * not yet created. - */ - private ISelectionChangedListener selectionChangedListener = null; - - /** - * The selection provider; null if none. - * - * @see MultiPageEditorSite#setSelectionProvider(ISelectionProvider) - */ - private ISelectionProvider selectionProvider = null; - - /** - * The cached copy of the key binding service specific to this multi-page - * editor site. This value is null if it is not yet - * initialized. - */ - private IKeyBindingService service = null; - - /** - * The local service locator for this multi-page editor site. This value is - * never null. - */ - private final ServiceLocator serviceLocator; - - private IEclipseContext e4Context; - - /** - * Creates a site for the given editor nested within the given multi-page - * editor. - * - * @param multiPageEditor - * the multi-page editor - * @param editor - * the nested editor - */ - public TabbedPropertyPageViewSite(TabbedPropertyPage multiPageEditor, - IViewPart editor) { - Assert.isNotNull(multiPageEditor); - Assert.isNotNull(editor); - this.multiPageEditor = multiPageEditor; - this.editor = editor; - - final IServiceLocator parentServiceLocator = multiPageEditor.getSite(); - IServiceLocatorCreator slc = (IServiceLocatorCreator) parentServiceLocator - .getService(IServiceLocatorCreator.class); - this.serviceLocator = (ServiceLocator) slc.createServiceLocator( - parentServiceLocator, null, new IDisposable() { - @Override - public void dispose() { -// final Control control = ((PartSite)getMultiPageEditor().getSite()).getPane().getControl(); -// if (control != null && !control.isDisposed()) { -// ((PartSite)getMultiPageEditor().getSite()).getPane().doHide(); -// } - } - }); - e4Context = ((PartSite)editor.getViewSite()).getContext().createChild("TabbedPropertyPageViewSite"); - serviceLocator.setContext(e4Context); - initializeDefaultServices(); - } - - /** - * Initialize the slave services for this site. - */ - private void initializeDefaultServices() { -// serviceLocator.registerService(IMultiPageEditorSiteHolder.class, -// new ITabbedPropertyPageSiteHolder() { -// public TabbedPropertyPageViewSite getSite() { -// return TabbedPropertyPageViewSite.this; -// } -// }); - // Not possible to initialize this service for a view site: -// serviceLocator.registerService(IWorkbenchLocationService.class, -// new WorkbenchLocationService(IServiceScopes.MPESITE_SCOPE, -// getWorkbenchWindow().getWorkbench(), -// getWorkbenchWindow(), getMultiPageEditor().getSite(), -// this, null, 3)); - } - - /** - * Notifies the multi page editor service that the component within which it - * exists has become active. - * - * @since 3.2 - */ - public final void activate() { - e4Context.activate(); - serviceLocator.activate(); - } - - /** - * Notifies the multi page editor service that the component within which it - * exists has been deactived. - * - * @since 3.2 - */ - public final void deactivate() { - serviceLocator.deactivate(); - e4Context.deactivate(); - } - - /** - * Dispose the contributions. - */ - public void dispose() { - if (menuExtenders != null) { - for (int i = 0; i < menuExtenders.size(); i++) { - ((PopupMenuExtender) menuExtenders.get(i)).dispose(); - } - menuExtenders = null; - } - - // Remove myself from the list of nested key binding services. - if (service != null) { - IKeyBindingService parentService = getMultiPageEditor().getSite() - .getKeyBindingService(); - if (parentService instanceof INestableKeyBindingService) { - INestableKeyBindingService nestableParent = (INestableKeyBindingService) parentService; - nestableParent.removeKeyBindingService(this); - } - service = null; - } - - if (serviceLocator != null) { - serviceLocator.dispose(); - } - e4Context.dispose(); - } - - /** - * The MultiPageEditorSite implementation of this - * IEditorSite method returns null, since - * nested editors do not have their own action bar contributor. - * - * @return null - */ - public IEditorActionBarContributor getActionBarContributor() { - return null; - } - - /** - * The MultiPageEditorSite implementation of this - * IEditorSite method forwards to the multi-page editor to - * return the action bars. - * - * @return The action bars from the parent multi-page editor. - */ - public IActionBars getActionBars() { - return ((IViewSite)multiPageEditor.getSite()).getActionBars(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) - */ - public Object getAdapter(Class adapter) { - return null; - } - - /** - * The MultiPageEditorSite implementation of this - * IWorkbenchPartSite method forwards to the multi-page - * editor to return the decorator manager. - * - * @return The decorator from the workbench window. - * @deprecated use IWorkbench.getDecoratorManager() - */ - @Deprecated - public ILabelDecorator getDecoratorManager() { - return getWorkbenchWindow().getWorkbench().getDecoratorManager() - .getLabelDecorator(); - } - -// /** -// * Returns the nested editor. -// * -// * @return the nested editor -// */ -// public IEditorPart getEditor() { -// return editor; -// } - - /** - * The MultiPageEditorSite implementation of this - * IWorkbenchPartSite method returns an empty string since - * the nested editor is not created from the registry. - * - * @return An empty string. - */ - public String getId() { - return ""; //$NON-NLS-1$ - } - - /* - * (non-Javadoc) Method declared on IEditorSite. - */ - public IKeyBindingService getKeyBindingService() { - if (service == null) { - service = getMultiPageEditor().getSite() - .getKeyBindingService(); - if (service instanceof INestableKeyBindingService) { - INestableKeyBindingService nestableService = (INestableKeyBindingService) service; - service = nestableService.getKeyBindingService(this); - - } else { - /* - * This is an internal reference, and should not be copied by - * client code. If you are thinking of copying this, DON'T DO - * IT. - */ - WorkbenchPlugin - .log("MultiPageEditorSite.getKeyBindingService() Parent key binding service was not an instance of INestableKeyBindingService. It was an instance of " + service.getClass().getName() + " instead."); //$NON-NLS-1$ //$NON-NLS-2$ - } - } - return service; - } - - /** - * Returns the multi-page editor. - * - * @return the multi-page editor - */ - public TabbedPropertyPage getMultiPageEditor() { - return multiPageEditor; - } - - /** - * The MultiPageEditorSite implementation of this - * IWorkbenchPartSite method forwards to the multi-page - * editor to return the workbench page. - * - * @return The workbench page in which this editor site resides. - */ - public IWorkbenchPage getPage() { - return getMultiPageEditor().getSite().getPage(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.IWorkbenchPartSite#getPart() - */ - public IWorkbenchPart getPart() { - return editor; - } - - /** - * The MultiPageEditorSite implementation of this - * IWorkbenchPartSite method returns an empty string since - * the nested editor is not created from the registry. - * - * @return An empty string. - */ - public String getPluginId() { - return ""; //$NON-NLS-1$ - } - - /** - * Returns the post selection change listener which listens to the nested - * editor's selection changes. - * - * @return the post selection change listener. - */ - private ISelectionChangedListener getPostSelectionChangedListener() { - if (postSelectionChangedListener == null) { - postSelectionChangedListener = new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - TabbedPropertyPageViewSite.this.handlePostSelectionChanged(event); - } - }; - } - return postSelectionChangedListener; - } - - /** - * The MultiPageEditorSite implementation of this - * IWorkbenchPartSite method returns an empty string since - * the nested editor is not created from the registry. - * - * @return An empty string. - */ - public String getRegisteredName() { - return ""; //$NON-NLS-1$ - } - - /** - * Returns the selection changed listener which listens to the nested - * editor's selection changes, and calls handleSelectionChanged. - * - * @return the selection changed listener - */ - private ISelectionChangedListener getSelectionChangedListener() { - if (selectionChangedListener == null) { - selectionChangedListener = new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - TabbedPropertyPageViewSite.this.handleSelectionChanged(event); - } - }; - } - return selectionChangedListener; - } - - /** - * The MultiPageEditorSite implementation of this - * IWorkbenchPartSite method returns the selection provider - * set by setSelectionProvider. - * - * @return The current selection provider. - */ - public ISelectionProvider getSelectionProvider() { - return selectionProvider; - } - - public final Object getService(final Class key) { - return serviceLocator.getService(key); - } - - /** - * The MultiPageEditorSite implementation of this - * IWorkbenchPartSite method forwards to the multi-page - * editor to return the shell. - * - * @return The shell in which this editor site resides. - */ - public Shell getShell() { - return getMultiPageEditor().getSite().getShell(); - } - - /** - * The MultiPageEditorSite implementation of this - * IWorkbenchPartSite method forwards to the multi-page - * editor to return the workbench window. - * - * @return The workbench window in which this editor site resides. - */ - public IWorkbenchWindow getWorkbenchWindow() { - return getMultiPageEditor().getSite().getWorkbenchWindow(); - } - - /** - * Handles a post selection changed even from the nexted editor. - *

- * Subclasses may extend or reimplement this method - * - * @param event the event - * - * @since 3.2 - */ - protected void handlePostSelectionChanged(SelectionChangedEvent event) { - ISelectionProvider parentProvider = getMultiPageEditor().getSite() - .getSelectionProvider(); - if (parentProvider instanceof TabbedPageSelectionProvider) { - SelectionChangedEvent newEvent = new SelectionChangedEvent( - parentProvider, event.getSelection()); - TabbedPageSelectionProvider prov = (TabbedPageSelectionProvider) parentProvider; - prov.firePostSelectionChanged(newEvent); - } - } - - /** - * Handles a selection changed event from the nested editor. The default - * implementation gets the selection provider from the multi-page editor's - * site, and calls fireSelectionChanged on it (only if it is - * an instance of MultiPageSelectionProvider), passing a new - * event object. - *

- * Subclasses may extend or reimplement this method. - *

- * - * @param event - * the event - */ - protected void handleSelectionChanged(SelectionChangedEvent event) { - ISelectionProvider parentProvider = getMultiPageEditor().getSite() - .getSelectionProvider(); - if (parentProvider instanceof TabbedPageSelectionProvider) { - SelectionChangedEvent newEvent = new SelectionChangedEvent( - parentProvider, event.getSelection()); - TabbedPageSelectionProvider prov = (TabbedPageSelectionProvider) parentProvider; - prov.fireSelectionChanged(newEvent); - } - } - - public final boolean hasService(final Class key) { - return serviceLocator.hasService(key); - } - - /** - * The MultiPageEditorSite implementation of this - * IWorkbenchPartSite method forwards to the multi-page - * editor for registration. - * - * @param menuManager - * The menu manager - * @param selProvider - * The selection provider. - */ - public void registerContextMenu(MenuManager menuManager, - ISelectionProvider selProvider) { - getMultiPageEditor().getSite().registerContextMenu(menuManager, - selProvider); - } - - public final void registerContextMenu(final MenuManager menuManager, - final ISelectionProvider selectionProvider, - final boolean includeEditorInput) { - registerContextMenu(getId(), menuManager, selectionProvider, - includeEditorInput); - } - - /** - * The MultiPageEditorSite implementation of this - * IWorkbenchPartSite method forwards to the multi-page - * editor for registration. - * - * @param menuID - * The identifier for the menu. - * @param menuMgr - * The menu manager - * @param selProvider - * The selection provider. - */ - public void registerContextMenu(String menuID, MenuManager menuMgr, - ISelectionProvider selProvider) { - if (menuExtenders == null) { - menuExtenders = new ArrayList(1); - } - PartSite.registerContextMenu(menuID, menuMgr, selProvider, true, - editor, e4Context, menuExtenders); - } - - public final void registerContextMenu(final String menuId, - final MenuManager menuManager, - final ISelectionProvider selectionProvider, - final boolean includeEditorInput) { - if (menuExtenders == null) { - menuExtenders = new ArrayList(1); - } - PartSite.registerContextMenu(menuId, menuManager, selectionProvider, - includeEditorInput, editor, e4Context, menuExtenders); - } - - /** - * The MultiPageEditorSite implementation of this - * IWorkbenchPartSite method remembers the selection - * provider, and also hooks a listener on it, which calls - * handleSelectionChanged when a selection changed event - * occurs. - * - * @param provider - * The selection provider. - * @see MultiPageEditorSite#handleSelectionChanged(SelectionChangedEvent) - */ - public void setSelectionProvider(ISelectionProvider provider) { - ISelectionProvider oldSelectionProvider = selectionProvider; - selectionProvider = provider; - if (oldSelectionProvider != null) { - oldSelectionProvider - .removeSelectionChangedListener(getSelectionChangedListener()); - if (oldSelectionProvider instanceof IPostSelectionProvider) { - ((IPostSelectionProvider) oldSelectionProvider) - .removePostSelectionChangedListener(getPostSelectionChangedListener()); - } - } - if (selectionProvider != null) { - selectionProvider - .addSelectionChangedListener(getSelectionChangedListener()); - if (selectionProvider instanceof IPostSelectionProvider) { - ((IPostSelectionProvider) selectionProvider) - .addPostSelectionChangedListener(getPostSelectionChangedListener()); - } - } - } - - @Override - public String getSecondaryId() { - return ((IViewSite)multiPageEditor.getSite()).getSecondaryId(); - } - -} +/******************************************************************************* + * 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.browsing.ui.swt; + +/******************************************************************************* + * Copyright (c) 2000, 2008 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 + *******************************************************************************/ + +import java.util.ArrayList; + +import org.eclipse.core.runtime.Assert; +import org.eclipse.e4.core.contexts.IEclipseContext; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.viewers.ILabelDecorator; +import org.eclipse.jface.viewers.IPostSelectionProvider; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IEditorActionBarContributor; +import org.eclipse.ui.IKeyBindingService; +import org.eclipse.ui.INestableKeyBindingService; +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.internal.PartSite; +import org.eclipse.ui.internal.PopupMenuExtender; +import org.eclipse.ui.internal.WorkbenchPlugin; +import org.eclipse.ui.internal.services.INestable; +import org.eclipse.ui.internal.services.IServiceLocatorCreator; +import org.eclipse.ui.internal.services.ServiceLocator; +import org.eclipse.ui.part.MultiPageEditorSite; +import org.eclipse.ui.services.IDisposable; +import org.eclipse.ui.services.IServiceLocator; + +/** + * Site for a nested editor within a multi-page editor. Selection is handled by + * forwarding the event to the multi-page editor's selection listeners; most + * other methods are forwarded to the multi-page editor's site. + *

+ * The base implementation of MultiPageEditor.createSite creates + * an instance of this class. This class may be instantiated or subclassed. + *

+ * + * TODO: copy e4 changes from MultiPageEditorSite to this class as seen fit + */ +@SuppressWarnings({"restriction","deprecation","rawtypes"}) +public class TabbedPropertyPageViewSite implements IViewSite, INestable { + + /** + * The nested editor. + */ + private final IViewPart editor; + + /** + * The list of popup menu extenders; null if none registered. + */ + private ArrayList menuExtenders; + + /** + * The multi-page editor. + */ + private final TabbedPropertyPage multiPageEditor; + + /** + * The post selection changed listener. + */ + private ISelectionChangedListener postSelectionChangedListener = null; + + /** + * The selection change listener, initialized lazily; null if + * not yet created. + */ + private ISelectionChangedListener selectionChangedListener = null; + + /** + * The selection provider; null if none. + * + * @see MultiPageEditorSite#setSelectionProvider(ISelectionProvider) + */ + private ISelectionProvider selectionProvider = null; + + /** + * The cached copy of the key binding service specific to this multi-page + * editor site. This value is null if it is not yet + * initialized. + */ + private IKeyBindingService service = null; + + /** + * The local service locator for this multi-page editor site. This value is + * never null. + */ + private final ServiceLocator serviceLocator; + + private IEclipseContext e4Context; + + /** + * Creates a site for the given editor nested within the given multi-page + * editor. + * + * @param multiPageEditor + * the multi-page editor + * @param editor + * the nested editor + */ + public TabbedPropertyPageViewSite(TabbedPropertyPage multiPageEditor, + IViewPart editor) { + Assert.isNotNull(multiPageEditor); + Assert.isNotNull(editor); + this.multiPageEditor = multiPageEditor; + this.editor = editor; + + final IServiceLocator parentServiceLocator = multiPageEditor.getSite(); + IServiceLocatorCreator slc = (IServiceLocatorCreator) parentServiceLocator + .getService(IServiceLocatorCreator.class); + this.serviceLocator = (ServiceLocator) slc.createServiceLocator( + parentServiceLocator, null, new IDisposable() { + @Override + public void dispose() { +// final Control control = ((PartSite)getMultiPageEditor().getSite()).getPane().getControl(); +// if (control != null && !control.isDisposed()) { +// ((PartSite)getMultiPageEditor().getSite()).getPane().doHide(); +// } + } + }); + e4Context = ((PartSite)editor.getViewSite()).getContext().createChild("TabbedPropertyPageViewSite"); + serviceLocator.setContext(e4Context); + initializeDefaultServices(); + } + + /** + * Initialize the slave services for this site. + */ + private void initializeDefaultServices() { +// serviceLocator.registerService(IMultiPageEditorSiteHolder.class, +// new ITabbedPropertyPageSiteHolder() { +// public TabbedPropertyPageViewSite getSite() { +// return TabbedPropertyPageViewSite.this; +// } +// }); + // Not possible to initialize this service for a view site: +// serviceLocator.registerService(IWorkbenchLocationService.class, +// new WorkbenchLocationService(IServiceScopes.MPESITE_SCOPE, +// getWorkbenchWindow().getWorkbench(), +// getWorkbenchWindow(), getMultiPageEditor().getSite(), +// this, null, 3)); + } + + /** + * Notifies the multi page editor service that the component within which it + * exists has become active. + * + * @since 3.2 + */ + public final void activate() { + e4Context.activate(); + serviceLocator.activate(); + } + + /** + * Notifies the multi page editor service that the component within which it + * exists has been deactived. + * + * @since 3.2 + */ + public final void deactivate() { + serviceLocator.deactivate(); + e4Context.deactivate(); + } + + /** + * Dispose the contributions. + */ + public void dispose() { + if (menuExtenders != null) { + for (int i = 0; i < menuExtenders.size(); i++) { + ((PopupMenuExtender) menuExtenders.get(i)).dispose(); + } + menuExtenders = null; + } + + // Remove myself from the list of nested key binding services. + if (service != null) { + IKeyBindingService parentService = getMultiPageEditor().getSite() + .getKeyBindingService(); + if (parentService instanceof INestableKeyBindingService) { + INestableKeyBindingService nestableParent = (INestableKeyBindingService) parentService; + nestableParent.removeKeyBindingService(this); + } + service = null; + } + + if (serviceLocator != null) { + serviceLocator.dispose(); + } + e4Context.dispose(); + } + + /** + * The MultiPageEditorSite implementation of this + * IEditorSite method returns null, since + * nested editors do not have their own action bar contributor. + * + * @return null + */ + public IEditorActionBarContributor getActionBarContributor() { + return null; + } + + /** + * The MultiPageEditorSite implementation of this + * IEditorSite method forwards to the multi-page editor to + * return the action bars. + * + * @return The action bars from the parent multi-page editor. + */ + public IActionBars getActionBars() { + return ((IViewSite)multiPageEditor.getSite()).getActionBars(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) + */ + public Object getAdapter(Class adapter) { + return null; + } + + /** + * The MultiPageEditorSite implementation of this + * IWorkbenchPartSite method forwards to the multi-page + * editor to return the decorator manager. + * + * @return The decorator from the workbench window. + * @deprecated use IWorkbench.getDecoratorManager() + */ + @Deprecated + public ILabelDecorator getDecoratorManager() { + return getWorkbenchWindow().getWorkbench().getDecoratorManager() + .getLabelDecorator(); + } + +// /** +// * Returns the nested editor. +// * +// * @return the nested editor +// */ +// public IEditorPart getEditor() { +// return editor; +// } + + /** + * The MultiPageEditorSite implementation of this + * IWorkbenchPartSite method returns an empty string since + * the nested editor is not created from the registry. + * + * @return An empty string. + */ + public String getId() { + return ""; //$NON-NLS-1$ + } + + /* + * (non-Javadoc) Method declared on IEditorSite. + */ + public IKeyBindingService getKeyBindingService() { + if (service == null) { + service = getMultiPageEditor().getSite() + .getKeyBindingService(); + if (service instanceof INestableKeyBindingService) { + INestableKeyBindingService nestableService = (INestableKeyBindingService) service; + service = nestableService.getKeyBindingService(this); + + } else { + /* + * This is an internal reference, and should not be copied by + * client code. If you are thinking of copying this, DON'T DO + * IT. + */ + WorkbenchPlugin + .log("MultiPageEditorSite.getKeyBindingService() Parent key binding service was not an instance of INestableKeyBindingService. It was an instance of " + service.getClass().getName() + " instead."); //$NON-NLS-1$ //$NON-NLS-2$ + } + } + return service; + } + + /** + * Returns the multi-page editor. + * + * @return the multi-page editor + */ + public TabbedPropertyPage getMultiPageEditor() { + return multiPageEditor; + } + + /** + * The MultiPageEditorSite implementation of this + * IWorkbenchPartSite method forwards to the multi-page + * editor to return the workbench page. + * + * @return The workbench page in which this editor site resides. + */ + public IWorkbenchPage getPage() { + return getMultiPageEditor().getSite().getPage(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IWorkbenchPartSite#getPart() + */ + public IWorkbenchPart getPart() { + return editor; + } + + /** + * The MultiPageEditorSite implementation of this + * IWorkbenchPartSite method returns an empty string since + * the nested editor is not created from the registry. + * + * @return An empty string. + */ + public String getPluginId() { + return ""; //$NON-NLS-1$ + } + + /** + * Returns the post selection change listener which listens to the nested + * editor's selection changes. + * + * @return the post selection change listener. + */ + private ISelectionChangedListener getPostSelectionChangedListener() { + if (postSelectionChangedListener == null) { + postSelectionChangedListener = new ISelectionChangedListener() { + public void selectionChanged(SelectionChangedEvent event) { + TabbedPropertyPageViewSite.this.handlePostSelectionChanged(event); + } + }; + } + return postSelectionChangedListener; + } + + /** + * The MultiPageEditorSite implementation of this + * IWorkbenchPartSite method returns an empty string since + * the nested editor is not created from the registry. + * + * @return An empty string. + */ + public String getRegisteredName() { + return ""; //$NON-NLS-1$ + } + + /** + * Returns the selection changed listener which listens to the nested + * editor's selection changes, and calls handleSelectionChanged. + * + * @return the selection changed listener + */ + private ISelectionChangedListener getSelectionChangedListener() { + if (selectionChangedListener == null) { + selectionChangedListener = new ISelectionChangedListener() { + public void selectionChanged(SelectionChangedEvent event) { + TabbedPropertyPageViewSite.this.handleSelectionChanged(event); + } + }; + } + return selectionChangedListener; + } + + /** + * The MultiPageEditorSite implementation of this + * IWorkbenchPartSite method returns the selection provider + * set by setSelectionProvider. + * + * @return The current selection provider. + */ + public ISelectionProvider getSelectionProvider() { + return selectionProvider; + } + + public final Object getService(final Class key) { + return serviceLocator.getService(key); + } + + /** + * The MultiPageEditorSite implementation of this + * IWorkbenchPartSite method forwards to the multi-page + * editor to return the shell. + * + * @return The shell in which this editor site resides. + */ + public Shell getShell() { + return getMultiPageEditor().getSite().getShell(); + } + + /** + * The MultiPageEditorSite implementation of this + * IWorkbenchPartSite method forwards to the multi-page + * editor to return the workbench window. + * + * @return The workbench window in which this editor site resides. + */ + public IWorkbenchWindow getWorkbenchWindow() { + return getMultiPageEditor().getSite().getWorkbenchWindow(); + } + + /** + * Handles a post selection changed even from the nexted editor. + *

+ * Subclasses may extend or reimplement this method + * + * @param event the event + * + * @since 3.2 + */ + protected void handlePostSelectionChanged(SelectionChangedEvent event) { + ISelectionProvider parentProvider = getMultiPageEditor().getSite() + .getSelectionProvider(); + if (parentProvider instanceof TabbedPageSelectionProvider) { + SelectionChangedEvent newEvent = new SelectionChangedEvent( + parentProvider, event.getSelection()); + TabbedPageSelectionProvider prov = (TabbedPageSelectionProvider) parentProvider; + prov.firePostSelectionChanged(newEvent); + } + } + + /** + * Handles a selection changed event from the nested editor. The default + * implementation gets the selection provider from the multi-page editor's + * site, and calls fireSelectionChanged on it (only if it is + * an instance of MultiPageSelectionProvider), passing a new + * event object. + *

+ * Subclasses may extend or reimplement this method. + *

+ * + * @param event + * the event + */ + protected void handleSelectionChanged(SelectionChangedEvent event) { + ISelectionProvider parentProvider = getMultiPageEditor().getSite() + .getSelectionProvider(); + if (parentProvider instanceof TabbedPageSelectionProvider) { + SelectionChangedEvent newEvent = new SelectionChangedEvent( + parentProvider, event.getSelection()); + TabbedPageSelectionProvider prov = (TabbedPageSelectionProvider) parentProvider; + prov.fireSelectionChanged(newEvent); + } + } + + public final boolean hasService(final Class key) { + return serviceLocator.hasService(key); + } + + /** + * The MultiPageEditorSite implementation of this + * IWorkbenchPartSite method forwards to the multi-page + * editor for registration. + * + * @param menuManager + * The menu manager + * @param selProvider + * The selection provider. + */ + public void registerContextMenu(MenuManager menuManager, + ISelectionProvider selProvider) { + getMultiPageEditor().getSite().registerContextMenu(menuManager, + selProvider); + } + + public final void registerContextMenu(final MenuManager menuManager, + final ISelectionProvider selectionProvider, + final boolean includeEditorInput) { + registerContextMenu(getId(), menuManager, selectionProvider, + includeEditorInput); + } + + /** + * The MultiPageEditorSite implementation of this + * IWorkbenchPartSite method forwards to the multi-page + * editor for registration. + * + * @param menuID + * The identifier for the menu. + * @param menuMgr + * The menu manager + * @param selProvider + * The selection provider. + */ + public void registerContextMenu(String menuID, MenuManager menuMgr, + ISelectionProvider selProvider) { + if (menuExtenders == null) { + menuExtenders = new ArrayList(1); + } + PartSite.registerContextMenu(menuID, menuMgr, selProvider, true, + editor, e4Context, menuExtenders); + } + + public final void registerContextMenu(final String menuId, + final MenuManager menuManager, + final ISelectionProvider selectionProvider, + final boolean includeEditorInput) { + if (menuExtenders == null) { + menuExtenders = new ArrayList(1); + } + PartSite.registerContextMenu(menuId, menuManager, selectionProvider, + includeEditorInput, editor, e4Context, menuExtenders); + } + + /** + * The MultiPageEditorSite implementation of this + * IWorkbenchPartSite method remembers the selection + * provider, and also hooks a listener on it, which calls + * handleSelectionChanged when a selection changed event + * occurs. + * + * @param provider + * The selection provider. + * @see MultiPageEditorSite#handleSelectionChanged(SelectionChangedEvent) + */ + public void setSelectionProvider(ISelectionProvider provider) { + ISelectionProvider oldSelectionProvider = selectionProvider; + selectionProvider = provider; + if (oldSelectionProvider != null) { + oldSelectionProvider + .removeSelectionChangedListener(getSelectionChangedListener()); + if (oldSelectionProvider instanceof IPostSelectionProvider) { + ((IPostSelectionProvider) oldSelectionProvider) + .removePostSelectionChangedListener(getPostSelectionChangedListener()); + } + } + if (selectionProvider != null) { + selectionProvider + .addSelectionChangedListener(getSelectionChangedListener()); + if (selectionProvider instanceof IPostSelectionProvider) { + ((IPostSelectionProvider) selectionProvider) + .addPostSelectionChangedListener(getPostSelectionChangedListener()); + } + } + } + + @Override + public String getSecondaryId() { + return ((IViewSite)multiPageEditor.getSite()).getSecondaryId(); + } + +}