diff --git a/core/org.eclipse.cdt.ui/plugin.properties b/core/org.eclipse.cdt.ui/plugin.properties index d67fb7af42d..281f167f3fb 100644 --- a/core/org.eclipse.cdt.ui/plugin.properties +++ b/core/org.eclipse.cdt.ui/plugin.properties @@ -196,10 +196,10 @@ CEditorFontDefinition.description = The C/C++ editor text font is used by C/C++ BuildConsoleFontDefinition.description= The C-Build console font is used by the C-Build console BuildConsoleFontDefinition.label= C-Build Console Text Font -ActionDefinition.GotoNextMember.name = Go to next C/C++ member -ActionDefinition.GotoNextMember.description = Goes to the next C/C++ member -ActionDefinition.GotoPrevMember.name = Go to previous C/C++ member -ActionDefinition.GotoPrevMember.description = Goes to the previous C/C++ member +ActionDefinition.GotoNextMember.name = Go to Next Member +ActionDefinition.GotoNextMember.description = Move the caret to the next member of the translation unit +ActionDefinition.GotoPrevMember.name = Go to Previous Member +ActionDefinition.GotoPrevMember.description = Move the caret to the previous member of the translation unit ########################################################################## # Filter Support diff --git a/core/org.eclipse.cdt.ui/plugin.xml b/core/org.eclipse.cdt.ui/plugin.xml index fca961a1d76..029e98938fc 100644 --- a/core/org.eclipse.cdt.ui/plugin.xml +++ b/core/org.eclipse.cdt.ui/plugin.xml @@ -215,6 +215,8 @@ + + diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/IContextMenuConstants.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/IContextMenuConstants.java index eab7bb9ae00..4c9b789121b 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/IContextMenuConstants.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/IContextMenuConstants.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005 IBM Corporation and others. + * Copyright (c) 2006 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 @@ -8,11 +8,13 @@ * Contributors: * IBM Corporation - initial API and implementation * QNX Software System + * Anton Leherbauer (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.ui; +import org.eclipse.ui.navigator.ICommonMenuConstants; + import org.eclipse.cdt.ui.CUIPlugin; -import org.eclipse.ui.IWorkbenchActionConstants; /** * Constants for menu groups used in context menus for C views and editors. @@ -39,7 +41,7 @@ public interface IContextMenuConstants { public static final String TARGET_ID_SUBTYPES_VIEW= CUIPlugin.ID_TYPE_HIERARCHY + ".subtypes"; //$NON-NLS-1$ /** - * Type hierarchy view part: pop-up menu target ID for the meber viewer + * Type hierarchy view part: pop-up menu target ID for the member viewer * (value "org.eclipse.cdt.ui.TypeHierarchy.members"). * * @since 2.0 @@ -47,7 +49,7 @@ public interface IContextMenuConstants { public static final String TARGET_ID_MEMBERS_VIEW= CUIPlugin.ID_TYPE_HIERARCHY + ".members"; //$NON-NLS-1$ /** - * Pop-up menu: name of group for goto actions (value "group.open"). + * Pop-up menu: name of group for goto actions (value "group.goto"). *

