--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpeclipse.phpeditor;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ResourceBundle;
+
+import net.sourceforge.phpdt.internal.ui.actions.FoldingActionGroup;
+import net.sourceforge.phpdt.ui.IContextMenuConstants;
+import net.sourceforge.phpdt.ui.actions.GotoMatchingBracketAction;
+
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+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.RetargetAction;
+import org.eclipse.ui.texteditor.BasicTextEditorActionContributor;
+import org.eclipse.ui.texteditor.GotoAnnotationAction;
+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 Java editors.
+ */
+public class BasicJavaEditorActionContributor extends
+ BasicTextEditorActionContributor {
+
+ private List fPartListeners = new ArrayList();
+
+ private TogglePresentationAction fTogglePresentation;
+
+ private GotoAnnotationAction fPreviousAnnotation;
+ private GotoAnnotationAction fNextAnnotation;
+
+ private RetargetTextEditorAction fGotoMatchingBracket;
+
+ // private RetargetTextEditorAction fShowOutline;
+ // private RetargetTextEditorAction fOpenStructure;
+ // private RetargetTextEditorAction fOpenHierarchy;
+
+ // private RetargetAction fRetargetShowJavaDoc;
+ // private RetargetTextEditorAction fShowJavaDoc;
+
+ // private RetargetTextEditorAction fStructureSelectEnclosingAction;
+ // private RetargetTextEditorAction fStructureSelectNextAction;
+ // private RetargetTextEditorAction fStructureSelectPreviousAction;
+ // private RetargetTextEditorAction fStructureSelectHistoryAction;
+
+ private RetargetTextEditorAction fGotoNextMemberAction;
+
+ private RetargetTextEditorAction fGotoPreviousMemberAction;
+
+ //
+ // private RetargetTextEditorAction fRemoveOccurrenceAnnotationsAction;
+
+ public BasicJavaEditorActionContributor() {
+ super();
+
+ ResourceBundle b = PHPEditorMessages.getResourceBundle();
+
+ // fRetargetShowJavaDoc= new
+ // RetargetAction(PHPdtActionConstants.SHOW_JAVA_DOC,
+ // PHPEditorMessages.getString("ShowJavaDoc.label")); //$NON-NLS-1$
+ // fRetargetShowJavaDoc.setActionDefinitionId(net.sourceforge.phpdt.ui.actions.PHPEditorActionDefinitionIds.SHOW_JAVADOC);
+ // markAsPartListener(fRetargetShowJavaDoc);
+
+ // actions that are "contributed" to editors, they are considered
+ // belonging to the active editor
+ fTogglePresentation = new TogglePresentationAction();
+
+ fPreviousAnnotation = new GotoAnnotationAction(b,
+ "PreviousAnnotation.", null, false); //$NON-NLS-1$
+ fNextAnnotation = new GotoAnnotationAction(b,
+ "NextAnnotation.", null, true); //$NON-NLS-1$
+
+ fGotoMatchingBracket = new RetargetTextEditorAction(b,
+ "GotoMatchingBracket."); //$NON-NLS-1$
+ fGotoMatchingBracket
+ .setActionDefinitionId(PHPEditorActionDefinitionIds.GOTO_MATCHING_BRACKET);
+
+ // fShowJavaDoc= new RetargetTextEditorAction(b, "ShowJavaDoc.");
+ // //$NON-NLS-1$
+ // fShowJavaDoc.setActionDefinitionId(net.sourceforge.phpdt.ui.actions.PHPEditorActionDefinitionIds.SHOW_JAVADOC);
+
+ // fShowOutline= new
+ // RetargetTextEditorAction(PHPEditorMessages.getResourceBundle(),
+ // "ShowOutline."); //$NON-NLS-1$
+ // fShowOutline.setActionDefinitionId(PHPEditorActionDefinitionIds.SHOW_OUTLINE);
+ //
+ // fOpenHierarchy= new
+ // RetargetTextEditorAction(PHPEditorMessages.getResourceBundle(),
+ // "OpenHierarchy."); //$NON-NLS-1$
+ // fOpenHierarchy.setActionDefinitionId(PHPEditorActionDefinitionIds.OPEN_HIERARCHY);
+ //
+ // fOpenStructure= new
+ // RetargetTextEditorAction(PHPEditorMessages.getResourceBundle(),
+ // "OpenStructure."); //$NON-NLS-1$
+ // fOpenStructure.setActionDefinitionId(PHPEditorActionDefinitionIds.OPEN_STRUCTURE);
+
+ // fStructureSelectEnclosingAction= new RetargetTextEditorAction(b,
+ // "StructureSelectEnclosing."); //$NON-NLS-1$
+ // fStructureSelectEnclosingAction.setActionDefinitionId(PHPEditorActionDefinitionIds.SELECT_ENCLOSING);
+ // fStructureSelectNextAction= new RetargetTextEditorAction(b,
+ // "StructureSelectNext."); //$NON-NLS-1$
+ // fStructureSelectNextAction.setActionDefinitionId(PHPEditorActionDefinitionIds.SELECT_NEXT);
+ // fStructureSelectPreviousAction= new RetargetTextEditorAction(b,
+ // "StructureSelectPrevious."); //$NON-NLS-1$
+ // fStructureSelectPreviousAction.setActionDefinitionId(PHPEditorActionDefinitionIds.SELECT_PREVIOUS);
+ // fStructureSelectHistoryAction= new RetargetTextEditorAction(b,
+ // "StructureSelectHistory."); //$NON-NLS-1$
+ // fStructureSelectHistoryAction.setActionDefinitionId(PHPEditorActionDefinitionIds.SELECT_LAST);
+ //
+ fGotoNextMemberAction = new RetargetTextEditorAction(b,
+ "GotoNextMember."); //$NON-NLS-1$
+ fGotoNextMemberAction
+ .setActionDefinitionId(PHPEditorActionDefinitionIds.GOTO_NEXT_MEMBER);
+ fGotoPreviousMemberAction = new RetargetTextEditorAction(b,
+ "GotoPreviousMember."); //$NON-NLS-1$
+ fGotoPreviousMemberAction
+ .setActionDefinitionId(PHPEditorActionDefinitionIds.GOTO_PREVIOUS_MEMBER);
+ //
+ // fRemoveOccurrenceAnnotationsAction= new RetargetTextEditorAction(b,
+ // "RemoveOccurrenceAnnotations."); //$NON-NLS-1$
+ // fRemoveOccurrenceAnnotationsAction.setActionDefinitionId(PHPEditorActionDefinitionIds.REMOVE_OCCURRENCE_ANNOTATIONS);
+ }
+
+ protected final void markAsPartListener(RetargetAction action) {
+ fPartListeners.add(action);
+ }
+
+ /*
+ * @see IEditorActionBarContributor#init(IActionBars, IWorkbenchPage)
+ */
+ public void init(IActionBars bars, IWorkbenchPage page) {
+ Iterator e = fPartListeners.iterator();
+ while (e.hasNext())
+ page.addPartListener((RetargetAction) e.next());
+
+ super.init(bars, page);
+
+ // register actions that have a dynamic editor.
+ bars.setGlobalActionHandler(ITextEditorActionDefinitionIds.GOTO_NEXT_ANNOTATION, fNextAnnotation);
+ bars.setGlobalActionHandler(ITextEditorActionDefinitionIds.GOTO_PREVIOUS_ANNOTATION, fPreviousAnnotation);
+ bars.setGlobalActionHandler(ITextEditorActionConstants.NEXT, fNextAnnotation);
+ bars.setGlobalActionHandler(ITextEditorActionConstants.PREVIOUS, fPreviousAnnotation);
+ bars
+ .setGlobalActionHandler(
+ ITextEditorActionDefinitionIds.TOGGLE_SHOW_SELECTED_ELEMENT_ONLY,
+ fTogglePresentation);
+
+ // bars.setGlobalActionHandler(PHPdtActionConstants.SHOW_JAVA_DOC,
+ // fShowJavaDoc);
+ }
+
+ /*
+ * @see org.eclipse.ui.part.EditorActionBarContributor#contributeToMenu(org.eclipse.jface.action.IMenuManager)
+ */
+ public void contributeToMenu(IMenuManager menu) {
+
+ super.contributeToMenu(menu);
+
+ IMenuManager editMenu = menu
+ .findMenuUsingPath(IWorkbenchActionConstants.M_EDIT);
+ if (editMenu != null) {
+
+ editMenu.add(new Separator(IContextMenuConstants.GROUP_OPEN));
+ editMenu.add(new Separator(IContextMenuConstants.GROUP_GENERATE));
+ editMenu.add(new Separator(IContextMenuConstants.GROUP_ADDITIONS));
+
+ // MenuManager structureSelection= new
+ // MenuManager(PHPEditorMessages.getString("ExpandSelectionMenu.label"),
+ // "expandSelection"); //$NON-NLS-1$ //$NON-NLS-2$
+ // structureSelection.add(fStructureSelectEnclosingAction);
+ // structureSelection.add(fStructureSelectNextAction);
+ // structureSelection.add(fStructureSelectPreviousAction);
+ // structureSelection.add(fStructureSelectHistoryAction);
+ // editMenu.appendToGroup(IContextMenuConstants.GROUP_OPEN,
+ // structureSelection);
+
+ // editMenu.appendToGroup(IContextMenuConstants.GROUP_GENERATE,
+ // fRetargetShowJavaDoc);
+ }
+
+ // IMenuManager navigateMenu=
+ // menu.findMenuUsingPath(IWorkbenchActionConstants.M_NAVIGATE);
+ // if (navigateMenu != null) {
+ // navigateMenu.appendToGroup(IWorkbenchActionConstants.SHOW_EXT,
+ // fShowOutline);
+ // navigateMenu.appendToGroup(IWorkbenchActionConstants.SHOW_EXT,
+ // fOpenHierarchy);
+ // }
+
+ 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$
+ }
+ }
+
+ /*
+ * @see EditorActionBarContributor#setActiveEditor(IEditorPart)
+ */
+ public void setActiveEditor(IEditorPart part) {
+
+ super.setActiveEditor(part);
+
+ IActionBars actionBars = getActionBars();
+ IStatusLineManager manager = actionBars.getStatusLineManager();
+ manager.setMessage(null);
+ manager.setErrorMessage(null);
+
+ ITextEditor textEditor = null;
+ if (part instanceof ITextEditor)
+ textEditor = (ITextEditor) part;
+
+ fTogglePresentation.setEditor(textEditor);
+ fPreviousAnnotation.setEditor(textEditor);
+ fNextAnnotation.setEditor(textEditor);
+
+ fGotoMatchingBracket.setAction(getAction(textEditor,
+ GotoMatchingBracketAction.GOTO_MATCHING_BRACKET));
+ // fShowJavaDoc.setAction(getAction(textEditor, "ShowJavaDoc"));
+ // //$NON-NLS-1$
+ // fShowOutline.setAction(getAction(textEditor,
+ // IJavaEditorActionDefinitionIds.SHOW_OUTLINE));
+ // fOpenHierarchy.setAction(getAction(textEditor,
+ // IJavaEditorActionDefinitionIds.OPEN_HIERARCHY));
+ // fOpenStructure.setAction(getAction(textEditor,
+ // IJavaEditorActionDefinitionIds.OPEN_STRUCTURE));
+
+ // fStructureSelectEnclosingAction.setAction(getAction(textEditor,
+ // StructureSelectionAction.ENCLOSING));
+ // fStructureSelectNextAction.setAction(getAction(textEditor,
+ // StructureSelectionAction.NEXT));
+ // fStructureSelectPreviousAction.setAction(getAction(textEditor,
+ // StructureSelectionAction.PREVIOUS));
+ // fStructureSelectHistoryAction.setAction(getAction(textEditor,
+ // StructureSelectionAction.HISTORY));
+
+ // fGotoNextMemberAction.setAction(getAction(textEditor,
+ // GoToNextPreviousMemberAction.NEXT_MEMBER));
+ // fGotoPreviousMemberAction.setAction(getAction(textEditor,
+ // GoToNextPreviousMemberAction.PREVIOUS_MEMBER));
+
+ // fRemoveOccurrenceAnnotationsAction.setAction(getAction(textEditor,
+ // "RemoveOccurrenceAnnotations")); //$NON-NLS-1$
+ if (part instanceof PHPEditor) {
+ PHPEditor javaEditor = (PHPEditor) part;
+ javaEditor.getActionGroup().fillActionBars(getActionBars());
+ FoldingActionGroup foldingActions = javaEditor
+ .getFoldingActionGroup();
+ if (foldingActions != null)
+ foldingActions.updateActionBars();
+ }
+ }
+
+ /*
+ * @see IEditorActionBarContributor#dispose()
+ */
+ public void dispose() {
+
+ Iterator e = fPartListeners.iterator();
+ while (e.hasNext())
+ getPage().removePartListener((RetargetAction) e.next());
+ fPartListeners.clear();
+
+ setActiveEditor(null);
+ super.dispose();
+ }
+}