diff --git a/core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF index 30b6fc52ed8..689e852e668 100644 --- a/core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF +++ b/core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.cdt.ui; singleton:=true -Bundle-Version: 6.4.200.qualifier +Bundle-Version: 6.5.0.qualifier Bundle-Activator: org.eclipse.cdt.ui.CUIPlugin Bundle-Vendor: %providerName Bundle-Localization: plugin diff --git a/core/org.eclipse.cdt.ui/icons/dlcl16/cpyqual_menu.png b/core/org.eclipse.cdt.ui/icons/dlcl16/cpyqual_menu.png new file mode 100644 index 00000000000..f11e70bb4b9 Binary files /dev/null and b/core/org.eclipse.cdt.ui/icons/dlcl16/cpyqual_menu.png differ diff --git a/core/org.eclipse.cdt.ui/icons/elcl16/cpyqual_menu.png b/core/org.eclipse.cdt.ui/icons/elcl16/cpyqual_menu.png new file mode 100644 index 00000000000..7cb025686dd Binary files /dev/null and b/core/org.eclipse.cdt.ui/icons/elcl16/cpyqual_menu.png differ diff --git a/core/org.eclipse.cdt.ui/plugin.properties b/core/org.eclipse.cdt.ui/plugin.properties index 457ea7d8050..1ca78dfdc6d 100644 --- a/core/org.eclipse.cdt.ui/plugin.properties +++ b/core/org.eclipse.cdt.ui/plugin.properties @@ -82,6 +82,9 @@ asmEditor.description=Editor for Assembly Source Files category.source.name=C/C++ Source category.source.description= C/C++ Source Actions +ActionDefinition.copyQualifiedName.name= Copy Qualified Name +ActionDefinition.copyQualifiedName.description= Copy a fully qualified name to the system clipboard + ActionDefinition.sourceQuickMenu.name= Show Source Quick Menu ActionDefinition.sourceQuickMenu.description= Shows the source quick menu @@ -681,4 +684,6 @@ semanticHighlightingExtensionPoint = Semantic Highlighting Extension Point UserSettingEntries.name = CDT User Setting Entries -toolchains.preferences.name = Core Build Toolchains \ No newline at end of file +toolchains.preferences.name = Core Build Toolchains + +CopyQualifiedName.label= Cop&y Qualified Name \ No newline at end of file diff --git a/core/org.eclipse.cdt.ui/plugin.xml b/core/org.eclipse.cdt.ui/plugin.xml index 6246ea0e62c..802941373be 100644 --- a/core/org.eclipse.cdt.ui/plugin.xml +++ b/core/org.eclipse.cdt.ui/plugin.xml @@ -1960,6 +1960,14 @@ id="org.eclipse.cdt.ui.actions.AddInclude"> + + + + + null if no selection can be obtained or the + * editor is null. + * + * @return the selection of the action's editor, or null + */ + protected ITextSelection getCurrentSelection() { + if (fEditor != null) { + ISelectionProvider provider = fEditor.getSelectionProvider(); + if (provider != null) { + ISelection selection = provider.getSelection(); + if (selection instanceof ITextSelection) + return (ITextSelection) selection; + } + } + return null; + } + + @Override + public void run() { + ITextSelection textSelection = getCurrentSelection(); + + if (textSelection == null || !isValidSelection(textSelection)) { + return; + } + + final int offset = textSelection.getOffset(); + final int length = textSelection.getLength(); + ITranslationUnit translationUnit = (ITranslationUnit) CDTUITools + .getEditorInputCElement(fEditor.getEditorInput()); + String qualName = null; + try { + IASTTranslationUnit ast = translationUnit.getAST(null, 0); + if (ast != null) { + IASTNode enclosingNode = ast.getNodeSelector(null).findEnclosingNode(offset, length); + NameVisitor n = new NameVisitor(); + enclosingNode.accept(n); + qualName = n.getQualifiedName(); + } + } catch (CoreException e) { + CUIPlugin.log(e); + } + + final Shell shell = fEditor.getEditorSite().getShell(); + + if (qualName == null) { + MessageDialog.openInformation(shell, ActionMessages.CopyQualifiedNameAction_InfoDialogTitel, + ActionMessages.CopyQualifiedNameAction_NoElementToQualify); + return; + } + + Clipboard clipboard = new Clipboard(shell.getDisplay()); + try { + clipboard.setContents(new String[] { qualName }, new Transfer[] { TextTransfer.getInstance() }); + } catch (SWTError e) { + if (e.code != DND.ERROR_CANNOT_SET_CLIPBOARD) { + throw e; + } + if (MessageDialog.openQuestion(shell, ActionMessages.CopyQualifiedNameAction_ErrorTitle, + ActionMessages.CopyQualifiedNameAction_ErrorDescription)) { + clipboard.setContents(new String[] { qualName }, new Transfer[] { TextTransfer.getInstance() }); + } + } finally { + clipboard.dispose(); + } + } + +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ICEditorActionDefinitionIds.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ICEditorActionDefinitionIds.java index 7a46b6df4ec..81d8b31c120 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ICEditorActionDefinitionIds.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ICEditorActionDefinitionIds.java @@ -315,4 +315,10 @@ public interface ICEditorActionDefinitionIds extends ITextEditorActionDefinition * (value "org.eclipse.cdt.ui.edit.text.c.select.last"). */ public static final String SELECT_LAST = "org.eclipse.cdt.ui.edit.text.c.select.last"; //$NON-NLS-1$ + + /** + * Action definition ID of the edit -> copy qualified name + * (value "org.eclipse.cdt.ui.edit.text.c.copy.qualified.name"). + */ + public static final String COPY_QUALIFIED_NAME = "org.eclipse.cdt.ui.edit.text.c.copy.qualified.name"; //$NON-NLS-1$ } 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 e9aa791452d..6a3dfbfcbf4 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 @@ -494,4 +494,11 @@ public class CdtActionConstants { * "org.eclipse.cdt.ui.actions.ExceptionOccurrences"). */ public static final String FIND_EXCEPTION_OCCURRENCES = "org.eclipse.cdt.ui.actions.ExceptionOccurrences"; //$NON-NLS-1$ + + /** + * Source menu: name of standard action to copy fully qualified names (value + * "org.eclipse.cdt.ui.actions.CopyQualifiedName"). + * @since 6.5 + */ + public static final String COPY_QUALIFIED_NAME = "org.eclipse.cdt.ui.actions.CopyQualifiedName"; //$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 index 9039ada687d..933b70e474b 100644 --- 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 @@ -23,6 +23,7 @@ import org.eclipse.cdt.core.model.ISourceReference; import org.eclipse.cdt.internal.ui.IContextMenuConstants; import org.eclipse.cdt.internal.ui.actions.ActionMessages; import org.eclipse.cdt.internal.ui.actions.CDTQuickMenuCreator; +import org.eclipse.cdt.internal.ui.actions.CopyQualifiedNameAction; import org.eclipse.cdt.internal.ui.editor.AddIncludeAction; import org.eclipse.cdt.internal.ui.editor.CEditor; import org.eclipse.cdt.internal.ui.editor.ICEditorActionDefinitionIds; @@ -134,7 +135,7 @@ public class GenerateActionGroup extends ActionGroup implements ISelectionChange // private SortMembersAction fSortMembers; private SortLinesAction fSortLines; private FormatAllAction fFormatAll; - // private CopyQualifiedNameAction fCopyQualifiedNameAction; + private CopyQualifiedNameAction fCopyQualifiedNameAction; // private static final String QUICK_MENU_ID = "org.eclipse.cdt.ui.edit.text.c.source.quickMenu"; //$NON-NLS-1$ @@ -172,10 +173,10 @@ public class GenerateActionGroup extends ActionGroup implements ISelectionChange fSortLines.setActionDefinitionId(ICEditorActionDefinitionIds.SORT_LINES); editor.setAction("SortLines", fSortLines); //$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$ + fCopyQualifiedNameAction = new CopyQualifiedNameAction(editor); + fCopyQualifiedNameAction.setActionDefinitionId(ICEditorActionDefinitionIds.COPY_QUALIFIED_NAME); + editor.setAction("CopyQualifiedName", fCopyQualifiedNameAction); //$NON-NLS-1$ + editor.markAsSelectionDependentAction("CopyQualifiedName", true); //$NON-NLS-1$ // // fOverrideMethods= new OverrideMethodsAction(editor); // fOverrideMethods.setActionDefinitionId(ICEditorActionDefinitionIds.OVERRIDE_METHODS); @@ -307,6 +308,8 @@ public class GenerateActionGroup extends ActionGroup implements ISelectionChange // fFormatAll = new FormatAllAction(site); fFormatAll.setActionDefinitionId(ICEditorActionDefinitionIds.FORMAT); + // fCopyQualifiedNameAction = new CopyQualifiedNameAction(site); + // fCopyQualifiedNameAction.setActionDefinitionId(ICEditorActionDefinitionIds.COPY_QUALIFIED_NAME); // // fCleanUp= new CleanUpAction(site); // fCleanUp.setActionDefinitionId(ICEditorActionDefinitionIds.CLEAN_UP); @@ -346,6 +349,7 @@ public class GenerateActionGroup extends ActionGroup implements ISelectionChange // registerSelectionListener(fSelectionProvider, fSortMembers); registerSelectionListener(fSelectionProvider, fAddTaskAction); // registerSelectionListener(fSelectionProvider, fCleanUp); + // registerSelectionListener(fSelectionProvider, fCopyQualifiedNameAction); selectionChanged(new SelectionChangedEvent(fSelectionProvider, selection)); registerSelectionListener(fSelectionProvider, this); @@ -430,6 +434,7 @@ public class GenerateActionGroup extends ActionGroup implements ISelectionChange added += addEditorAction(source, ITextEditorActionConstants.SHIFT_LEFT); added += addEditorAction(source, "Indent"); //$NON-NLS-1$ added += addEditorAction(source, "Format"); //$NON-NLS-1$ + added += addAction(source, fCopyQualifiedNameAction); source.add(new Separator(GROUP_ORGANIZE)); added += addAction(source, fAddInclude); added += addAction(source, fOrganizeIncludes); @@ -456,6 +461,7 @@ public class GenerateActionGroup extends ActionGroup implements ISelectionChange // added+= addAction(source, fAddCppDocStub); source.add(new Separator(GROUP_EDIT)); added += addAction(source, fFormatAll); + added += addAction(source, fCopyQualifiedNameAction); source.add(new Separator(GROUP_ORGANIZE)); added += addAction(source, fAddInclude); added += addAction(source, fOrganizeIncludes); @@ -515,7 +521,7 @@ public class GenerateActionGroup extends ActionGroup implements ISelectionChange actionBar.setGlobalActionHandler(IDEActionFactory.ADD_TASK.getId(), fAddTaskAction); actionBar.setGlobalActionHandler(CdtActionConstants.FORMAT, fFormatAll); } else { - // actionBar.setGlobalActionHandler(CopyQualifiedNameAction.ACTION_HANDLER_ID, fCopyQualifiedNameAction); + actionBar.setGlobalActionHandler(CdtActionConstants.COPY_QUALIFIED_NAME, fCopyQualifiedNameAction); } }