X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPActionContributor.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPActionContributor.java index 1fbefe5..d4f26f2 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPActionContributor.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPActionContributor.java @@ -1,97 +1,290 @@ package net.sourceforge.phpeclipse.phpeditor; - -/********************************************************************** -Copyright (c) 2000, 2002 IBM Corp. 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 implementation - Klaus Hartlage - www.eclipseproject.de -**********************************************************************/ - +/******************************************************************************* + * Copyright (c) 2000, 2002 IBM Corp. 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 implementation Klaus Hartlage - + * www.eclipseproject.de + ******************************************************************************/ +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; import java.util.ResourceBundle; +import net.sourceforge.phpdt.ui.IContextMenuConstants; +import net.sourceforge.phpdt.ui.actions.GotoMatchingBracketAction; +import net.sourceforge.phpdt.ui.actions.PHPdtActionConstants; +import net.sourceforge.phpeclipse.PHPeclipsePlugin; +import org.eclipse.core.resources.IFile; +import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.Separator; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.swt.SWT; import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.IWorkbenchActionConstants; -import org.eclipse.ui.editors.text.TextEditorActionContributor; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.actions.RetargetAction; +import org.eclipse.ui.editors.text.EncodingActionGroup; +import org.eclipse.ui.texteditor.AbstractTextEditor; import org.eclipse.ui.texteditor.BasicTextEditorActionContributor; import org.eclipse.ui.texteditor.ITextEditor; +import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds; import org.eclipse.ui.texteditor.RetargetTextEditorAction; -import org.eclipse.ui.texteditor.TextEditorAction; - /** - * Contributes interesting Java actions to the desktop's Edit menu and the toolbar. + * Contributes interesting PHP actions to the desktop's Edit menu and the + * toolbar. */ -public class PHPActionContributor extends TextEditorActionContributor { - - protected RetargetTextEditorAction fContentAssistProposal; - protected RetargetTextEditorAction fContentAssistTip; - protected TextEditorAction fTogglePresentation; - - /** - * Default constructor. - */ - public PHPActionContributor() { - super(); - fContentAssistProposal= new RetargetTextEditorAction(PHPEditorMessages.getResourceBundle(), "ContentAssistProposal."); //$NON-NLS-1$ - fContentAssistTip= new RetargetTextEditorAction(PHPEditorMessages.getResourceBundle(), "ContentAssistTip."); //$NON-NLS-1$ - fTogglePresentation= new PresentationAction(); - } - - /* - * @see IEditorActionBarContributor#init(IActionBars) - */ - public void init(IActionBars bars) { - super.init(bars); - - IMenuManager menuManager= bars.getMenuManager(); - IMenuManager editMenu= menuManager.findMenuUsingPath(IWorkbenchActionConstants.M_EDIT); - if (editMenu != null) { - editMenu.add(new Separator()); - editMenu.add(fContentAssistProposal); - editMenu.add(fContentAssistTip); - } - - IToolBarManager toolBarManager= bars.getToolBarManager(); - if (toolBarManager != null) { - toolBarManager.add(new Separator()); - toolBarManager.add(fTogglePresentation); - } - } - - private void doSetActiveEditor(IEditorPart part) { - super.setActiveEditor(part); - - ITextEditor editor= null; - if (part instanceof ITextEditor) - editor= (ITextEditor) part; - - fContentAssistProposal.setAction(getAction(editor, "ContentAssistProposal")); //$NON-NLS-1$ - fContentAssistTip.setAction(getAction(editor, "ContentAssistTip")); //$NON-NLS-1$ - - fTogglePresentation.setEditor(editor); - fTogglePresentation.update(); - } - - /* - * @see IEditorActionBarContributor#setActiveEditor(IEditorPart) - */ - public void setActiveEditor(IEditorPart part) { - super.setActiveEditor(part); - doSetActiveEditor(part); - } - - /* - * @see IEditorActionBarContributor#dispose() - */ - public void dispose() { - doSetActiveEditor(null); - super.dispose(); - } +public class PHPActionContributor extends BasicTextEditorActionContributor { + protected RetargetTextEditorAction fContentAssistTip; + // protected TextEditorAction fTogglePresentation; + protected RetargetAction fRetargetContentAssist; + protected RetargetTextEditorAction fContentAssist; + private RetargetTextEditorAction fGotoMatchingBracket; + private List fRetargetToolbarActions = new ArrayList(); + private List fPartListeners = new ArrayList(); + protected PHPParserAction fParserAction; + protected ShowExternalPreviewAction fShowExternalPreviewAction; + private EncodingActionGroup fEncodingActionGroup; + /** + * Default constructor. + */ + public PHPActionContributor() { + super(); + ResourceBundle b = PHPEditorMessages.getResourceBundle(); + fRetargetContentAssist = new RetargetAction( + PHPdtActionConstants.CONTENT_ASSIST, PHPEditorMessages + .getString("ContentAssistProposal.label")); //$NON-NLS-1$ + fRetargetContentAssist + .setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS); + markAsPartListener(fRetargetContentAssist); + fContentAssist = new RetargetTextEditorAction(b, "ContentAssistProposal."); //$NON-NLS-1$ + fContentAssist + .setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS); + fGotoMatchingBracket = new RetargetTextEditorAction(b, + "GotoMatchingBracket."); //$NON-NLS-1$ + fGotoMatchingBracket + .setActionDefinitionId(PHPEditorActionDefinitionIds.GOTO_MATCHING_BRACKET); + // fContentAssist.setImageDescriptor(JavaPluginImages.DESC_CLCL_CODE_ASSIST); + // fContentAssist.setDisabledImageDescriptor(JavaPluginImages.DESC_DLCL_CODE_ASSIST); + // fContentAssist = new + // RetargetTextEditorAction(PHPEditorMessages.getResourceBundle(), + // "ContentAssistProposal."); //$NON-NLS-1$ + fContentAssistTip = new RetargetTextEditorAction(PHPEditorMessages + .getResourceBundle(), "ContentAssistTip."); //$NON-NLS-1$ + // fTogglePresentation = new PresentationAction(); + // character encoding + fEncodingActionGroup = new EncodingActionGroup(); + fParserAction = PHPParserAction.getInstance(); + if (SWT.getPlatform().equals("win32")) { + // ExternalPreview only available as ActiveX on win32 (Eclipse2.1) + fShowExternalPreviewAction = ShowExternalPreviewAction.getInstance(); + } + } + protected final void markAsPartListener(RetargetAction action) { + fPartListeners.add(action); + } + /* + * @see EditorActionBarContributor#contributeToMenu(IMenuManager) + */ + // public void contributeToMenu(IMenuManager menu) { + // super.contributeToMenu(menu); + // IMenuManager editMenu= + // menu.findMenuUsingPath(IWorkbenchActionConstants.M_EDIT); + // if (editMenu != null) { + // MenuManager structureSelection= new + // MenuManager(JavaEditorMessages.getString("ExpandSelectionMenu.label")); + // //$NON-NLS-1$ + // structureSelection.add(fStructureSelectEnclosingAction); + // structureSelection.add(fStructureSelectNextAction); + // structureSelection.add(fStructureSelectPreviousAction); + // structureSelection.add(fStructureSelectHistoryAction); + // editMenu.appendToGroup(IContextMenuConstants.GROUP_OPEN, + // structureSelection); + // editMenu.appendToGroup(IContextMenuConstants.GROUP_OPEN, + // fGotoPreviousMemberAction); + // editMenu.appendToGroup(IContextMenuConstants.GROUP_OPEN, + // fGotoNextMemberAction); + // editMenu.appendToGroup(IContextMenuConstants.GROUP_OPEN, + // fGotoMatchingBracket); + // editMenu.appendToGroup(IContextMenuConstants.GROUP_GENERATE, + // fShowOutline); + // } + // } + /* + * @see EditorActionBarContributor#contributeToMenu(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.appendToGroup(IContextMenuConstants.GROUP_GENERATE, + // fRetargetContentAssist); + // } + // } + /* + * @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)); + // editMenu.appendToGroup( + // IContextMenuConstants.GROUP_GENERATE, + // fRetargetContentAssist); + // MenuManager structureSelection= new + // MenuManager(JavaEditorMessages.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); + // } + 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#contributeToToolBar(IToolBarManager) + */ + public void contributeToToolBar(IToolBarManager tbm) { + tbm.add(new Separator()); + Iterator e = fRetargetToolbarActions.iterator(); + while (e.hasNext()) + tbm.add((IAction) e.next()); + } + /* + * @see IEditorActionBarContributor#init(IActionBars, IWorkbenchPage) + */ + public void init(IActionBars bars, IWorkbenchPage page) { + Iterator e = fPartListeners.iterator(); + while (e.hasNext()) + page.addPartListener((RetargetAction) e.next()); + // character encoding + fEncodingActionGroup.fillActionBars(bars); + super.init(bars, page); + } + /* + * @see IEditorActionBarContributor#init(IActionBars) + */ + public void init(IActionBars bars) { + super.init(bars); + IMenuManager menuManager = bars.getMenuManager(); + IMenuManager editMenu = menuManager + .findMenuUsingPath(IWorkbenchActionConstants.M_EDIT); + if (editMenu != null) { + editMenu.add(new Separator()); + editMenu.add(fContentAssist); + // editMenu.add(fGotoMatchingBracket); + // editMenu.add(fContentAssistTip); + } + bars.setGlobalActionHandler(PHPdtActionConstants.CONTENT_ASSIST, + fContentAssist); + // IToolBarManager toolBarManager = bars.getToolBarManager(); + // if (toolBarManager != null) { + // toolBarManager.add(new Separator()); + // toolBarManager.add(fTogglePresentation); + // } + } + /* + * @see IEditorActionBarContributor#setActiveEditor(IEditorPart) + */ + public void setActiveEditor(IEditorPart part) { + super.setActiveEditor(part); + IActionBars bars = getActionBars(); + IStatusLineManager manager = bars.getStatusLineManager(); + manager.setMessage(null); + manager.setErrorMessage(null); + ITextEditor textEditor = null; + if (part instanceof ITextEditor) + textEditor = (ITextEditor) part; + fContentAssist.setAction(getAction(textEditor, "ContentAssistProposal")); //$NON-NLS-1$ + fContentAssistTip.setAction(getAction(textEditor, "ContentAssistTip")); //$NON-NLS-1$ + fGotoMatchingBracket.setAction(getAction(textEditor, + GotoMatchingBracketAction.GOTO_MATCHING_BRACKET)); + bars.setGlobalActionHandler(PHPdtActionConstants.SHIFT_RIGHT, getAction( + textEditor, "ShiftRight")); //$NON-NLS-1$ + bars.setGlobalActionHandler(PHPdtActionConstants.SHIFT_LEFT, getAction( + textEditor, "ShiftLeft")); //$NON-NLS-1$ + // character encoding + fEncodingActionGroup.retarget(textEditor); + bars.setGlobalActionHandler(PHPdtActionConstants.COMMENT, getAction( + textEditor, "Comment")); + bars.setGlobalActionHandler(PHPdtActionConstants.UNCOMMENT, getAction( + textEditor, "Uncomment")); + bars.setGlobalActionHandler(PHPdtActionConstants.FORMAT, getAction( + textEditor, "Format")); + if (part instanceof PHPEditor) { + PHPEditor phpEditor = (PHPEditor) part; + phpEditor.getActionGroup().fillActionBars(getActionBars()); + } + // if (part instanceof PHPEditor) { + // PHPEditor cuEditor = (PHPEditor) part; + // ActionGroup group = cuEditor.getActionGroup(); + // if (group != null) + // group.fillActionBars(bars); + // } + // fTogglePresentation.setEditor(editor); + // fTogglePresentation.update(); + if (textEditor != null) { + IFile file = null; + IEditorInput editorInput = textEditor.getEditorInput(); + if (editorInput instanceof IFileEditorInput) { + file = ((IFileEditorInput) editorInput).getFile(); + } + PHPeclipsePlugin.getDefault().setLastEditorFile(file); + fParserAction.setEditor(textEditor); + fParserAction.update(); + if (textEditor instanceof AbstractTextEditor) { + fShowExternalPreviewAction.setEditor(textEditor); + fShowExternalPreviewAction.update(); + IAction a = ShowExternalPreviewAction.getInstance(); + if (a != null) + a.run(); + } + } + } + /* + * @see IEditorActionBarContributor#dispose() + */ + public void dispose() { + Iterator e = fPartListeners.iterator(); + while (e.hasNext()) + getPage().removePartListener((RetargetAction) e.next()); + fPartListeners.clear(); + setActiveEditor(null); + super.dispose(); + } }