| /******************************************************************************* |
| * Copyright (c) 2000, 2017 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 |
| * |
| *******************************************************************************/ |
| package org.eclipse.dltk.internal.ui.editor; |
| |
| import java.util.ArrayList; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.ResourceBundle; |
| |
| import org.eclipse.dltk.core.DLTKCore; |
| import org.eclipse.dltk.internal.ui.editor.selectionaction.GoToNextPreviousMemberAction; |
| import org.eclipse.dltk.ui.actions.DLTKActionConstants; |
| import org.eclipse.dltk.ui.actions.IScriptEditorActionDefinitionIds; |
| import org.eclipse.jface.action.IAction; |
| import org.eclipse.jface.action.IMenuManager; |
| import org.eclipse.jface.action.IStatusLineManager; |
| import org.eclipse.jface.action.MenuManager; |
| import org.eclipse.jface.action.Separator; |
| import org.eclipse.ui.IActionBars; |
| import org.eclipse.ui.IEditorPart; |
| import org.eclipse.ui.IWorkbenchActionConstants; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.actions.ActionGroup; |
| import org.eclipse.ui.actions.RetargetAction; |
| import org.eclipse.ui.texteditor.BasicTextEditorActionContributor; |
| import org.eclipse.ui.texteditor.ITextEditor; |
| import org.eclipse.ui.texteditor.ITextEditorActionConstants; |
| import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds; |
| import org.eclipse.ui.texteditor.RetargetTextEditorAction; |
| |
| /** |
| * Common base class for action contributors for Script editors. |
| */ |
| public class BasicScriptEditorActionContributor extends |
| BasicTextEditorActionContributor { |
| |
| private List fPartListeners = new ArrayList(); |
| |
| private RetargetTextEditorAction fGotoMatchingBracket; |
| private RetargetTextEditorAction fShowOutline; |
| private RetargetTextEditorAction fOpenHierarchy; |
| |
| private RetargetAction fRetargetShowScriptDoc; |
| private RetargetTextEditorAction fShowScriptDoc; |
| |
| private RetargetTextEditorAction fGotoNextMemberAction; |
| private RetargetTextEditorAction fGotoPreviousMemberAction; |
| |
| private RetargetTextEditorAction fRetargetShowInformationAction; |
| |
| public BasicScriptEditorActionContributor() { |
| super(); |
| |
| ResourceBundle b = DLTKEditorMessages.getBundleForConstructedKeys(); |
| |
| fRetargetShowInformationAction = new RetargetTextEditorAction(b, |
| "Editor.ShowInformation."); //$NON-NLS-1$ |
| fRetargetShowInformationAction |
| .setActionDefinitionId(ITextEditorActionDefinitionIds.SHOW_INFORMATION); |
| |
| fRetargetShowScriptDoc = new RetargetAction( |
| DLTKActionConstants.SHOW_DOCUMENTAION, |
| DLTKEditorMessages.ShowScriptDoc_label); |
| fRetargetShowScriptDoc |
| .setActionDefinitionId(IScriptEditorActionDefinitionIds.SHOW_DOCUMENTATION); |
| markAsPartListener(fRetargetShowScriptDoc); |
| fShowScriptDoc = new RetargetTextEditorAction(b, "ShowDocumentation."); //$NON-NLS-1$ |
| fShowScriptDoc |
| .setActionDefinitionId(IScriptEditorActionDefinitionIds.SHOW_DOCUMENTATION); |
| |
| fGotoMatchingBracket = new RetargetTextEditorAction(b, |
| "GotoMatchingBracket."); //$NON-NLS-1$ |
| fGotoMatchingBracket |
| .setActionDefinitionId(IScriptEditorActionDefinitionIds.GOTO_MATCHING_BRACKET); |
| |
| fShowOutline = new RetargetTextEditorAction( |
| DLTKEditorMessages.getBundleForConstructedKeys(), |
| "ShowOutline."); //$NON-NLS-1$ |
| fShowOutline |
| .setActionDefinitionId(IScriptEditorActionDefinitionIds.SHOW_OUTLINE); |
| |
| fOpenHierarchy = new RetargetTextEditorAction( |
| DLTKEditorMessages.getBundleForConstructedKeys(), |
| "OpenHierarchy."); //$NON-NLS-1$ |
| fOpenHierarchy |
| .setActionDefinitionId(IScriptEditorActionDefinitionIds.OPEN_HIERARCHY); |
| |
| fGotoNextMemberAction = new RetargetTextEditorAction(b, |
| "GotoNextMember."); //$NON-NLS-1$ |
| fGotoNextMemberAction |
| .setActionDefinitionId(IScriptEditorActionDefinitionIds.GOTO_NEXT_MEMBER); |
| fGotoPreviousMemberAction = new RetargetTextEditorAction(b, |
| "GotoPreviousMember."); //$NON-NLS-1$ |
| fGotoPreviousMemberAction |
| .setActionDefinitionId(IScriptEditorActionDefinitionIds.GOTO_PREVIOUS_MEMBER); |
| |
| } |
| |
| protected final void markAsPartListener(RetargetAction action) { |
| fPartListeners.add(action); |
| } |
| |
| @Override |
| public void init(IActionBars bars, IWorkbenchPage page) { |
| Iterator e = fPartListeners.iterator(); |
| while (e.hasNext()) |
| page.addPartListener((RetargetAction) e.next()); |
| |
| super.init(bars, page); |
| |
| bars.setGlobalActionHandler(DLTKActionConstants.SHOW_DOCUMENTAION, |
| fShowScriptDoc); |
| } |
| |
| @Override |
| public void contributeToMenu(IMenuManager menu) { |
| super.contributeToMenu(menu); |
| |
| IMenuManager editMenu = menu |
| .findMenuUsingPath(IWorkbenchActionConstants.M_EDIT); |
| if (editMenu != null) { |
| |
| MenuManager structureSelection = new MenuManager( |
| DLTKEditorMessages.ExpandSelectionMenu_label, |
| "expandSelection"); //$NON-NLS-1$ |
| editMenu.insertAfter(ITextEditorActionConstants.SELECT_ALL, |
| structureSelection); |
| |
| editMenu.appendToGroup( |
| ITextEditorActionConstants.GROUP_INFORMATION, |
| fRetargetShowInformationAction); |
| } |
| |
| IMenuManager navigateMenu = menu |
| .findMenuUsingPath(IWorkbenchActionConstants.M_NAVIGATE); |
| if (navigateMenu != null) { |
| try { |
| navigateMenu.appendToGroup(IWorkbenchActionConstants.SHOW_EXT, |
| fShowOutline); |
| navigateMenu.appendToGroup(IWorkbenchActionConstants.SHOW_EXT, |
| fOpenHierarchy); |
| } catch (IllegalArgumentException e) { |
| if (DLTKCore.DEBUG) { |
| e.printStackTrace(); |
| } |
| } |
| } |
| |
| IMenuManager gotoMenu = menu.findMenuUsingPath("navigate/goTo"); //$NON-NLS-1$ |
| if (gotoMenu != null) { |
| gotoMenu.add(new Separator("additions2")); //$NON-NLS-1$ |
| gotoMenu.appendToGroup("additions2", fGotoPreviousMemberAction); //$NON-NLS-1$ |
| gotoMenu.appendToGroup("additions2", fGotoNextMemberAction); //$NON-NLS-1$ |
| gotoMenu.appendToGroup("additions2", fGotoMatchingBracket); //$NON-NLS-1$ |
| } |
| } |
| |
| @Override |
| public void setActiveEditor(IEditorPart part) { |
| |
| super.setActiveEditor(part); |
| |
| ITextEditor textEditor = null; |
| if (part instanceof ITextEditor) |
| textEditor = (ITextEditor) part; |
| |
| fShowOutline.setAction(getAction(textEditor, |
| IScriptEditorActionDefinitionIds.SHOW_OUTLINE)); |
| fOpenHierarchy.setAction(getAction(textEditor, |
| IScriptEditorActionDefinitionIds.OPEN_HIERARCHY)); |
| fGotoMatchingBracket.setAction(getAction(textEditor, |
| GotoMatchingBracketAction.GOTO_MATCHING_BRACKET)); |
| |
| fGotoNextMemberAction.setAction(getAction(textEditor, |
| GoToNextPreviousMemberAction.NEXT_MEMBER)); |
| fGotoPreviousMemberAction.setAction(getAction(textEditor, |
| GoToNextPreviousMemberAction.PREVIOUS_MEMBER)); |
| |
| fRetargetShowInformationAction.setAction(getAction(textEditor, |
| ITextEditorActionConstants.SHOW_INFORMATION)); |
| |
| if (part instanceof ScriptEditor) { |
| ScriptEditor editor = (ScriptEditor) part; |
| editor.getActionGroup().fillActionBars(getActionBars()); |
| final ActionGroup foldingActions = editor.getFoldingActionGroup(); |
| if (foldingActions != null) |
| foldingActions.updateActionBars(); |
| } |
| |
| IActionBars actionBars = getActionBars(); |
| IStatusLineManager manager = actionBars.getStatusLineManager(); |
| manager.setMessage(null); |
| manager.setErrorMessage(null); |
| |
| /** The global actions to be connected with editor actions */ |
| IAction action = getAction(textEditor, ITextEditorActionConstants.NEXT); |
| actionBars.setGlobalActionHandler( |
| ITextEditorActionDefinitionIds.GOTO_NEXT_ANNOTATION, action); |
| actionBars.setGlobalActionHandler(ITextEditorActionConstants.NEXT, |
| action); |
| action = getAction(textEditor, ITextEditorActionConstants.PREVIOUS); |
| actionBars |
| .setGlobalActionHandler( |
| ITextEditorActionDefinitionIds.GOTO_PREVIOUS_ANNOTATION, |
| action); |
| actionBars.setGlobalActionHandler(ITextEditorActionConstants.PREVIOUS, |
| action); |
| } |
| |
| @Override |
| public void dispose() { |
| |
| Iterator e = fPartListeners.iterator(); |
| while (e.hasNext()) |
| getPage().removePartListener((RetargetAction) e.next()); |
| fPartListeners.clear(); |
| |
| setActiveEditor(null); |
| super.dispose(); |
| } |
| } |