* Examples for open actions are: *

    @@ -56,7 +58,7 @@ public interface IContextMenuConstants { *
*

*/ - public static final String GROUP_GOTO= "group.goto"; //$NON-NLS-1$ + public static final String GROUP_GOTO= ICommonMenuConstants.GROUP_GOTO; /** * Pop-up menu: name of group for open actions (value "group.open"). *

@@ -67,7 +69,7 @@ public interface IContextMenuConstants { * *

*/ - public static final String GROUP_OPEN= "group.open"; //$NON-NLS-1$ + public static final String GROUP_OPEN= ICommonMenuConstants.GROUP_OPEN; /** * Pop-up menu: name of group for show actions (value "group.show"). @@ -79,7 +81,7 @@ public interface IContextMenuConstants { * *

*/ - public static final String GROUP_SHOW= "group.show"; //$NON-NLS-1$ + public static final String GROUP_SHOW= ICommonMenuConstants.GROUP_SHOW; /** * Pop-up menu: name of group for new actions (value "group.new"). @@ -91,42 +93,42 @@ public interface IContextMenuConstants { * *

*/ - public static final String GROUP_NEW= "group.new"; //$NON-NLS-1$ + public static final String GROUP_NEW= ICommonMenuConstants.GROUP_NEW; /** * Pop-up menu: name of group for build actions (value "group.build"). */ - public static final String GROUP_BUILD= "group.build"; //$NON-NLS-1$ + public static final String GROUP_BUILD= ICommonMenuConstants.GROUP_BUILD; /** * Pop-up menu: name of group for reorganize actions (value "group.reorganize"). */ - public static final String GROUP_REORGANIZE= IWorkbenchActionConstants.GROUP_REORGANIZE; + public static final String GROUP_REORGANIZE= ICommonMenuConstants.GROUP_REORGANIZE; /** * Pop-up menu: name of group for code generation or refactoring actions ( * value "group.generate"). */ - public static final String GROUP_GENERATE= "group.generate"; //$NON-NLS-1$ + public static final String GROUP_GENERATE= ICommonMenuConstants.GROUP_GENERATE; /** * Pop-up menu: name of group for search actions (value "group.search"). */ - public static final String GROUP_SEARCH= "group.search"; //$NON-NLS-1$ + public static final String GROUP_SEARCH= ICommonMenuConstants.GROUP_SEARCH; /** * Pop-up menu: name of group for additional actions (value "group.additions"). */ - public static final String GROUP_ADDITIONS= "additions"; //$NON-NLS-1$ + public static final String GROUP_ADDITIONS= ICommonMenuConstants.GROUP_ADDITIONS; /** * Pop-up menu: name of group for viewer setup actions (value "group.viewerSetup"). */ - public static final String GROUP_VIEWER_SETUP= "group.viewerSetup"; //$NON-NLS-1$ + public static final String GROUP_VIEWER_SETUP= ICommonMenuConstants.GROUP_VIEWER_SETUP; /** * Pop-up menu: name of group for properties actions (value "group.properties"). */ - public static final String GROUP_PROPERTIES= "group.properties"; //$NON-NLS-1$ + public static final String GROUP_PROPERTIES= ICommonMenuConstants.GROUP_PROPERTIES; } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/ActionMessages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/ActionMessages.properties index 9ff1886e163..35ef4c70c4c 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/ActionMessages.properties +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/ActionMessages.properties @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000, 2005 IBM Corporation and others. +# Copyright (c) 2000, 2006 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 @@ -13,6 +13,7 @@ OpenWithMenu.label=Open Wit&h RefactorMenu.label=Refac&tor SourceMenu.label=&Source NavigateMenu.label=&Navigate +SourceMenu_label=Source BuildAction.label=&Build Project RebuildAction.label=Rebuild Pro&ject @@ -50,135 +51,6 @@ OpenTypeHierarchyAction.messages.no_c_resources=Selected package fragment doesn\ OpenTypeHierarchyAction.messages.no_types=Selected translation unit doesn\'t contain a type. OpenTypeHierarchyAction.messages.no_valid_c_element=No valid C element selected. -ShowInPackageViewAction.label=Show in Pac&kage Explorer -ShowInPackageViewAction.description=Show the selected element in Package Explorer -ShowInPackageViewAction.tooltip=Show in Package Explorer -ShowInPackageViewAction.select_name=&Select or enter the element to reveal: -ShowInPackageViewAction.dialog.title=Show In Package Explorer -ShowInPackageViewAction.error.message=Internal error. Please see log for details. -ShowInPackageViewAction.not_found=Cannot reveal the selected element in Package Explorer. The element may be filtered out. - -ShowInNavigatorView.label=Show in &Navigator View -ShowInNavigatorView.dialog.title=Show in Navigator View -ShowInNavigatorView.dialog.message=Select the element to be opened in the navigator view: -ShowInNavigatorView.error.activation_failed=Unable to activate Resource Navigator -ShowInNavigatorView.error.conversion_failed=Unable to convert Java element into a resource - -OverrideMethodsAction.label=O&verride/Implement Methods... -OverrideMethodsAction.description=Override or Implement Methods from super types. -OverrideMethodsAction.tooltip=Override/Implement Methods - -OverrideMethodsAction.error.title=Override/Implement Methods -OverrideMethodsAction.error.nothing_found=No methods to override found for this type. -OverrideMethodsAction.error.type_removed_in_editor=Input type has been removed in editor. -OverrideMethodsAction.not_applicable=Operation not applicable to current text selection. Please position the cursor inside a type. - -AddGetterSetterAction.label=Gene&rate Getter and Setter... -AddGetterSetterAction.description=Generate Getter and Setter methods for type's fields -AddGetterSetterAction.tooltip=Generate Getter and Setter methods for the Type's Fields - -AddGetterSetterAction.error.title=Generate Getter and Setter -AddGetterSetterAction.error.actionfailed=Generating Getter and Setter Failed. -AddGetterSetterAction.error.fieldNotExisting=The field ''{0}'' has been removed in the editor. -AddGetterSetterAction.not_applicable=Operation not applicable to current text selection. A field has to be selected or a type that declares fields. -AddGetterSetterAction.read_only=The compilation unit in which the field ''{0}'' is declared is read only. - -AddGetterSetterAction.QueryDialog.title=Generate Getter and Setter -AddGetterSetterAction.SkipSetterForFinalDialog.message=Field ''{0}'' is final.\nOK to skip creation of the setter method? -AddGetterSetterAction.SkipExistingDialog.message=Method ''{0}'' already exists.\nSkip creation? -AddGetterSetterAction.SkipExistingDialog.skip.label=&Skip -AddGetterSetterAction.SkipExistingDialog.replace.label=&Replace -AddGetterSetterAction.SkipExistingDialog.skipAll.label=Skip &All - -AddGetterSetterAction.dialog.title=&Select getters and setters to create: -AddGetterSetterAction.one_selected=1 method selected. -AddGetterSetterAction.methods_selected={0} methods selected. -AddGettSetterAction.typeContainsNoFields.message=The type contains no fields or all fields have getters/setters already. - - -AddUnimplementedConstructorsAction.label=Add &Constructors from Superclass -AddUnimplementedConstructorsAction.description=Evaluate and add constructors from superclass -AddUnimplementedConstructorsAction.tooltip=Add Constructors from Superclass - -AddUnimplementedConstructorsAction.error.title=Add Constructors from Superclass -AddUnimplementedConstructorsAction.error.nothing_found=No unimplemented constructors found. -AddUnimplementedConstructorsAction.error.type_removed_in_editor=Input type has been removed in editor. -AddUnimplementedConstructorsAction.not_applicable=Operation not applicable to current text selection. Please position the cursor inside a type. - -AddJavaDocStubAction.label=Add &Javadoc Comment -AddJavaDocStubAction.description=Add a Javadoc comment stub to the member element -AddJavaDocStubAction.tooltip=Add a Javadoc comment stub to the member element - -AddJavaDocStubsAction.error.dialogTitle=Add Javadoc Comment -AddJavaDocStubsAction.error.noWorkingCopy=Could not find working copy. -AddJavaDocStubsAction.error.memberNotExisting=Member has been removed in editor. -AddJavaDocStubsAction.error.actionFailed=Error while adding Javadoc comment -AddJavaDocStubsAction.not_applicable=Operation not applicable to current text selection. Please position the cursor inside a type or method. - -ExternalizeStringsAction.label= &Externalize Strings... -ExternalizeStringsAction.dialog.title= Externalize Strings -ExternalizeStringsAction.dialog.message=Couldn't open Externalize String Wizard - -FindStringsToExternalizeAction.label= &Find Strings to Externalize... -FindStringsToExternalizeAction.dialog.title= Find Strings to Externalize -FindStringsToExternalizeAction.error.message=Unexpected Exception. See log. -FindStringsToExternalizeAction.foundStrings= {0} in {1} -FindStringsToExternalizeAction.noStrings= No strings to externalize were found. -FindStringsToExternalizeAction.not_externalized= {0} ¬ externalized string(s) found. -FindStringsToExternalizeAction.button.label= &Externalize... -FindStringsToExternalizeAction.find_strings=Finding not externalized strings... - -OpenExternalJavadocAction.label=Open E&xternal Javadoc -OpenExternalJavadocAction.description=Opens the Javadoc of the selected element in an external browser -OpenExternalJavadocAction.tooltip=Opens the Javadoc of the selected element in an external browser -OpenExternalJavadocAction.help_not_available=Help support not available -OpenExternalJavadocAction.select_element=&Select or enter the element to open: -OpenExternalJavadocAction.libraries.no_location=The documentation location for ''{0}'' has not been configured. For elements from libraries specify the Javadoc location URL on the property page of the parent JAR (''{1}'') -OpenExternalJavadocAction.source.no_location=The documentation location for ''{0}'' has not been configured. For elements from source specify the Javadoc location URL on the property page of the parent project (''{1}'') -OpenExternalJavadocAction.no_entry=The documentation does not contain an entry for ''{0}''.\n(File ''{1}'' does not exist.) -OpenExternalJavadocAction.opening_failed=Opening Javadoc failed. See log for details -OpenExternalJavadocAction.dialog.title=Open External Javadoc -OpenExternalJavadocAction.code_resolve_failed=Couldn't convert text selection into a Java element - -SelfEncapsulateFieldAction.label=Encap&sulate Field... -SelfEncapsulateFieldAction.dialog.title=Encapsulate Field -SelfEncapsulateFieldAction.dialog.unavailable=Operation unavailable on the current selection. Select a field. -SelfEncapsulateFieldAction.dialog.cannot_perform=Cannot perform refactoring. See log for more details. -SelfEncapsulateFieldAction.dialog.field_doesnot_exit=Editor buffer does not contain field {0}. - -OrganizeImportsAction.label=Or&ganize Imports -OrganizeImportsAction.tooltip=Evaluate All Required Imports and Replace the Current Imports -OrganizeImportsAction.description=Evaluate all required imports and replace the current imports - -OrganizeImportsAction.multi.op.description=Organizing imports... -OrganizeImportsAction.multi.error.parse={0}: Compilation unit has parse errors. No changes applied. -OrganizeImportsAction.multi.error.readonly={0}: Compilation unit is read-only. No changes applied. -OrganizeImportsAction.multi.error.unresolvable={0}: Compilation unit contains ambiguous references. User interaction required. -OrganizeImportsAction.multi.error.unexpected={0}: Unexpected error. See log for details. -OrganizeImportsAction.multi.error.notoncp={0}: Compilation unit not on build path. No changes applied. - -OrganizeImportsAction.selectiondialog.title=Organize Imports -OrganizeImportsAction.selectiondialog.message=&Choose type to import: - -OrganizeImportsAction.error.title=Organize Imports -OrganizeImportsAction.error.message=Unexpected error in organize imports. See log for details. - -OrganizeImportsAction.single.error.parse=Compilation unit has parse errors: ''{0}''. No changes applied. - -OrganizeImportsAction.summary_added={0} import(s) added. -OrganizeImportsAction.summary_removed={0} import(s) removed. - -OrganizeImportsAction.multi.status.title=Organize Imports -OrganizeImportsAction.multi.status.description=Problems while organizing imports on some compilation units. See 'Details' for more information. - -SortMembersAction.label=Sort &Members -SortMembersAction.tooltip=Sorts all Members using the Member Order Preference -SortMembersAction.description=Sorts all members using the member order preference - -SortMembersAction.error.title=Sort Members -SortMembersAction.not_applicable=Operation not applicable to current text editor. -SortMembersAction.containsmarkers=Markers like bookmarks, breakpoints or user defined tasks in a reordered member will be lost. Ok to continue? - OpenBrowserUtil.help_not_available=Help support not available MemberFilterActionGroup.hide_fields.label=Hide Fiel&ds @@ -201,13 +73,6 @@ OpenProjectAction.error.message=Problems while opening projects OpenProjectAction.no_java_nature.one=The following project doesn't have a Java nature and is therefore not present in the Package Explorer: OpenProjectAction.no_java_nature.multiple=The following projects don't have a Java nature and are therefore not present in the Package Explorer: - -OpenJavaPerspectiveAction.dialog.title=Open Java Perspective -OpenJavaPerspectiveAction.error.open_failed=Couldn\'t open Java perspective - -OpenJavaBrowsingPerspectiveAction.dialog.title=Open Java Browsing Perspective -OpenJavaBrowsingPerspectiveAction.error.open_failed=Couldn\'t open Java browsing perspective - OpenTypeInHierarchyAction.label=Open Type in Hierarchy... OpenTypeInHierarchyAction.description=Open a type in a type hierarchy @@ -223,12 +88,6 @@ RefreshAction.error.message= Problems occurred refreshing the selected resources RefreshAction.locationDeleted.title= Project location has been deleted RefreshAction.locationDeleted.message= The location for project {0} ({1}) has been deleted.\n Delete {0} from the workspace? -ModifyParameterAction.problem.title=Refactoring -ModifyParameterAction.problem.message=Operation not possible. - -PullUpAction.problem.title=Refactoring -PullUpAction.problem.message=Operation not possible. - OverrideMethodQuery.groupMethodsByTypes=Group methods by &types OverrideMethodQuery.dialog.title=Override/Implement Methods OverrideMethodQuery.dialog.description=&Select methods to override or implement: @@ -243,36 +102,6 @@ ActionUtil.no_linked=This operation is unavailable on linked packages and packag SelectAllAction.label= Select A&ll SelectAllAction.tooltip= Select All -AddToClasspathAction.label=Add to &Build Path -AddToClasspathAction.toolTip=Add JAR to the Java build path -AddToClasspathAction.progressMessage=Adding to build path... -AddToClasspathAction.error.title=Add to Build Path -AddToClasspathAction.error.message=Problems occurred while adding to the build path. - -RemoveFromClasspathAction.Remove=Remove from &Build Path -RemoveFromClasspathAction.tooltip=Remove package fragment root from the Java build path -RemoveFromClasspathAction.Removing=Removing from build path... -RemoveFromClasspathAction.exception_dialog_title=Remove From Build Path -RemoveFromClasspathAction.Problems_occurred=Problems occurred while removing from the build path. - -AddDelegateMethodsAction.error.title=Generate Delegate Methods -AddDelegateMethodsAction.error.actionfailed=Generating delegate methods failed. - -AddDelegateMethodsAction.label=Generate Delegate &Methods... -AddDelegateMethodsAction.description=Adds delegate methods for a type's fields -AddDelegateMethodsAction.tooltip=Adds Delegates Methods for a Type's Fields - -AddDelegateMethodsAction.not_applicable=Operation not applicable to current text selection. Please select a field or a type that declares some fields. - -AddDelegateMethodsAction.duplicate_methods=Duplicate method(s) selected - -AddDelegateMethodsAction.title=Delegate Methods Generation -AddDelegateMethodsAction.message=Select &methods to create delegates for: - -AddDelegateMethodsAction.monitor.message=Creating {0} methods... -AddDelegateMethodsAction.selectioninfo.one={0} method selected. -AddDelegateMethodsAction.selectioninfo.more={0} methods selected. - ToggleLinkingAction.label=Lin&k With Editor ToggleLinkingAction.tooltip=Link with Editor ToggleLinkingAction.description=Link with active editor diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/FoldingActionGroup.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/FoldingActionGroup.java index a16761bedad..2148c980939 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/FoldingActionGroup.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/FoldingActionGroup.java @@ -7,35 +7,65 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Anton Leherbauer (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.ui.actions; -import org.eclipse.jface.action.IMenuManager; +import java.util.ResourceBundle; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.source.projection.IProjectionListener; import org.eclipse.jface.text.source.projection.ProjectionViewer; - import org.eclipse.ui.actions.ActionGroup; import org.eclipse.ui.editors.text.IFoldingCommandIds; import org.eclipse.ui.texteditor.ITextEditor; +import org.eclipse.ui.texteditor.IUpdate; +import org.eclipse.ui.texteditor.ResourceAction; import org.eclipse.ui.texteditor.TextOperationAction; +import org.eclipse.cdt.internal.ui.editor.CEditor; + /** - * Groups the JDT folding actions. + * Groups the CDT folding actions. * * @since 3.0 */ public class FoldingActionGroup extends ActionGroup { + + private static abstract class PreferenceAction extends ResourceAction implements IUpdate { + PreferenceAction(ResourceBundle bundle, String prefix, int style) { + super(bundle, prefix, style); + } + } + + private class FoldingAction extends PreferenceAction { + + FoldingAction(ResourceBundle bundle, String prefix) { + super(bundle, prefix, IAction.AS_PUSH_BUTTON); + } + + public void update() { + setEnabled(FoldingActionGroup.this.isEnabled() && fViewer.isProjectionMode()); + } + + } + private ProjectionViewer fViewer; + private IProjectionListener fProjectionListener; private TextOperationAction fToggle; private TextOperationAction fExpand; private TextOperationAction fCollapse; private TextOperationAction fExpandAll; + + // since 4.0 + private TextOperationAction fCollapseAll; + private PreferenceAction fRestoreDefaults; + - private IProjectionListener fProjectionListener; /** * Creates a new projection action group for editor. If the @@ -45,40 +75,64 @@ public class FoldingActionGroup extends ActionGroup { * @param editor the text editor to operate on * @param viewer the viewer of the editor */ - public FoldingActionGroup(ITextEditor editor, ITextViewer viewer) { - if (viewer instanceof ProjectionViewer) { - fViewer= (ProjectionViewer) viewer; - - fProjectionListener= new IProjectionListener() { - - public void projectionEnabled() { - update(); - } - - public void projectionDisabled() { - update(); - } - }; - - fViewer.addProjectionListener(fProjectionListener); - - fToggle= new TextOperationAction(ActionMessages.getResourceBundle(), "Projection.Toggle.", editor, ProjectionViewer.TOGGLE, true); //$NON-NLS-1$ - fToggle.setChecked(true); - fToggle.setActionDefinitionId(IFoldingCommandIds.FOLDING_TOGGLE); - editor.setAction("FoldingToggle", fToggle); //$NON-NLS-1$ - - fExpandAll= new TextOperationAction(ActionMessages.getResourceBundle(), "Projection.ExpandAll.", editor, ProjectionViewer.EXPAND_ALL, true); //$NON-NLS-1$ - fExpandAll.setActionDefinitionId(IFoldingCommandIds.FOLDING_EXPAND_ALL); - editor.setAction("FoldingExpandAll", fExpandAll); //$NON-NLS-1$ - - fExpand= new TextOperationAction(ActionMessages.getResourceBundle(), "Projection.Expand.", editor, ProjectionViewer.EXPAND, true); //$NON-NLS-1$ - fExpand.setActionDefinitionId(IFoldingCommandIds.FOLDING_EXPAND); - editor.setAction("FoldingExpand", fExpand); //$NON-NLS-1$ - - fCollapse= new TextOperationAction(ActionMessages.getResourceBundle(), "Projection.Collapse.", editor, ProjectionViewer.COLLAPSE, true); //$NON-NLS-1$ - fCollapse.setActionDefinitionId(IFoldingCommandIds.FOLDING_COLLAPSE); - editor.setAction("FoldingCollapse", fCollapse); //$NON-NLS-1$ + public FoldingActionGroup(final ITextEditor editor, ITextViewer viewer) { + if (!(viewer instanceof ProjectionViewer)) { + fToggle= null; + fExpand= null; + fCollapse= null; + fExpandAll= null; + fCollapseAll= null; + fRestoreDefaults= null; + fProjectionListener= null; + return; } + + fViewer= (ProjectionViewer) viewer; + + fProjectionListener= new IProjectionListener() { + + public void projectionEnabled() { + update(); + } + + public void projectionDisabled() { + update(); + } + }; + + fViewer.addProjectionListener(fProjectionListener); + + fToggle= new TextOperationAction(FoldingMessages.getResourceBundle(), "Projection.Toggle.", editor, ProjectionViewer.TOGGLE, true); //$NON-NLS-1$ + fToggle.setChecked(true); + fToggle.setActionDefinitionId(IFoldingCommandIds.FOLDING_TOGGLE); + editor.setAction("FoldingToggle", fToggle); //$NON-NLS-1$ + + fExpandAll= new TextOperationAction(FoldingMessages.getResourceBundle(), "Projection.ExpandAll.", editor, ProjectionViewer.EXPAND_ALL, true); //$NON-NLS-1$ + fExpandAll.setActionDefinitionId(IFoldingCommandIds.FOLDING_EXPAND_ALL); + editor.setAction("FoldingExpandAll", fExpandAll); //$NON-NLS-1$ + + fCollapseAll= new TextOperationAction(FoldingMessages.getResourceBundle(), "Projection.CollapseAll.", editor, ProjectionViewer.COLLAPSE, true); //$NON-NLS-1$ + fCollapseAll.setActionDefinitionId(IFoldingCommandIds.FOLDING_COLLAPSE_ALL); + editor.setAction("FoldingCollapseAll", fCollapseAll); //$NON-NLS-1$ + + fExpand= new TextOperationAction(FoldingMessages.getResourceBundle(), "Projection.Expand.", editor, ProjectionViewer.EXPAND, true); //$NON-NLS-1$ + fExpand.setActionDefinitionId(IFoldingCommandIds.FOLDING_EXPAND); + editor.setAction("FoldingExpand", fExpand); //$NON-NLS-1$ + + fCollapse= new TextOperationAction(FoldingMessages.getResourceBundle(), "Projection.Collapse.", editor, ProjectionViewer.COLLAPSE, true); //$NON-NLS-1$ + fCollapse.setActionDefinitionId(IFoldingCommandIds.FOLDING_COLLAPSE); + editor.setAction("FoldingCollapse", fCollapse); //$NON-NLS-1$ + + fRestoreDefaults= new FoldingAction(FoldingMessages.getResourceBundle(), "Projection.Restore.") { //$NON-NLS-1$ + public void run() { + if (editor instanceof CEditor) { + CEditor cEditor= (CEditor) editor; + cEditor.resetProjection(); + } + } + }; + fRestoreDefaults.setActionDefinitionId(IFoldingCommandIds.FOLDING_RESTORE); + editor.setAction("FoldingRestore", fRestoreDefaults); //$NON-NLS-1$ } /** @@ -114,6 +168,8 @@ public class FoldingActionGroup extends ActionGroup { fExpand.update(); fExpandAll.update(); fCollapse.update(); + fCollapseAll.update(); + fRestoreDefaults.update(); } } @@ -129,6 +185,8 @@ public class FoldingActionGroup extends ActionGroup { manager.add(fExpandAll); manager.add(fExpand); manager.add(fCollapse); + manager.add(fCollapseAll); + manager.add(fRestoreDefaults); } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/FoldingMessages.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/FoldingMessages.java new file mode 100644 index 00000000000..d42be4d2b05 --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/FoldingMessages.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 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.cdt.internal.ui.actions; + +import com.ibm.icu.text.MessageFormat; +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +/** + * Class that gives access to the folding messages resource bundle. + */ +public class FoldingMessages { + + private static final String BUNDLE_NAME= "org.eclipse.cdt.internal.ui.actions.FoldingMessages"; //$NON-NLS-1$ + + private static final ResourceBundle RESOURCE_BUNDLE= ResourceBundle.getBundle(BUNDLE_NAME); + + private FoldingMessages() { + // no instance + } + + /** + * Returns the resource string associated with the given key in the resource bundle. If there isn't + * any value under the given key, the key is returned. + * + * @param key the resource key + * @return the string + */ + public static String getString(String key) { + try { + return RESOURCE_BUNDLE.getString(key); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } + + /** + * Returns the resource bundle managed by the receiver. + * + * @return the resource bundle + * @since 3.0 + */ + public static ResourceBundle getResourceBundle() { + return RESOURCE_BUNDLE; + } + + /** + * Returns the formatted resource string associated with the given key in the resource bundle. + * MessageFormat is used to format the message. If there isn't any value + * under the given key, the key is returned. + * + * @param key the resource key + * @param arg the message argument + * @return the string + */ + public static String getFormattedString(String key, Object arg) { + return getFormattedString(key, new Object[] { arg }); + } + + /** + * Returns the formatted resource string associated with the given key in the resource bundle. + * MessageFormat is used to format the message. If there isn't any value + * under the given key, the key is returned. + * + * @param key the resource key + * @param args the message arguments + * @return the string + */ + public static String getFormattedString(String key, Object[] args) { + return MessageFormat.format(getString(key), args); + } +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/FoldingMessages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/FoldingMessages.properties new file mode 100644 index 00000000000..7f9a9c8b68b --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/FoldingMessages.properties @@ -0,0 +1,39 @@ +############################################################################### +# Copyright (c) 2005, 2006 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 +############################################################################### +Projection.Toggle.label= &Enable Folding +Projection.Toggle.tooltip= Toggles Folding +Projection.Toggle.description= Toggles folding for the current editor +Projection.Toggle.image= + +Projection.ExpandAll.label= Expand &All +Projection.ExpandAll.tooltip= Expands All Collapsed Regions +Projection.ExpandAll.description= Expands any collapsed regions in the current editor +Projection.ExpandAll.image= + +Projection.Expand.label= E&xpand +Projection.Expand.tooltip= Expands the Current Collapsed Region +Projection.Expand.description= Expands the collapsed region at the current selection +Projection.Expand.image= + +Projection.CollapseAll.label= Collapse A&ll +Projection.CollapseAll.tooltip= Collapses All Expanded Regions +Projection.CollapseAll.description= Collapse any expanded regions in the current editor +Projection.CollapseAll.image= + +Projection.Collapse.label= Colla&pse +Projection.Collapse.tooltip= Collapses the Current Region +Projection.Collapse.description= Collapses the Current Region +Projection.Collapse.image= + +Projection.Restore.label= &Reset Structure +Projection.Restore.tooltip= Restore the Original Folding Structure +Projection.Restore.description= Restores the original folding structure +Projection.Restore.image= diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/GoToNextPreviousMemberAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/GoToNextPreviousMemberAction.java index fb7f9a64560..686e1cfed9f 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/GoToNextPreviousMemberAction.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/GoToNextPreviousMemberAction.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005 IBM Corporation and others. + * Copyright (c) 2005, 2006 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 @@ -7,6 +7,7 @@ * * Contributors: * P.Tomaszewski + * Anton Leherbauer (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.ui.actions; @@ -15,17 +16,19 @@ import java.util.LinkedList; import java.util.List; import java.util.ResourceBundle; -import org.eclipse.cdt.core.model.CModelException; -import org.eclipse.cdt.core.model.ICElement; -import org.eclipse.cdt.core.model.ISourceReference; -import org.eclipse.cdt.internal.core.model.WorkingCopy; -import org.eclipse.cdt.internal.ui.editor.CEditor; -import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.jface.text.ITextSelection; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.texteditor.ITextEditor; import org.eclipse.ui.texteditor.TextEditorAction; +import org.eclipse.cdt.core.model.CModelException; +import org.eclipse.cdt.core.model.ICElement; +import org.eclipse.cdt.core.model.ISourceReference; +import org.eclipse.cdt.core.model.IWorkingCopy; +import org.eclipse.cdt.ui.CUIPlugin; + +import org.eclipse.cdt.internal.ui.editor.CEditor; + /** * Gives possibility to move fast between member elements of the c/c++ source. * @@ -33,7 +36,10 @@ import org.eclipse.ui.texteditor.TextEditorAction; */ public class GoToNextPreviousMemberAction extends TextEditorAction { - /** Determines should action take user to the next member or to the previous one. */ + public static final String NEXT_MEMBER = "GotoNextMember"; //$NON-NLS-1$ + public static final String PREVIOUS_MEMBER = "GotoPrevMember"; //$NON-NLS-1$ + + /** Determines should action take user to the next member or to the previous one. */ private boolean fGotoNext; /** @@ -63,14 +69,22 @@ public class GoToNextPreviousMemberAction extends TextEditorAction { fGotoNext = gotoNext; } - /** + /* + * @see org.eclipse.ui.texteditor.TextEditorAction#update() + */ + public void update() { + final ITextEditor editor = getTextEditor(); + setEnabled(editor instanceof CEditor && ((CEditor)editor).getInputCElement() != null); + } + + /** * @see org.eclipse.jface.action.Action#run() */ public void run() { final CEditor editor = (CEditor) getTextEditor(); final ITextSelection selection = (ITextSelection) editor.getSelectionProvider().getSelection(); final IEditorInput editorInput = editor.getEditorInput(); - final WorkingCopy workingCopy = (WorkingCopy) CUIPlugin.getDefault().getWorkingCopyManager().getWorkingCopy(editorInput); + final IWorkingCopy workingCopy = CUIPlugin.getDefault().getWorkingCopyManager().getWorkingCopy(editorInput); try { final ICElement[] elements = workingCopy.getChildren(); final Integer[] elementOffsets = createSourceIndexes(elements); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java index 7a8b8176db2..09f2428c1b8 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java @@ -24,10 +24,11 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.ListenerList; import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.GroupMarker; 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.preference.IPreferenceStore; import org.eclipse.jface.text.AbstractInformationControlManager; import org.eclipse.jface.text.BadLocationException; @@ -97,6 +98,7 @@ import org.eclipse.ui.IPageLayout; import org.eclipse.ui.IPartService; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.actions.ActionContext; import org.eclipse.ui.actions.ActionGroup; import org.eclipse.ui.editors.text.TextEditor; import org.eclipse.ui.part.EditorActionBarContributor; @@ -133,6 +135,7 @@ import org.eclipse.cdt.refactoring.actions.CRefactoringActionGroup; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.IWorkingCopyManager; import org.eclipse.cdt.ui.PreferenceConstants; +import org.eclipse.cdt.ui.actions.GenerateActionGroup; import org.eclipse.cdt.ui.actions.OpenViewActionGroup; import org.eclipse.cdt.ui.actions.ShowInCViewAction; import org.eclipse.cdt.ui.text.ICPartitions; @@ -140,6 +143,7 @@ import org.eclipse.cdt.ui.text.folding.ICFoldingStructureProvider; import org.eclipse.cdt.internal.corext.util.SimplePositionTracker; +import org.eclipse.cdt.internal.ui.CPluginImages; import org.eclipse.cdt.internal.ui.ICHelpContextIds; import org.eclipse.cdt.internal.ui.IContextMenuConstants; import org.eclipse.cdt.internal.ui.actions.AddBlockCommentAction; @@ -513,7 +517,10 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS private ActionGroup fTextSearchGroup; private CRefactoringActionGroup fRefactoringActionGroup; private ActionGroup fOpenInViewGroup; - + + /** Generate action group filling the "Source" submenu */ + private GenerateActionGroup fGenerateActionGroup; + /** Action which shows selected element in CView. */ private ShowInCViewAction fShowInCViewAction; @@ -1034,6 +1041,11 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS fOpenInViewGroup = null; } + if (fGenerateActionGroup != null) { + fGenerateActionGroup.dispose(); + fGenerateActionGroup= null; + } + if (fEditorSelectionChangedListener != null) { fEditorSelectionChangedListener.uninstall(getSelectionProvider()); fEditorSelectionChangedListener= null; @@ -1094,7 +1106,7 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS PlatformUI.getWorkbench().getHelpSystem().setHelp(resAction2, ICHelpContextIds.SHOW_TOOLTIP_ACTION); // Default text editing menu items - Action action= new GotoMatchingBracketAction(this); + IAction action= new GotoMatchingBracketAction(this); action.setActionDefinitionId(ICEditorActionDefinitionIds.GOTO_MATCHING_BRACKET); setAction(GotoMatchingBracketAction.GOTO_MATCHING_BRACKET, action); @@ -1136,10 +1148,6 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS action.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_CONTEXT_INFORMATION); setAction("ContentAssistTip", action); //$NON-NLS-1$ - action = new AddIncludeOnSelectionAction(this); - action.setActionDefinitionId(ICEditorActionDefinitionIds.ADD_INCLUDE); - setAction("AddIncludeOnSelection", action); //$NON-NLS-1$ - action = new OpenDeclarationsAction(this); action.setActionDefinitionId(ICEditorActionDefinitionIds.OPEN_DECL); setAction("OpenDeclarations", action); //$NON-NLS-1$ @@ -1163,17 +1171,29 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS action = new GoToNextPreviousMemberAction(CEditorMessages.getResourceBundle(), "GotoNextMember.", this, true); //$NON-NLS-1$ action.setActionDefinitionId(ICEditorActionDefinitionIds.GOTO_NEXT_MEMBER); - setAction("GotoNextMember", action); //$NON-NLS-1$*/ + setAction(GoToNextPreviousMemberAction.PREVIOUS_MEMBER, action); - action = new GoToNextPreviousMemberAction(CEditorMessages.getResourceBundle(), "GotoPrevMember.", this, false); //$NON-NLS-1$ + action = new GoToNextPreviousMemberAction(CEditorMessages.getResourceBundle(), "GotoPreviousMember.", this, false); //$NON-NLS-1$ action.setActionDefinitionId(ICEditorActionDefinitionIds.GOTO_PREVIOUS_MEMBER); - setAction("GotoPrevMember", action); //$NON-NLS-1$*/ + setAction(GoToNextPreviousMemberAction.NEXT_MEMBER, action); //Assorted action groupings fSelectionSearchGroup = new SelectionSearchGroup(this); fTextSearchGroup= new TextSearchGroup(this); - fRefactoringActionGroup= new CRefactoringActionGroup(this); + fRefactoringActionGroup= new CRefactoringActionGroup(this, ITextEditorActionConstants.GROUP_EDIT); fOpenInViewGroup= new OpenViewActionGroup(this); + fGenerateActionGroup= new GenerateActionGroup(this, ITextEditorActionConstants.GROUP_EDIT); + + action = getAction(ITextEditorActionConstants.SHIFT_RIGHT); + if (action != null) { + action.setId(ITextEditorActionConstants.SHIFT_RIGHT); + CPluginImages.setImageDescriptors(action, CPluginImages.T_LCL, CPluginImages.IMG_MENU_SHIFT_RIGHT); + } + action = getAction(ITextEditorActionConstants.SHIFT_LEFT); + if (action != null) { + action.setId(ITextEditorActionConstants.SHIFT_LEFT); + CPluginImages.setImageDescriptors(action, CPluginImages.T_LCL, CPluginImages.IMG_MENU_SHIFT_LEFT); + } } /** @@ -1181,28 +1201,22 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS */ public void editorContextMenuAboutToShow(IMenuManager menu) { super.editorContextMenuAboutToShow(menu); + // remove shift actions added by base class + menu.remove(ITextEditorActionConstants.SHIFT_LEFT); + menu.remove(ITextEditorActionConstants.SHIFT_RIGHT); - addGroup(menu, ITextEditorActionConstants.GROUP_EDIT, IContextMenuConstants.GROUP_REORGANIZE); - addGroup(menu, ITextEditorActionConstants.GROUP_EDIT, IContextMenuConstants.GROUP_GENERATE); - addGroup(menu, ITextEditorActionConstants.GROUP_EDIT, IContextMenuConstants.GROUP_NEW); + menu.insertAfter(IContextMenuConstants.GROUP_OPEN, new GroupMarker(IContextMenuConstants.GROUP_SHOW)); - // Code formatting menu items -- only show in C perspective - addAction(menu, ITextEditorActionConstants.GROUP_EDIT, "ToggleComment"); //$NON-NLS-1$ - addAction(menu, ITextEditorActionConstants.GROUP_EDIT, "AddBlockComment"); //$NON-NLS-1$ - addAction(menu, ITextEditorActionConstants.GROUP_EDIT, "RemoveBlockComment"); //$NON-NLS-1$ + addAction(menu, IContextMenuConstants.GROUP_OPEN, "OpenDeclarations"); //$NON-NLS-1$ + addAction(menu, IContextMenuConstants.GROUP_OPEN, "OpenDefinition"); //$NON-NLS-1$ + addAction(menu, IContextMenuConstants.GROUP_OPEN, "OpenTypeHierarchy"); //$NON-NLS-1$ - addAction(menu, ITextEditorActionConstants.GROUP_FIND, "OpenDeclarations"); //$NON-NLS-1$ - addAction(menu, ITextEditorActionConstants.GROUP_FIND, "OpenDefinition"); //$NON-NLS-1$ + addAction(menu, IContextMenuConstants.GROUP_OPEN, "OpenOutline"); //$NON-NLS-1$ - addAction(menu, ITextEditorActionConstants.GROUP_FIND, "OpenTypeHierarchy"); //$NON-NLS-1$ - addAction(menu, ITextEditorActionConstants.GROUP_FIND, "GotoNextMember"); //$NON-NLS-1$ - addAction(menu, ITextEditorActionConstants.GROUP_FIND, "GotoPrevMember"); //$NON-NLS-1$ - - addAction(menu, IContextMenuConstants.GROUP_GENERATE, "ContentAssistProposal"); //$NON-NLS-1$ - addAction(menu, IContextMenuConstants.GROUP_GENERATE, "AddIncludeOnSelection"); //$NON-NLS-1$ - addAction(menu, IContextMenuConstants.GROUP_GENERATE, "Format"); //$NON-NLS-1$ - - addAction(menu, IContextMenuConstants.GROUP_GENERATE, "ShowInCView"); //$NON-NLS-1$ + ActionContext context= new ActionContext(getSelectionProvider().getSelection()); + fGenerateActionGroup.setContext(context); + fGenerateActionGroup.fillContextMenu(menu); + fGenerateActionGroup.setContext(null); fSelectionSearchGroup.fillContextMenu(menu); fTextSearchGroup.fillContextMenu(menu); @@ -1210,6 +1224,24 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS fOpenInViewGroup.fillContextMenu(menu); } + /* + * @see org.eclipse.ui.texteditor.AbstractTextEditor#rulerContextMenuAboutToShow(org.eclipse.jface.action.IMenuManager) + */ + protected void rulerContextMenuAboutToShow(IMenuManager menu) { + super.rulerContextMenuAboutToShow(menu); + IMenuManager foldingMenu= new MenuManager(CEditorMessages.getString("CEditor.menu.folding"), "projection"); //$NON-NLS-1$ //$NON-NLS-2$ + menu.appendToGroup(ITextEditorActionConstants.GROUP_RULERS, foldingMenu); + + IAction action= getAction("FoldingToggle"); //$NON-NLS-1$ + foldingMenu.add(action); + action= getAction("FoldingExpandAll"); //$NON-NLS-1$ + foldingMenu.add(action); + action= getAction("FoldingCollapseAll"); //$NON-NLS-1$ + foldingMenu.add(action); + action= getAction("FoldingRestore"); //$NON-NLS-1$ + foldingMenu.add(action); + } + /** * Sets an input for the outline page. * @param page Page to set the input. @@ -2296,6 +2328,27 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS public void fillActionBars(IActionBars actionBars) { fOpenInViewGroup.fillActionBars(actionBars); fRefactoringActionGroup.fillActionBars(actionBars); + fGenerateActionGroup.fillActionBars(actionBars); } + /* + * @see org.eclipse.ui.texteditor.AbstractTextEditor#updateStateDependentActions() + */ + protected void updateStateDependentActions() { + super.updateStateDependentActions(); + fGenerateActionGroup.editorStateChanged(); + } + + /** + * Resets the foldings structure according to the folding + * preferences. + * + * @since 4.0 + */ + public void resetProjection() { + if (fProjectionModelUpdater != null) { + fProjectionModelUpdater.initialize(); + } + } + } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditorActionContributor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditorActionContributor.java index f97afc2e2eb..cd9468440e7 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditorActionContributor.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditorActionContributor.java @@ -9,20 +9,17 @@ * IBM Corporation - initial API and implementation * QNX Software System * Markus Schorn (Wind River Systems) + * Anton Leherbauer (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.ui.editor; import java.util.ResourceBundle; -import org.eclipse.cdt.internal.ui.CPluginImages; -import org.eclipse.cdt.internal.ui.IContextMenuConstants; +import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.text.ITextOperationTarget; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.ISelectionProvider; -import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchActionConstants; @@ -31,83 +28,38 @@ import org.eclipse.ui.texteditor.ITextEditor; import org.eclipse.ui.texteditor.ITextEditorActionConstants; import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds; import org.eclipse.ui.texteditor.RetargetTextEditorAction; -import org.eclipse.ui.texteditor.TextEditorAction; + +import org.eclipse.cdt.internal.ui.CPluginImages; +import org.eclipse.cdt.internal.ui.IContextMenuConstants; +import org.eclipse.cdt.internal.ui.actions.GoToNextPreviousMemberAction; public class CEditorActionContributor extends TextEditorActionContributor { - - protected static class SelectionAction extends TextEditorAction implements ISelectionChangedListener { - - protected int fOperationCode; - protected ITextOperationTarget fOperationTarget= null; - - - public SelectionAction(String prefix, int operation) { - super(CEditorMessages.getResourceBundle(), prefix, null); - fOperationCode= operation; - setEnabled(false); - } - - /** - * @see TextEditorAction#setEditor(ITextEditor) - */ - public void setEditor(ITextEditor editor) { - if (getTextEditor() != null) { - ISelectionProvider p= getTextEditor().getSelectionProvider(); - if (p != null) p.removeSelectionChangedListener(this); - } - - super.setEditor(editor); - - if (editor != null) { - ISelectionProvider p= editor.getSelectionProvider(); - if (p != null) p.addSelectionChangedListener(this); - fOperationTarget= (ITextOperationTarget) editor.getAdapter(ITextOperationTarget.class); - } else { - fOperationTarget= null; - } - - selectionChanged(null); - } - - /** - * @see ISelectionChangedListener#selectionChanged(SelectionChangedEvent) - */ - public void selectionChanged(SelectionChangedEvent event) { - boolean isEnabled= (fOperationTarget != null && fOperationTarget.canDoOperation(fOperationCode)); - setEnabled(isEnabled); - } - - /* - * @see org.eclipse.jface.action.Action#run() - */ - public void run() { - if (fOperationCode != -1 && fOperationTarget != null) - fOperationTarget.doOperation(fOperationCode); - } - } - + protected CEditor fCEditor; protected RetargetTextEditorAction fContentAssist; protected RetargetTextEditorAction fFormatter; protected RetargetTextEditorAction fAddInclude; - protected RetargetTextEditorAction fOpenOnSelection; - protected SelectionAction fShiftLeft; - protected SelectionAction fShiftRight; +// protected RetargetTextEditorAction fOpenOnSelection; + protected RetargetTextEditorAction fShiftLeft; + protected RetargetTextEditorAction fShiftRight; private TogglePresentationAction fTogglePresentation; private GotoAnnotationAction fPreviousAnnotation; private GotoAnnotationAction fNextAnnotation; - + private RetargetTextEditorAction fGotoMatchingBracket; + private RetargetTextEditorAction fGotoNextMemberAction; + private RetargetTextEditorAction fGotoPreviousMemberAction; + private RetargetTextEditorAction fToggleInsertModeAction; public CEditorActionContributor() { super(); ResourceBundle bundle = CEditorMessages.getResourceBundle(); - fShiftRight= new SelectionAction("ShiftRight.", ITextOperationTarget.SHIFT_RIGHT); //$NON-NLS-1$ + fShiftRight= new RetargetTextEditorAction(bundle, "ShiftRight.", ITextOperationTarget.SHIFT_RIGHT); //$NON-NLS-1$ fShiftRight.setActionDefinitionId(ITextEditorActionDefinitionIds.SHIFT_RIGHT); CPluginImages.setImageDescriptors(fShiftRight, CPluginImages.T_LCL, CPluginImages.IMG_MENU_SHIFT_RIGHT); - fShiftLeft= new SelectionAction("ShiftLeft.", ITextOperationTarget.SHIFT_LEFT); //$NON-NLS-1$ + fShiftLeft= new RetargetTextEditorAction(bundle, "ShiftLeft.", ITextOperationTarget.SHIFT_LEFT); //$NON-NLS-1$ fShiftLeft.setActionDefinitionId(ITextEditorActionDefinitionIds.SHIFT_LEFT); CPluginImages.setImageDescriptors(fShiftLeft, CPluginImages.T_LCL, CPluginImages.IMG_MENU_SHIFT_LEFT); @@ -120,7 +72,7 @@ public class CEditorActionContributor extends TextEditorActionContributor { fAddInclude = new RetargetTextEditorAction(bundle, "AddIncludeOnSelection."); //$NON-NLS-1$ fAddInclude.setActionDefinitionId(ICEditorActionDefinitionIds.ADD_INCLUDE); - fOpenOnSelection = new RetargetTextEditorAction(bundle, "OpenOnSelection."); //$NON-NLS-1$ +// fOpenOnSelection = new RetargetTextEditorAction(bundle, "OpenOnSelection."); //$NON-NLS-1$ // actions that are "contributed" to editors, they are considered belonging to the active editor fTogglePresentation= new TogglePresentationAction(); @@ -131,7 +83,16 @@ public class CEditorActionContributor extends TextEditorActionContributor { fPreviousAnnotation= new GotoAnnotationAction("PreviousAnnotation.", false); //$NON-NLS-1$ fNextAnnotation= new GotoAnnotationAction("NextAnnotation.", true); //$NON-NLS-1$ - //fToggleTextHover= new ToggleTextHoverAction(); + fGotoMatchingBracket= new RetargetTextEditorAction(bundle, "GotoMatchingBracket."); //$NON-NLS-1$ + fGotoMatchingBracket.setActionDefinitionId(ICEditorActionDefinitionIds.GOTO_MATCHING_BRACKET); + + fGotoNextMemberAction= new RetargetTextEditorAction(bundle, "GotoNextMember."); //$NON-NLS-1$ + fGotoNextMemberAction.setActionDefinitionId(ICEditorActionDefinitionIds.GOTO_NEXT_MEMBER); + fGotoPreviousMemberAction= new RetargetTextEditorAction(bundle, "GotoPreviousMember."); //$NON-NLS-1$ + fGotoPreviousMemberAction.setActionDefinitionId(ICEditorActionDefinitionIds.GOTO_PREVIOUS_MEMBER); + + fToggleInsertModeAction= new RetargetTextEditorAction(bundle, "ToggleInsertMode.", IAction.AS_CHECK_BOX); //$NON-NLS-1$ + fToggleInsertModeAction.setActionDefinitionId(ITextEditorActionDefinitionIds.TOGGLE_INSERT_MODE); } @@ -142,24 +103,26 @@ public class CEditorActionContributor extends TextEditorActionContributor { super.contributeToMenu(menu); - /* - * Hook in the code assist - */ - IMenuManager editMenu= menu.findMenuUsingPath(IWorkbenchActionConstants.M_EDIT); if (editMenu != null) { editMenu.add(fShiftRight); editMenu.add(fShiftLeft); - -// editMenu.add(new Separator(IContextMenuConstants.GROUP_OPEN)); -// editMenu.add(fNextError); -// editMenu.add(fPreviousError); - + editMenu.add(new Separator(IContextMenuConstants.GROUP_GENERATE)); editMenu.appendToGroup(IContextMenuConstants.GROUP_GENERATE, fContentAssist); editMenu.appendToGroup(IContextMenuConstants.GROUP_GENERATE, fAddInclude); editMenu.appendToGroup(IContextMenuConstants.GROUP_GENERATE, fFormatter); - editMenu.appendToGroup(IContextMenuConstants.GROUP_GENERATE, fOpenOnSelection); +// editMenu.appendToGroup(IContextMenuConstants.GROUP_GENERATE, fOpenOnSelection); + + editMenu.appendToGroup(IContextMenuConstants.GROUP_ADDITIONS, fToggleInsertModeAction); + + 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$ + } } } @@ -189,19 +152,24 @@ public class CEditorActionContributor extends TextEditorActionContributor { if (part instanceof ITextEditor) textEditor= (ITextEditor) part; - fShiftRight.setEditor(textEditor); - fShiftLeft.setEditor(textEditor); + fShiftRight.setAction(getAction(textEditor, ITextEditorActionConstants.SHIFT_RIGHT)); + fShiftLeft.setAction(getAction(textEditor, ITextEditorActionConstants.SHIFT_LEFT)); + fTogglePresentation.setEditor(textEditor); fPreviousAnnotation.setEditor(textEditor); fNextAnnotation.setEditor(textEditor); - //caAction.setEditor(textEditor); - //caAction.update(); fContentAssist.setAction(getAction(textEditor, "ContentAssistProposal")); //$NON-NLS-1$ fAddInclude.setAction(getAction(textEditor, "AddIncludeOnSelection")); //$NON-NLS-1$ - fOpenOnSelection.setAction(getAction(textEditor, "OpenOnSelection")); //$NON-NLS-1$ +// fOpenOnSelection.setAction(getAction(textEditor, "OpenOnSelection")); //$NON-NLS-1$ fFormatter.setAction(getAction(textEditor, "Format")); //$NON-NLS-1$ + + fGotoMatchingBracket.setAction(getAction(textEditor, GotoMatchingBracketAction.GOTO_MATCHING_BRACKET)); + fGotoNextMemberAction.setAction(getAction(textEditor, GoToNextPreviousMemberAction.NEXT_MEMBER)); + fGotoPreviousMemberAction.setAction(getAction(textEditor, GoToNextPreviousMemberAction.PREVIOUS_MEMBER)); + fToggleInsertModeAction.setAction(getAction(textEditor, ITextEditorActionConstants.TOGGLE_INSERT_MODE)); + if (part instanceof CEditor) { CEditor cEditor= (CEditor) part; cEditor.fillActionBars(getActionBars()); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditorMessages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditorMessages.properties index c9586e17895..561549bfb6d 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditorMessages.properties +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditorMessages.properties @@ -21,90 +21,27 @@ AddIncludeOnSelection.error.message4=BadLocationException: AddIncludeOnSelection.label=Add Include AddIncludeOnSelection.tooltip=Add Include Statement on Selection -ShowInCView.description=Show the current resource in the C/C++ Projects view -ShowInCView.label=Show in C/C++ Projects -ShowInCView.tooltip=Show current resource in C/C++ Projects view - -ClassFileEditor.error.invalid_input_message=Invalid input for Class File Editor - -ClassFileMarkerAnnotationModel.error.isAcceptable=ClassFileMarkerAnnotationModel.isAcceptable -ClassFileMarkerAnnotationModel.error.isAffected=ClassFileMarkerAnnotationModel.isAffected -ClassFileMarkerAnnotationModel.error.resourceChanged=ClassFileMarkerAnnotationModel.resourceChanged - -CEditor.error.saving.message=Save could not be completed. {0} -CEditor.error.saving.title=Problems During Save As... - CEditorPreferencePage.description= C Editor Preferences -DeleteISourceManipulations.description=Delete the selected element in the editor -DeleteISourceManipulations.error.deleting.message1=Cannot delete element: -DeleteISourceManipulations.error.deleting.title1=Problems while deleting element -DeleteISourceManipulations.label=&Delete -DeleteISourceManipulations.tooltip=Delete the selected element in the editor - -EditorDisplay.description=Display -EditorDisplay.label=D&isplay -EditorDisplay.tooltip=Display -EditorDisplay.error.title1=Cannot open Display viewer - -JavaOutlinePage.ContextMenu.refactoring.label=&Refactor -JavaOutlinePage.HideFields.description.checked=Shows Fields -JavaOutlinePage.HideFields.description.unchecked=Hides Fields -JavaOutlinePage.HideFields.label=Hide Fields -JavaOutlinePage.HideFields.tooltip.checked=Show Fields -JavaOutlinePage.HideFields.tooltip.unchecked=Hide Fields -JavaOutlinePage.HideNonePublicMembers.description.checked=Shows non-public members -JavaOutlinePage.HideNonePublicMembers.description.unchecked=Hides non-public members -JavaOutlinePage.HideNonePublicMembers.label=Show Public Members Only -JavaOutlinePage.HideNonePublicMembers.tooltip.checked=Show Non-Public Members -JavaOutlinePage.HideNonePublicMembers.tooltip.unchecked=Hide Non-Public Members -JavaOutlinePage.HideStaticMembers.description.checked=Shows static members -JavaOutlinePage.HideStaticMembers.description.unchecked=Hides static members -JavaOutlinePage.HideStaticMembers.label=Hide Static Members -JavaOutlinePage.HideStaticMembers.tooltip.checked=Show Static Members -JavaOutlinePage.HideStaticMembers.tooltip.unchecked=Hide Static Members -JavaOutlinePage.Sort.description.checked=Disable Sorting -JavaOutlinePage.Sort.description.unchecked=Enable Sorting -JavaOutlinePage.Sort.label=Sort -JavaOutlinePage.Sort.tooltip.checked=Do Not Sort -JavaOutlinePage.Sort.tooltip.unchecked=Sort -JavaOutlinePage.error.ChildrenProvider.getChildren.message1=JavaOutlinePage.ChildrenProvider.getChildren -JavaOutlinePage.error.ChildrenProvider.hasChildren.message1=JavaOutlinePage.ChildrenProvider.hasChildren - OpenHierarchy.description=Show the type hierarchy of the selected element OpenHierarchy.dialog.message=&Select the type to open: OpenHierarchy.dialog.title=Open Type Hierarchy -OpenHierarchy.label=Open Type &Hierarchy@F4 +OpenHierarchy.label=Open Type &Hierarchy OpenHierarchy.tooltip=Show the type hierarchy of the selected element OpenDeclarations.description=Open an editor on the selected element's declaration OpenDeclarations.dialog.message=&Select or enter the element to open: OpenDeclarations.dialog.title=Open Declaration -OpenDeclarations.label=&Open Declaration@F3 +OpenDeclarations.label=&Open Declaration OpenDeclarations.tooltip=Open an editor on the selected element's declaration OpenDefinition.description=Open an editor on the selected element's definition -OpenDefinition.label=Open &Definition@Ctrl+F3 +OpenDefinition.label=Open &Definition OpenDefinition.tooltip=Open an editor on the selected element's definition -OpenOutline.description=Shows outline -OpenOutline.dialog.title=Show outline -OpenOutline.label=&Show outline@Ctrl+O -OpenOutline.tooltip=Shows outline - -OrganizeImports.description=Evaluate all required imports and replace the current imports -OrganizeImports.error.message2=Syntax errors in compilation unit prevent correct evaluation\nof type references. Fix errors first. -OrganizeImports.error.title1=Organize Imports -OrganizeImports.error.title2=Organize Imports -OrganizeImports.label=Or&ganize Imports@Ctrl+Shift+O -OrganizeImports.ok_label=OK -OrganizeImports.tooltip=Evaluate All Required Imports and Replace the Current Imports - -RunToLine.description=Run to line -RunToLine.error.message1=Unable to process run to line request. -RunToLine.error.title1=Run to Line -RunToLine.label=R&un to Line -RunToLine.tooltip=Run to line +OpenOutline.label= Quick Out&line +OpenOutline.tooltip= Shows the Quick Outline of Editor Input +OpenOutline.description= Shows the quick outline for the editor input TogglePresentation.label=Show Source of Selected Element Only TogglePresentation.tooltip=Show Source of Selected Element Only @@ -124,19 +61,6 @@ ContentAssistProposal.label=Co&ntent Assist ContentAssistProposal.tooltip=Content Assist ContentAssistProposal.description=Content Assist -RunToLine.label=R&un to Line -RunToLine.description=Run to line -RunToLine.error.title1=Run To Line -RunToLine.error.message1=Unable to process run to line request. - -Comment.label=&Comment -Comment.tooltip=Comment the Selected Lines -Comment.description=Turn the selected lines into C // style comments - -Uncomment.label=Uncommen&t -Uncomment.tooltip=Uncomment the Selected C // comment Lines -Uncomment.description=Uncomment the selected C // comment lines - ToggleComment.label=Comment/Uncomment ToggleComment.tooltip=Comment/Uncomment For the Selected Lines ToggleComment.description=Comment/Uncomment for the selected lines @@ -157,11 +81,11 @@ Format.label=F&ormat Format.tooltip=Format the Selected Text Format.description=Format the selected text -ShiftRight.label=Sh&ift Right@Ctrl+I +ShiftRight.label=Sh&ift Right ShiftRight.tooltip=Shift Right ShiftRight.description=Shift the selected text to the right -ShiftLeft.label=S&hift Left@Ctrl+Shift+I +ShiftLeft.label=S&hift Left ShiftLeft.tooltip=Shift Left ShiftLeft.description=Shift the selected text to the left @@ -173,12 +97,6 @@ PreviousAnnotation.label= Pre&vious Annotation PreviousAnnotation.tooltip= Previous Annotation PreviousAnnotation.description= Previous Annotation -CompilationUnitDocumentProvider.error.createElementInfo=CompilationUnitDocumentProvider.createElementInfo -CompilationUnitDocumentProvider.out_of_sync.message=Compilation unit buffer and document are out of sync - -JavaEditor.Inspect.description=Inspect the result of evaluating the selected text -JavaEditor.Inspect.label=I&nspect -JavaEditor.Inspect.tooltip=Inspect the Result of Evaluating the Selected Text AddIncludeOnSelectionAction.error.noInput=no Editor Input DefaultCEditorTextHover.html.name=Name: DefaultCEditorTextHover.html.prototype=
Protoype: @@ -187,16 +105,22 @@ CContentOutlinePage.menu.fileSearch=File Search CContentOutlinePage.error.noInput=no Editor Input CEditor.menu.fileSearch=File Search CEditor.menu.search=Search +CEditor.menu.folding=F&olding EditorUtility.concatModifierStrings= {0} + {1} OpenOnSelection.label=Open On Selection -GotoNextMember.description=Goes to next member -GotoNextMember.label=Go to &next member -GotoNextMember.tooltip=Goes to next member -GotoPrevMember.description=Goes to previous member -GotoPrevMember.label=Go to &previous member -GotoPrevMember.tooltip=Goes to previous member. +GotoNextMember.label= N&ext Member +GotoNextMember.tooltip=Move the Caret to the Next Member of the Translation Unit +GotoNextMember.description=Move the caret to the next member of the translation unit + +GotoPreviousMember.label= Previ&ous Member +GotoPreviousMember.tooltip=Move the Caret to the Previous Member of the Translation Unit +GotoPreviousMember.description=Move the caret to the previous member of the translation unit + +GotoMatchingBracket.label= Matching &Bracket +GotoMatchingBracket.tooltip=Go to Matching Bracket +GotoMatchingBracket.description=Go to Matching Bracket ShowToolTip.label=Show T&ooltip Description @@ -232,3 +156,8 @@ SemanticHighlighting_typeDef= Typedefs SemanticHighlighting_namespace= Namespaces SemanticHighlighting_label= Labels SemanticHighlighting_problem= Problems + +ToggleInsertMode.label=Sma&rt Insert Mode +ToggleInsertMode.tooltip=Toggle Smart Insert Mode +ToggleInsertMode.image= +ToggleInsertMode.description= Toggles smart insert mode diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/CdtActionConstants.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/CdtActionConstants.java index 90fee8b10c8..575121a8d79 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/CdtActionConstants.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/CdtActionConstants.java @@ -30,18 +30,6 @@ public class CdtActionConstants { */ public static final String GOTO_TYPE= "org.eclipse.cdt.ui.actions.GoToType"; //$NON-NLS-1$ - /** - * Navigate menu: name of standard Goto Package global action - * (value "org.eclipse.cdt.ui.actions.GoToPackage"). - */ - public static final String GOTO_PACKAGE= "org.eclipse.cdt.ui.actions.GoToPackage"; //$NON-NLS-1$ - - /** - * Navigate menu: name of standard Open global action - * (value "org.eclipse.cdt.ui.actions.Open"). - */ - public static final String OPEN= "org.eclipse.cdt.ui.actions.Open"; //$NON-NLS-1$ - /** * Navigate menu: name of standard Open Super Implementation global action * (value "org.eclipse.cdt.ui.actions.OpenSuperImplementation"). @@ -61,32 +49,8 @@ public class CdtActionConstants { */ public static final String OPEN_CALL_HIERARCHY= "org.eclipse.cdt.ui.actions.OpenCallHierarchy"; //$NON-NLS-1$ - /** - * Navigate menu: name of standard Open External Javadoc global action - * (value "org.eclipse.cdt.ui.actions.OpenExternalJavaDoc"). - */ - public static final String OPEN_EXTERNAL_JAVA_DOC= "org.eclipse.cdt.ui.actions.OpenExternalJavaDoc"; //$NON-NLS-1$ - - /** - * Navigate menu: name of standard Show in Packages View global action - * (value "org.eclipse.cdt.ui.actions.ShowInPackagesView"). - */ - public static final String SHOW_IN_PACKAGE_VIEW= "org.eclipse.cdt.ui.actions.ShowInPackagesView"; //$NON-NLS-1$ - - /** - * Navigate menu: name of standard Show in Navigator View global action - * (value "org.eclipse.cdt.ui.actions.ShowInNaviagtorView"). - */ - public static final String SHOW_IN_NAVIGATOR_VIEW= "org.eclipse.cdt.ui.actions.ShowInNaviagtorView"; //$NON-NLS-1$ - // Edit menu - /** - * Edit menu: name of standard Show Javadoc global action - * (value "org.eclipse.cdt.ui.actions.ShowJavaDoc"). - */ - public static final String SHOW_JAVA_DOC= "org.eclipse.cdt.ui.actions.ShowJavaDoc"; //$NON-NLS-1$ - /** * Edit menu: name of standard Code Assist global action * (value "org.eclipse.cdt.ui.actions.ContentAssist"). @@ -133,8 +97,6 @@ public class CdtActionConstants { /** * Source menu: name of standard Indent global action * (value "org.eclipse.cdt.ui.actions.Indent"). - * - * @since 3.0 */ public static final String INDENT= "org.eclipse.cdt.ui.actions.Indent"; //$NON-NLS-1$ @@ -157,28 +119,14 @@ public class CdtActionConstants { public static final String FORMAT= "org.eclipse.cdt.ui.actions.Format"; //$NON-NLS-1$ /** - * Source menu: name of standard Format Element global action - * (value "org.eclipse.cdt.ui.actions.FormatElement"). - * @since 3.0 + * Source menu: name of standard Add Include global action + * (value "org.eclipse.cdt.ui.actions.AddInclude"). */ - public static final String FORMAT_ELEMENT= "org.eclipse.cdt.ui.actions.FormatElement"; //$NON-NLS-1$ + public static final String ADD_INCLUDE= "org.eclipse.cdt.ui.actions.AddInclude"; //$NON-NLS-1$ - /** - * Source menu: name of standard Add Import global action - * (value "org.eclipse.cdt.ui.actions.AddImport"). - */ - public static final String ADD_IMPORT= "org.eclipse.cdt.ui.actions.AddImport"; //$NON-NLS-1$ - - /** - * Source menu: name of standard Organize Imports global action - * (value "org.eclipse.cdt.ui.actions.OrganizeImports"). - */ - public static final String ORGANIZE_IMPORTS= "org.eclipse.cdt.ui.actions.OrganizeImports"; //$NON-NLS-1$ - /** * Source menu: name of standard Sort Members global action (value * "org.eclipse.cdt.ui.actions.SortMembers"). - * @since 2.1 */ public static final String SORT_MEMBERS= "org.eclipse.cdt.ui.actions.SortMembers"; //$NON-NLS-1$ @@ -203,7 +151,6 @@ public class CdtActionConstants { /** * Source menu: name of standard delegate methods global action (value * "org.eclipse.cdt.ui.actions.GenerateDelegateMethods"). - * @since 2.1 */ public static final String GENERATE_DELEGATE_METHODS= "org.eclipse.cdt.ui.actions.GenerateDelegateMethods"; //$NON-NLS-1$ @@ -220,10 +167,10 @@ public class CdtActionConstants { public static final String GENERATE_CONSTRUCTOR_USING_FIELDS= "org.eclipse.cdt.ui.actions.GenerateConstructorUsingFields"; //$NON-NLS-1$ /** - * Source menu: name of standard Add Javadoc Comment global action - * (value "org.eclipse.cdt.ui.actions.AddJavaDocComment"). + * Source menu: name of standard Add Cppdoc Comment global action + * (value "org.eclipse.cdt.ui.actions.AddCppDocComment"). */ - public static final String ADD_JAVA_DOC_COMMENT= "org.eclipse.cdt.ui.actions.AddJavaDocComment"; //$NON-NLS-1$ + public static final String ADD_CPP_DOC_COMMENT= "org.eclipse.cdt.ui.actions.AddCppDocComment"; //$NON-NLS-1$ /** * Source menu: name of standard Find Strings to Externalize global action @@ -237,24 +184,6 @@ public class CdtActionConstants { */ public static final String EXTERNALIZE_STRINGS= "org.eclipse.cdt.ui.actions.ExternalizeStrings"; //$NON-NLS-1$ - /** - * Source menu: name of standard Convert Line Delimiters To Windows global action - * (value "org.eclipse.cdt.ui.actions.ConvertLineDelimitersToWindows"). - */ - public static final String CONVERT_LINE_DELIMITERS_TO_WINDOWS= "org.eclipse.cdt.ui.actions.ConvertLineDelimitersToWindows"; //$NON-NLS-1$ - - /** - * Source menu: name of standard Convert Line Delimiters To UNIX global action - * (value "org.eclipse.cdt.ui.actions.ConvertLineDelimitersToUNIX"). - */ - public static final String CONVERT_LINE_DELIMITERS_TO_UNIX= "org.eclipse.cdt.ui.actions.ConvertLineDelimitersToUNIX"; //$NON-NLS-1$ - - /** - * Source menu: name of standardConvert Line Delimiters To Mac global action - * (value "org.eclipse.cdt.ui.actions.ConvertLineDelimitersToMac"). - */ - public static final String CONVERT_LINE_DELIMITERS_TO_MAC= "org.eclipse.cdt.ui.actions.ConvertLineDelimitersToMac"; //$NON-NLS-1$ - // Refactor menu /** @@ -278,8 +207,6 @@ public class CdtActionConstants { /** * Refactor menu: name of standard Push Down global action * (value "org.eclipse.cdt.ui.actions.PushDown"). - * - * @since 2.1 */ public static final String PUSH_DOWN= "org.eclipse.cdt.ui.actions.PushDown"; //$NON-NLS-1$ @@ -295,13 +222,6 @@ public class CdtActionConstants { */ public static final String RENAME= "org.eclipse.cdt.ui.actions.Rename"; //$NON-NLS-1$ - /** - * Refactor menu: name of standard Inline Temp global action - * (value "org.eclipse.cdt.ui.actions.InlineTemp"). - * @deprecated Use INLINE - */ - public static final String INLINE_TEMP= "org.eclipse.cdt.ui.actions.InlineTemp"; //$NON-NLS-1$ - /** * Refactor menu: name of standard Extract Temp global action * (value "org.eclipse.cdt.ui.actions.ExtractTemp"). @@ -311,24 +231,18 @@ public class CdtActionConstants { /** * Refactor menu: name of standard Extract Constant global action * (value "org.eclipse.cdt.ui.actions.ExtractConstant"). - * - * @since 2.1 */ public static final String EXTRACT_CONSTANT= "org.eclipse.cdt.ui.actions.ExtractConstant"; //$NON-NLS-1$ /** * Refactor menu: name of standard Introduce Parameter global action * (value "org.eclipse.cdt.ui.actions.IntroduceParameter"). - * - * @since 3.0 */ public static final String INTRODUCE_PARAMETER= "org.eclipse.cdt.ui.actions.IntroduceParameter"; //$NON-NLS-1$ /** * Refactor menu: name of standard Introduce Factory global action * (value "org.eclipse.cdt.ui.actions.IntroduceFactory"). - * - * @since 3.0 */ public static final String INTRODUCE_FACTORY= "org.eclipse.cdt.ui.actions.IntroduceFactory"; //$NON-NLS-1$ @@ -341,56 +255,42 @@ public class CdtActionConstants { /** * Refactor menu: name of standard Inline global action * (value "org.eclipse.cdt.ui.actions.Inline"). - * - * @since 2.1 */ public static final String INLINE= "org.eclipse.cdt.ui.actions.Inline"; //$NON-NLS-1$ /** * Refactor menu: name of standard Extract Interface global action * (value "org.eclipse.cdt.ui.actions.ExtractInterface"). - * - * @since 2.1 */ public static final String EXTRACT_INTERFACE= "org.eclipse.cdt.ui.actions.ExtractInterface"; //$NON-NLS-1$ /** * Refactor menu: name of standard Generalize Type global action * (value "org.eclipse.cdt.ui.actions.ChangeType"). - * - * @since 3.0 */ public static final String CHANGE_TYPE= "org.eclipse.cdt.ui.actions.ChangeType"; //$NON-NLS-1$ /** * Refactor menu: name of standard global action to convert a nested type to a top level type * (value "org.eclipse.cdt.ui.actions.MoveInnerToTop"). - * - * @since 2.1 */ public static final String CONVERT_NESTED_TO_TOP= "org.eclipse.cdt.ui.actions.ConvertNestedToTop"; //$NON-NLS-1$ /** * Refactor menu: name of standard Use Supertype global action * (value "org.eclipse.cdt.ui.actions.UseSupertype"). - * - * @since 2.1 */ public static final String USE_SUPERTYPE= "org.eclipse.cdt.ui.actions.UseSupertype"; //$NON-NLS-1$ /** * Refactor menu: name of standard global action to convert a local * variable to a field (value "org.eclipse.cdt.ui.actions.ConvertLocalToField"). - * - * @since 2.1 */ public static final String CONVERT_LOCAL_TO_FIELD= "org.eclipse.cdt.ui.actions.ConvertLocalToField"; //$NON-NLS-1$ /** * Refactor menu: name of standard Covert Anonymous to Nested global action * (value "org.eclipse.cdt.ui.actions.ConvertAnonymousToNested"). - * - * @since 2.1 */ public static final String CONVERT_ANONYMOUS_TO_NESTED= "org.eclipse.cdt.ui.actions.ConvertAnonymousToNested"; //$NON-NLS-1$ @@ -515,16 +415,12 @@ public class CdtActionConstants { /** * Search menu: name of standard Occurrences in File global action (value * "org.eclipse.cdt.ui.actions.OccurrencesInFile"). - * - * @since 2.1 */ public static final String FIND_OCCURRENCES_IN_FILE= "org.eclipse.cdt.ui.actions.OccurrencesInFile"; //$NON-NLS-1$ /** * Search menu: name of standard Find exception occurrences global action (value * "org.eclipse.cdt.ui.actions.ExceptionOccurrences"). - * - * @since 3.0 */ public static final String FIND_EXCEPTION_OCCURRENCES= "org.eclipse.cdt.ui.actions.ExceptionOccurrences"; //$NON-NLS-1$ } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/GenerateActionGroup.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/GenerateActionGroup.java new file mode 100644 index 00000000000..c6faefc6f4e --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/GenerateActionGroup.java @@ -0,0 +1,497 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 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 + * Anton Leherbauer (Wind River Systems) - Adapted for CDT + *******************************************************************************/ +package org.eclipse.cdt.ui.actions; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.jface.util.Assert; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IViewPart; +import org.eclipse.ui.IWorkbenchSite; +import org.eclipse.ui.actions.ActionGroup; +import org.eclipse.ui.actions.AddBookmarkAction; +import org.eclipse.ui.actions.AddTaskAction; +import org.eclipse.ui.handlers.IHandlerService; +import org.eclipse.ui.ide.IDEActionFactory; +import org.eclipse.ui.part.Page; +import org.eclipse.ui.texteditor.ITextEditorActionConstants; +import org.eclipse.ui.texteditor.IUpdate; +import org.eclipse.ui.texteditor.IWorkbenchActionDefinitionIds; + +import org.eclipse.cdt.internal.ui.IContextMenuConstants; +import org.eclipse.cdt.internal.ui.actions.ActionMessages; +import org.eclipse.cdt.internal.ui.editor.AddIncludeOnSelectionAction; +import org.eclipse.cdt.internal.ui.editor.CEditor; +import org.eclipse.cdt.internal.ui.editor.ICEditorActionDefinitionIds; + +/** + * Action group that adds the source and generate actions to a part's context + * menu and installs handlers for the corresponding global menu actions. + * + *

+ * This class may be instantiated; it is not intended to be subclassed. + *

+ * + * @since 4.0 + */ +public class GenerateActionGroup extends ActionGroup { + + /** + * Pop-up menu: id of the source sub menu (value org.eclipse.cdt.ui.source.menu). + */ + public static final String MENU_ID= "org.eclipse.cdt.ui.source.menu"; //$NON-NLS-1$ + + /** + * Pop-up menu: id of the organize group of the source sub menu (value + * organizeGroup). + */ + public static final String GROUP_ORGANIZE= "organizeGroup"; //$NON-NLS-1$ + + /** + * Pop-up menu: id of the generate group of the source sub menu (value + * generateGroup). + */ + public static final String GROUP_GENERATE= "generateGroup"; //$NON-NLS-1$ + + /** + * Pop-up menu: id of the code group of the source sub menu (value + * codeGroup). + */ + public static final String GROUP_CODE= "codeGroup"; //$NON-NLS-1$ + + /** + * Pop-up menu: id of the externalize group of the source sub menu (value + * externalizeGroup). + */ + private static final String GROUP_EXTERNALIZE= "externalizeGroup"; //$NON-NLS-1$ + + /** + * Pop-up menu: id of the comment group of the source sub menu (value + * commentGroup). + */ + private static final String GROUP_COMMENT= "commentGroup"; //$NON-NLS-1$ + + /** + * Pop-up menu: id of the edit group of the source sub menu (value + * editGroup). + */ + private static final String GROUP_EDIT= "editGroup"; //$NON-NLS-1$ + + private CEditor fEditor; + private IWorkbenchSite fSite; + private String fGroupName= IContextMenuConstants.GROUP_REORGANIZE; + private List fRegisteredSelectionListeners; + + private AddIncludeOnSelectionAction fAddInclude; +// private OverrideMethodsAction fOverrideMethods; +// private GenerateHashCodeEqualsAction fHashCodeEquals; +// private AddGetterSetterAction fAddGetterSetter; +// private AddDelegateMethodsAction fAddDelegateMethods; +// private AddUnimplementedConstructorsAction fAddUnimplementedConstructors; +// private GenerateNewConstructorUsingFieldsAction fGenerateConstructorUsingFields; +// private AddJavaDocStubAction fAddCppDocStub; + private AddBookmarkAction fAddBookmark; + private AddTaskAction fAddTaskAction; +// private ExternalizeStringsAction fExternalizeStrings; +// private CleanUpAction fCleanUp; +// +// private OrganizeIncludesAction fOrganizeIncludes; +// private SortMembersAction fSortMembers; +// private FormatAllAction fFormatAll; +// private CopyQualifiedNameAction fCopyQualifiedNameAction; +// +// private static final String QUICK_MENU_ID= "org.eclipse.cdt.ui.edit.text.c.source.quickMenu"; //$NON-NLS-1$ +// +// private class RefactorQuickAccessAction extends CDTQuickMenuAction { +// public RefactorQuickAccessAction(CEditor editor) { +// super(editor, QUICK_MENU_ID); +// } +// protected void fillMenu(IMenuManager menu) { +// fillQuickMenu(menu); +// } +// } +// +// private RefactorQuickAccessAction fQuickAccessAction; +// private IKeyBindingService fKeyBindingService; + + /** + * Note: This constructor is for internal use only. Clients should not call this constructor. + * @param editor the C editor + * @param groupName the group name to add the action to + */ + public GenerateActionGroup(CEditor editor, String groupName) { + fSite= editor.getSite(); + fEditor= editor; + fGroupName= groupName; + + fAddInclude= new AddIncludeOnSelectionAction(editor); + fAddInclude.setActionDefinitionId(ICEditorActionDefinitionIds.ADD_INCLUDE); + editor.setAction("AddIncludeOnSelection", fAddInclude); //$NON-NLS-1$ + +// fOrganizeIncludes= new OrganizeIncludesAction(editor); +// fOrganizeIncludes.setActionDefinitionId(ICEditorActionDefinitionIds.ORGANIZE_INCLUDES); +// editor.setAction("OrganizeIncludes", fOrganizeIncludes); //$NON-NLS-1$ +// +// fSortMembers= new SortMembersAction(editor); +// fSortMembers.setActionDefinitionId(ICEditorActionDefinitionIds.SORT_MEMBERS); +// editor.setAction("SortMembers", fSortMembers); //$NON-NLS-1$ +// +// IAction pastAction= editor.getAction(ITextEditorActionConstants.PASTE);//IWorkbenchActionDefinitionIds.PASTE); +// fCopyQualifiedNameAction= new CopyQualifiedNameAction(editor, null, pastAction); +// fCopyQualifiedNameAction.setActionDefinitionId(CopyQualifiedNameAction.JAVA_EDITOR_ACTION_DEFINITIONS_ID); +// editor.setAction("CopyQualifiedName", fCopyQualifiedNameAction); //$NON-NLS-1$ +// +// fOverrideMethods= new OverrideMethodsAction(editor); +// fOverrideMethods.setActionDefinitionId(ICEditorActionDefinitionIds.OVERRIDE_METHODS); +// editor.setAction("OverrideMethods", fOverrideMethods); //$NON-NLS-1$ +// +// fAddGetterSetter= new AddGetterSetterAction(editor); +// fAddGetterSetter.setActionDefinitionId(ICEditorActionDefinitionIds.CREATE_GETTER_SETTER); +// editor.setAction("AddGetterSetter", fAddGetterSetter); //$NON-NLS-1$ +// +// fAddDelegateMethods= new AddDelegateMethodsAction(editor); +// fAddDelegateMethods.setActionDefinitionId(ICEditorActionDefinitionIds.CREATE_DELEGATE_METHODS); +// editor.setAction("AddDelegateMethods", fAddDelegateMethods); //$NON-NLS-1$ +// +// fAddUnimplementedConstructors= new AddUnimplementedConstructorsAction(editor); +// fAddUnimplementedConstructors.setActionDefinitionId(ICEditorActionDefinitionIds.ADD_UNIMPLEMENTED_CONTRUCTORS); +// editor.setAction("AddUnimplementedConstructors", fAddUnimplementedConstructors); //$NON-NLS-1$ +// +// fGenerateConstructorUsingFields= new GenerateNewConstructorUsingFieldsAction(editor); +// fGenerateConstructorUsingFields.setActionDefinitionId(ICEditorActionDefinitionIds.GENERATE_CONSTRUCTOR_USING_FIELDS); +// editor.setAction("GenerateConstructorUsingFields", fGenerateConstructorUsingFields); //$NON-NLS-1$ +// +// fHashCodeEquals= new GenerateHashCodeEqualsAction(editor); +// fHashCodeEquals.setActionDefinitionId(ICEditorActionDefinitionIds.GENERATE_HASHCODE_EQUALS); +// editor.setAction("GenerateHashCodeEquals", fHashCodeEquals); //$NON-NLS-1$ +// +// fAddCppDocStub= new AddJavaDocStubAction(editor); +// fAddCppDocStub.setActionDefinitionId(ICEditorActionDefinitionIds.ADD_JAVADOC_COMMENT); +// editor.setAction("AddJavadocComment", fAddCppDocStub); //$NON-NLS-1$ +// +// fCleanUp= new CleanUpAction(editor); +// fCleanUp.setActionDefinitionId(ICEditorActionDefinitionIds.CLEAN_UP); +// editor.setAction("CleanUp", fCleanUp); //$NON-NLS-1$ +// +// fExternalizeStrings= new ExternalizeStringsAction(editor); +// fExternalizeStrings.setActionDefinitionId(ICEditorActionDefinitionIds.EXTERNALIZE_STRINGS); +// editor.setAction("ExternalizeStrings", fExternalizeStrings); //$NON-NLS-1$ +// +// fQuickAccessAction= new RefactorQuickAccessAction(editor); +// fKeyBindingService= editor.getEditorSite().getKeyBindingService(); +// fKeyBindingService.registerAction(fQuickAccessAction); + } + + /** + * Creates a new GenerateActionGroup. The group + * requires that the selection provided by the page's selection provider + * is of type org.eclipse.jface.viewers.IStructuredSelection. + * + * @param page the page that owns this action group + */ + public GenerateActionGroup(Page page) { + this(page.getSite(), null); + } + + /** + * Creates a new GenerateActionGroup. The group + * requires that the selection provided by the part's selection provider + * is of type org.eclipse.jface.viewers.IStructuredSelection. + * + * @param part the view part that owns this action group + */ + public GenerateActionGroup(IViewPart part) { + this(part.getSite(), (IHandlerService)part.getSite().getService(IHandlerService.class)); + } + + private GenerateActionGroup(IWorkbenchSite site, IHandlerService handlerService) { + fSite= site; + ISelectionProvider provider= fSite.getSelectionProvider(); + ISelection selection= provider.getSelection(); + +// fOverrideMethods= new OverrideMethodsAction(site); +// fOverrideMethods.setActionDefinitionId(ICEditorActionDefinitionIds.OVERRIDE_METHODS); +// +// fAddGetterSetter= new AddGetterSetterAction(site); +// fAddGetterSetter.setActionDefinitionId(ICEditorActionDefinitionIds.CREATE_GETTER_SETTER); +// +// fAddDelegateMethods= new AddDelegateMethodsAction(site); +// fAddDelegateMethods.setActionDefinitionId(ICEditorActionDefinitionIds.CREATE_DELEGATE_METHODS); +// +// fAddUnimplementedConstructors= new AddUnimplementedConstructorsAction(site); +// fAddUnimplementedConstructors.setActionDefinitionId(ICEditorActionDefinitionIds.ADD_UNIMPLEMENTED_CONTRUCTORS); +// +// fGenerateConstructorUsingFields= new GenerateNewConstructorUsingFieldsAction(site); +// fGenerateConstructorUsingFields.setActionDefinitionId(ICEditorActionDefinitionIds.GENERATE_CONSTRUCTOR_USING_FIELDS); +// +// fHashCodeEquals= new GenerateHashCodeEqualsAction(site); +// fHashCodeEquals.setActionDefinitionId(ICEditorActionDefinitionIds.GENERATE_HASHCODE_EQUALS); +// +// fAddCppDocStub= new AddJavaDocStubAction(site); +// fAddCppDocStub.setActionDefinitionId(ICEditorActionDefinitionIds.ADD_JAVADOC_COMMENT); + + fAddBookmark= new AddBookmarkAction(site.getShell()); + fAddBookmark.setActionDefinitionId(IWorkbenchActionDefinitionIds.ADD_BOOKMARK); + + fAddTaskAction= new AddTaskAction(site.getShell()); + fAddTaskAction.setActionDefinitionId(IWorkbenchActionDefinitionIds.ADD_TASK); + +// fExternalizeStrings= new ExternalizeStringsAction(site); +// fExternalizeStrings.setActionDefinitionId(ICEditorActionDefinitionIds.EXTERNALIZE_STRINGS); +// +// fOrganizeIncludes= new OrganizeIncludesAction(site); +// fOrganizeIncludes.setActionDefinitionId(ICEditorActionDefinitionIds.ORGANIZE_INCLUDES); +// +// fSortMembers= new SortMembersAction(site); +// fSortMembers.setActionDefinitionId(ICEditorActionDefinitionIds.SORT_MEMBERS); +// +// fFormatAll= new FormatAllAction(site); +// fFormatAll.setActionDefinitionId(ICEditorActionDefinitionIds.FORMAT); +// +// fCleanUp= new CleanUpAction(site); +// fCleanUp.setActionDefinitionId(ICEditorActionDefinitionIds.CLEAN_UP); + + +// fOverrideMethods.update(selection); +// fAddGetterSetter.update(selection); +// fAddDelegateMethods.update(selection); +// fAddUnimplementedConstructors.update(selection); +// fGenerateConstructorUsingFields.update(selection); +// fHashCodeEquals.update(selection); +// fAddCppDocStub.update(selection); +// fExternalizeStrings.update(selection); +// fFindNLSProblems.update(selection); +// fCleanUp.update(selection); +// fOrganizeIncludes.update(selection); +// fSortMembers.update(selection); +// fFormatAll.update(selection); + if (selection instanceof IStructuredSelection) { + IStructuredSelection ss= (IStructuredSelection)selection; + fAddBookmark.selectionChanged(ss); + fAddTaskAction.selectionChanged(ss); + } else { + fAddBookmark.setEnabled(false); + fAddTaskAction.setEnabled(false); + } + +// registerSelectionListener(provider, fOverrideMethods); +// registerSelectionListener(provider, fAddGetterSetter); +// registerSelectionListener(provider, fAddDelegateMethods); +// registerSelectionListener(provider, fAddUnimplementedConstructors); +// registerSelectionListener(provider, fGenerateConstructorUsingFields); +// registerSelectionListener(provider, fHashCodeEquals); +// registerSelectionListener(provider, fAddCppDocStub); + registerSelectionListener(provider, fAddBookmark); +// registerSelectionListener(provider, fExternalizeStrings); +// registerSelectionListener(provider, fFindNLSProblems); +// registerSelectionListener(provider, fOrganizeIncludes); +// registerSelectionListener(provider, fFormatAll); +// registerSelectionListener(provider, fSortMembers); + registerSelectionListener(provider, fAddTaskAction); +// registerSelectionListener(provider, fCleanUp); + +// fKeyBindingService= keyBindingService; +// if (fKeyBindingService != null) { +// fQuickAccessAction= new RefactorQuickAccessAction(null); +// fKeyBindingService.registerAction(fQuickAccessAction); +// } + } + + private void registerSelectionListener(ISelectionProvider provider, ISelectionChangedListener listener) { + if (fRegisteredSelectionListeners == null) + fRegisteredSelectionListeners= new ArrayList(10); + provider.addSelectionChangedListener(listener); + fRegisteredSelectionListeners.add(listener); + } + + /* + * The state of the editor owning this action group has changed. + * This method does nothing if the group's owner isn't an + * editor. + */ + /** + * Note: This method is for internal use only. Clients should not call this method. + */ + public void editorStateChanged() { + Assert.isTrue(isEditorOwner()); + } + + /* + * Method declared in ActionGroup + */ + public void fillActionBars(IActionBars actionBar) { + super.fillActionBars(actionBar); + setGlobalActionHandlers(actionBar); + } + + /* + * Method declared in ActionGroup + */ + public void fillContextMenu(IMenuManager menu) { + super.fillContextMenu(menu); + String menuText= ActionMessages.getString("SourceMenu_label"); //$NON-NLS-1$ +// if (fQuickAccessAction != null) { +// menuText= fQuickAccessAction.addShortcut(menuText); +// } + IMenuManager subMenu= new MenuManager(menuText, MENU_ID); + int added= 0; + if (isEditorOwner()) { + added= fillEditorSubMenu(subMenu); + } else { + added= fillViewSubMenu(subMenu); + } + if (added > 0) + menu.appendToGroup(fGroupName, subMenu); + } + +// private void fillQuickMenu(IMenuManager menu) { +// if (isEditorOwner()) { +// fillEditorSubMenu(menu); +// } else { +// fillViewSubMenu(menu); +// } +// } + + private int fillEditorSubMenu(IMenuManager source) { + int added= 0; + source.add(new Separator(GROUP_COMMENT)); + added+= addEditorAction(source, "ToggleComment"); //$NON-NLS-1$ + added+= addEditorAction(source, "AddBlockComment"); //$NON-NLS-1$ + added+= addEditorAction(source, "RemoveBlockComment"); //$NON-NLS-1$ +// added+= addAction(source, fAddCppDocStub); + source.add(new Separator(GROUP_EDIT)); + added+= addEditorAction(source, ITextEditorActionConstants.SHIFT_RIGHT); + added+= addEditorAction(source, ITextEditorActionConstants.SHIFT_LEFT); + added+= addEditorAction(source, "Indent"); //$NON-NLS-1$ + added+= addEditorAction(source, "Format"); //$NON-NLS-1$ + source.add(new Separator(GROUP_ORGANIZE)); + added+= addAction(source, fAddInclude); +// added+= addAction(source, fOrganizeIncludes); +// added+= addAction(source, fSortMembers); +// added+= addAction(source, fCleanUp); + source.add(new Separator(GROUP_GENERATE)); + added+= addEditorAction(source, "ContentAssistProposal"); //$NON-NLS-1$ +// added+= addAction(source, fOverrideMethods); +// added+= addAction(source, fAddGetterSetter); +// added+= addAction(source, fAddDelegateMethods); +// added+= addAction(source, fHashCodeEquals); +// added+= addAction(source, fGenerateConstructorUsingFields); +// added+= addAction(source, fAddUnimplementedConstructors); + source.add(new Separator(GROUP_CODE)); + source.add(new Separator(GROUP_EXTERNALIZE)); +// added+= addAction(source, fExternalizeStrings); + return added; + } + + private int fillViewSubMenu(IMenuManager source) { + int added= 0; + source.add(new Separator(GROUP_COMMENT)); +// added+= addAction(source, fAddCppDocStub); + source.add(new Separator(GROUP_EDIT)); +// added+= addAction(source, fFormatAll); + source.add(new Separator(GROUP_ORGANIZE)); + added+= addAction(source, fAddInclude); +// added+= addAction(source, fOrganizeIncludes); +// added+= addAction(source, fSortMembers); +// added+= addAction(source, fCleanUp); + source.add(new Separator(GROUP_GENERATE)); +// added+= addAction(source, fOverrideMethods); +// added+= addAction(source, fAddGetterSetter); +// added+= addAction(source, fAddDelegateMethods); +// added+= addAction(source, fHashCodeEquals); +// added+= addAction(source, fGenerateConstructorUsingFields); +// added+= addAction(source, fAddUnimplementedConstructors); + source.add(new Separator(GROUP_CODE)); + source.add(new Separator(GROUP_EXTERNALIZE)); +// added+= addAction(source, fExternalizeStrings); +// added+= addAction(source, fFindNLSProblems); + return added; + } + + /* + * Method declared in ActionGroup + */ + public void dispose() { + if (fRegisteredSelectionListeners != null) { + ISelectionProvider provider= fSite.getSelectionProvider(); + for (Iterator iter= fRegisteredSelectionListeners.iterator(); iter.hasNext();) { + ISelectionChangedListener listener= (ISelectionChangedListener) iter.next(); + provider.removeSelectionChangedListener(listener); + } + } +// if (fQuickAccessAction != null && fKeyBindingService != null) { +// fKeyBindingService.unregisterAction(fQuickAccessAction); +// } + fEditor= null; + super.dispose(); + } + + private void setGlobalActionHandlers(IActionBars actionBar) { + actionBar.setGlobalActionHandler(CdtActionConstants.ADD_INCLUDE, fAddInclude); +// actionBar.setGlobalActionHandler(CdtActionConstants.OVERRIDE_METHODS, fOverrideMethods); +// actionBar.setGlobalActionHandler(CdtActionConstants.GENERATE_GETTER_SETTER, fAddGetterSetter); +// actionBar.setGlobalActionHandler(CdtActionConstants.GENERATE_DELEGATE_METHODS, fAddDelegateMethods); +// actionBar.setGlobalActionHandler(CdtActionConstants.ADD_CONSTRUCTOR_FROM_SUPERCLASS, fAddUnimplementedConstructors); +// actionBar.setGlobalActionHandler(CdtActionConstants.GENERATE_CONSTRUCTOR_USING_FIELDS, fGenerateConstructorUsingFields); +// actionBar.setGlobalActionHandler(CdtActionConstants.GENERATE_HASHCODE_EQUALS, fHashCodeEquals); +// actionBar.setGlobalActionHandler(CdtActionConstants.ADD_CPP_DOC_COMMENT, fAddCppDocStub); +// actionBar.setGlobalActionHandler(CdtActionConstants.EXTERNALIZE_STRINGS, fExternalizeStrings); +// actionBar.setGlobalActionHandler(CdtActionConstants.CLEAN_UP, fCleanUp); +// actionBar.setGlobalActionHandler(CdtActionConstants.ORGANIZE_INCLUDES, fOrganizeIncludes); +// actionBar.setGlobalActionHandler(CdtActionConstants.SORT_MEMBERS, fSortMembers); + if (!isEditorOwner()) { + // editor provides its own implementation of these actions. + actionBar.setGlobalActionHandler(IDEActionFactory.BOOKMARK.getId(), fAddBookmark); + actionBar.setGlobalActionHandler(IDEActionFactory.ADD_TASK.getId(), fAddTaskAction); +// actionBar.setGlobalActionHandler(CdtActionConstants.FORMAT, fFormatAll); + } else { +// actionBar.setGlobalActionHandler(CopyQualifiedNameAction.ACTION_HANDLER_ID, fCopyQualifiedNameAction); + } + } + + private int addAction(IMenuManager menu, IAction action) { + if (action != null && action.isEnabled()) { + menu.add(action); + return 1; + } + return 0; + } + + private int addEditorAction(IMenuManager menu, String actionID) { + if (fEditor == null) + return 0; + IAction action= fEditor.getAction(actionID); + if (action == null) + return 0; + if (action instanceof IUpdate) + ((IUpdate)action).update(); + if (action.isEnabled()) { + menu.add(action); + return 1; + } + return 0; + } + + private boolean isEditorOwner() { + return fEditor != null; + } +}