/******************************************************************************* * Copyright (c) 2004, 2013 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.wst.xml.ui.internal.tabletree; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IEditorActionBarContributor; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.part.MultiPageEditorActionBarContributor; import org.eclipse.ui.part.MultiPageEditorPart; import org.eclipse.ui.texteditor.ITextEditor; import org.eclipse.wst.sse.ui.internal.ExtendedEditorActionBuilder; import org.eclipse.wst.sse.ui.internal.IExtendedContributor; import org.eclipse.wst.sse.ui.internal.ISourceViewerActionBarContributor; public class SourceEditorActionBarContributor extends MultiPageEditorActionBarContributor implements IExtendedContributor { protected IEditorActionBarContributor designViewerActionBarContributor = null; protected IEditorActionBarContributor sourceViewerActionContributor = null; protected MultiPageEditorPart multiPageEditor = null; // EditorExtension private static final String EDITOR_ID = "org.eclipse.wst.xml.ui.XMLMultiPageEditorPart"; //$NON-NLS-1$ private IExtendedContributor extendedContributor; public SourceEditorActionBarContributor() { super(); sourceViewerActionContributor = new SourcePageActionContributor(); // Read action extensions. ExtendedEditorActionBuilder builder = new ExtendedEditorActionBuilder(); extendedContributor = builder.readActionExtensions(EDITOR_ID); } public void init(IActionBars actionBars) { super.init(actionBars); if (actionBars != null) { initDesignViewerActionBarContributor(actionBars); initSourceViewerActionContributor(actionBars); } } protected void initDesignViewerActionBarContributor(IActionBars actionBars) { if (designViewerActionBarContributor != null) { designViewerActionBarContributor.init(actionBars, getPage()); } } protected void initSourceViewerActionContributor(IActionBars actionBars) { if (sourceViewerActionContributor != null) { sourceViewerActionContributor.init(actionBars, getPage()); } } public void dispose() { super.dispose(); if (designViewerActionBarContributor != null) { designViewerActionBarContributor.dispose(); designViewerActionBarContributor = null; } if (sourceViewerActionContributor != null) { sourceViewerActionContributor.dispose(); sourceViewerActionContributor = null; } if (extendedContributor != null) { extendedContributor.dispose(); extendedContributor = null; } multiPageEditor = null; } /** * @see org.eclipse.ui.part.EditorActionBarContributor#contributeToMenu(IMenuManager) */ public final void contributeToMenu(IMenuManager menu) { super.contributeToMenu(menu); //addToMenu(menu); if (extendedContributor != null) { extendedContributor.contributeToMenu(menu); } } protected void addToMenu(IMenuManager menu) { } /** * @see IExtendedContributor#contributeToPopupMenu(IMenuManager) */ public final void contributeToPopupMenu(IMenuManager menu) { addToPopupMenu(menu); if (extendedContributor != null) { extendedContributor.contributeToPopupMenu(menu); } } protected void addToPopupMenu(IMenuManager menu) { } /** * @see org.eclipse.ui.part.EditorActionBarContributor#contributeToToolBar(IToolBarManager) */ public final void contributeToToolBar(IToolBarManager toolBarManager) { super.contributeToToolBar(toolBarManager); addToToolBar(toolBarManager); if (extendedContributor != null) { extendedContributor.contributeToToolBar(toolBarManager); } } protected void addToToolBar(IToolBarManager toolBarManager) { } /** * @see org.eclipse.ui.part.EditorActionBarContributor#contributeToStatusLine(IStatusLineManager) */ public final void contributeToStatusLine(IStatusLineManager manager) { super.contributeToStatusLine(manager); addToStatusLine(manager); if (extendedContributor != null) { extendedContributor.contributeToStatusLine(manager); } } protected void addToStatusLine(IStatusLineManager manager) { } /** * @see IExtendedContributor#updateToolbarActions() */ public void updateToolbarActions() { if (extendedContributor != null) { extendedContributor.updateToolbarActions(); } } public void setActiveEditor(IEditorPart targetEditor) { // save multiPageEditor before calling // super.setActiveEditor(targetEditor) // super.setActiveEditor will call setActivePage(IEditorPart // activeEditor) // multiPageEditor is needed in setActivePage(IEditorPart // activeEditor) if (targetEditor instanceof MultiPageEditorPart) { multiPageEditor = (MultiPageEditorPart) targetEditor; } super.setActiveEditor(targetEditor); updateToolbarActions(); if (extendedContributor != null) { extendedContributor.setActiveEditor(targetEditor); } } public void setActivePage(IEditorPart activeEditor) { // This contributor is designed for StructuredTextMultiPageEditorPart. // To safe-guard this from problems caused by unexpected usage by // other editors, the following // check is added. if (multiPageEditor != null) { if ((activeEditor != null) && (activeEditor instanceof ITextEditor)) { activateSourcePage(activeEditor); } else { activateDesignPage(activeEditor); } } updateToolbarActions(); IActionBars actionBars = getActionBars(); if (actionBars != null) { // update menu bar and tool bar actionBars.updateActionBars(); } } protected void activateDesignPage(IEditorPart activeEditor) { if ((designViewerActionBarContributor != null) && (designViewerActionBarContributor instanceof IDesignViewerActionBarContributor)) { designViewerActionBarContributor.setActiveEditor(multiPageEditor); } if ((sourceViewerActionContributor != null) && (sourceViewerActionContributor instanceof ISourceViewerActionBarContributor)) { // if design page is not really an IEditorPart, activeEditor == // null, so pass in multiPageEditor instead (d282414) if (activeEditor == null) { sourceViewerActionContributor.setActiveEditor(multiPageEditor); } else { sourceViewerActionContributor.setActiveEditor(activeEditor); } ((ISourceViewerActionBarContributor) sourceViewerActionContributor).setViewerSpecificContributionsEnabled(false); } } protected void activateSourcePage(IEditorPart activeEditor) { if ((designViewerActionBarContributor != null) && (designViewerActionBarContributor instanceof IDesignViewerActionBarContributor)) { designViewerActionBarContributor.setActiveEditor(multiPageEditor); } if ((sourceViewerActionContributor != null) && (sourceViewerActionContributor instanceof ISourceViewerActionBarContributor)) { sourceViewerActionContributor.setActiveEditor(activeEditor); ((ISourceViewerActionBarContributor) sourceViewerActionContributor).setViewerSpecificContributionsEnabled(true); } } }