diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index 7483aada39d..9987402e556 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,6 @@ +2004-03-16 Hoda Amer + Fix for bug#54324 Refactor: Invoke rename refactoring from editor + 2004-03-15 Hoda Amer Fix for [Bug 54323] Refactor: Menu item from outline view diff --git a/core/org.eclipse.cdt.ui/refactor/org/eclipse/cdt/internal/ui/refactoring/actions/RenameRefactoringAction.java b/core/org.eclipse.cdt.ui/refactor/org/eclipse/cdt/internal/ui/refactoring/actions/RenameRefactoringAction.java index 9a76895f5f6..a41fbcc52d9 100644 --- a/core/org.eclipse.cdt.ui/refactor/org/eclipse/cdt/internal/ui/refactoring/actions/RenameRefactoringAction.java +++ b/core/org.eclipse.cdt.ui/refactor/org/eclipse/cdt/internal/ui/refactoring/actions/RenameRefactoringAction.java @@ -11,7 +11,12 @@ package org.eclipse.cdt.internal.ui.refactoring.actions; +import org.eclipse.cdt.core.model.CModelException; +import org.eclipse.cdt.core.model.ICElement; +import org.eclipse.cdt.core.model.ITranslationUnit; +import org.eclipse.cdt.internal.core.model.CElement; import org.eclipse.cdt.internal.corext.refactoring.RenameRefactoring; +import org.eclipse.cdt.internal.ui.cview.SelectionConverter; import org.eclipse.cdt.internal.ui.editor.CEditor; import org.eclipse.cdt.internal.ui.refactoring.RefactoringMessages; import org.eclipse.cdt.internal.ui.refactoring.UserInterfaceStarter; @@ -20,6 +25,7 @@ import org.eclipse.cdt.ui.actions.SelectionDispatchAction; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.widgets.Shell; @@ -47,6 +53,35 @@ public class RenameRefactoringAction extends SelectionDispatchAction { setEnabled(selection.size() == 1); } + public void selectionChanged(ITextSelection selection) { + boolean enable = true; + ICElement element = null; + try { + element = SelectionConverter.getElementAtOffset(fEditor); + }catch (CModelException e) { + enable = false; + } + if((element == null) || (element instanceof ITranslationUnit)){ + enable = false; + } + ITextSelection textSelection= (ITextSelection)fEditor.getSelectionProvider().getSelection(); + if( (((CElement)element).getIdStartPos() != textSelection.getOffset()) + || (((CElement)element).getIdLength() != textSelection.getLength())) { + enable = false; + } + setEnabled(enable); + } + + public void run(ITextSelection selection) { + try { + Object element= SelectionConverter.getElementAtOffset(fEditor); + RenameRefactoring refactoring= new RenameRefactoring(element); + run(refactoring, getShell()); + } catch (CoreException e) { + ExceptionHandler.handle(e, getShell(), RefactoringMessages.getString("RenameRefactoringAction.label"), //$NON-NLS-1$ + RefactoringMessages.getString("RenameRefactoringAction.unexpected_exception"));//$NON-NLS-1$ + } + } /* (non-Javadoc) * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.viewers.IStructuredSelection) 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 f68232e900a..caa149034da 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 @@ -28,6 +28,7 @@ import org.eclipse.cdt.internal.ui.text.CTextTools; import org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistPreference; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.IWorkingCopyManager; +import org.eclipse.cdt.ui.actions.RefactoringActionGroup; import org.eclipse.cdt.ui.actions.ShowInCViewAction; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; @@ -118,6 +119,7 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS private SearchDialogAction fSearchDialogAction; private ActionGroup fSelectionSearchGroup; + private ActionGroup fRefactoringActionGroup; protected ISelectionChangedListener fStatusLineClearer; @@ -499,6 +501,7 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS //Selection Search group fSelectionSearchGroup = new SelectionSearchGroup(this); + fRefactoringActionGroup = new RefactoringActionGroup(this); //Search items fFileSearchAction = new FileSearchAction(getSelectionProvider()); @@ -545,6 +548,7 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS addAction(menu, IContextMenuConstants.GROUP_GENERATE, "OpenDeclarations"); //$NON-NLS-1$ addAction(menu, IContextMenuConstants.GROUP_GENERATE, "ShowInCView"); //$NON-NLS-1$ + fRefactoringActionGroup.fillContextMenu(menu); fSelectionSearchGroup.fillContextMenu(menu); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/RefactoringActionGroup.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/RefactoringActionGroup.java index f626d530e0b..9ca5a291a2e 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/RefactoringActionGroup.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/actions/RefactoringActionGroup.java @@ -1,13 +1,13 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 +/********************************************************************** + * Copyright (c) 2004 Rational Software Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v0.5 * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html + * http://www.eclipse.org/legal/cpl-v05.html * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ + * Contributors: + * IBM Rational Software - Initial API and implementation +***********************************************************************/ package org.eclipse.cdt.ui.actions; import java.util.ArrayList; @@ -18,7 +18,6 @@ import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.internal.ui.IContextMenuConstants; import org.eclipse.cdt.internal.ui.actions.ActionMessages; import org.eclipse.cdt.internal.ui.editor.CEditor; -import org.eclipse.cdt.internal.ui.editor.ICEditorActionDefinitionIds; import org.eclipse.cdt.internal.ui.refactoring.RefactoringMessages; import org.eclipse.cdt.internal.ui.refactoring.actions.RedoRefactoringAction; import org.eclipse.cdt.internal.ui.refactoring.actions.RenameRefactoringAction; @@ -26,7 +25,6 @@ import org.eclipse.cdt.internal.ui.refactoring.actions.UndoRefactoringAction; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; -import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; @@ -35,9 +33,6 @@ import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; -import org.eclipse.swt.events.MenuAdapter; -import org.eclipse.swt.events.MenuEvent; -import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchSite; @@ -145,28 +140,28 @@ public class RefactoringActionGroup extends ActionGroup { /** * Note: This constructor is for internal use only. Clients should not call this constructor. */ - public RefactoringActionGroup(CEditor editor, String groupName) { - fSite= editor.getEditorSite(); + public RefactoringActionGroup(CEditor editor) { + fSite= editor.getEditorSite(); fEditor= editor; - fGroupName= groupName; + ISelectionProvider provider= editor.getSelectionProvider(); ISelection selection= provider.getSelection(); fEditorActions= new ArrayList(); fRenameAction= new RenameRefactoringAction(editor); - fRenameAction.setActionDefinitionId(ICEditorActionDefinitionIds.RENAME_ELEMENT); +// fRenameAction.setActionDefinitionId(ICEditorActionDefinitionIds.RENAME_ELEMENT); fRenameAction.update(selection); editor.setAction("RenameElement", fRenameAction); //$NON-NLS-1$ fEditorActions.add(fRenameAction); fUndoAction= new UndoRefactoringAction(editor); - fUndoAction.setActionDefinitionId(ICEditorActionDefinitionIds.UNDO_ACTION); +// fUndoAction.setActionDefinitionId(ICEditorActionDefinitionIds.UNDO_ACTION); fUndoAction.update(selection); editor.setAction("UndoAction", fUndoAction); //$NON-NLS-1$ fEditorActions.add(fUndoAction); fRedoAction= new RedoRefactoringAction(editor); - fRedoAction.setActionDefinitionId(ICEditorActionDefinitionIds.REDO_ACTION); +// fRedoAction.setActionDefinitionId(ICEditorActionDefinitionIds.REDO_ACTION); fRedoAction.update(selection); editor.setAction("RedoAction", fRedoAction); //$NON-NLS-1$ fEditorActions.add(fRedoAction); @@ -228,20 +223,21 @@ public class RefactoringActionGroup extends ActionGroup { } private void addRefactorSubmenu(IMenuManager menu) { - IMenuManager refactorSubmenu= new MenuManager(ActionMessages.getString("RefactorMenu.label"), MENU_ID); //$NON-NLS-1$ + IMenuManager refactorSubmenu= new MenuManager(ActionMessages.getString("RefactorMenu.label"), MENU_ID); //$NON-NLS-1$ if (fEditor != null) { - refactorSubmenu.addMenuListener(new IMenuListener() { - public void menuAboutToShow(IMenuManager manager) { - refactorMenuShown(manager); - } - }); - refactorSubmenu.add(fNoActionAvailable); + ITextSelection textSelection= (ITextSelection)fEditor.getSelectionProvider().getSelection(); + for (Iterator iter= fEditorActions.iterator(); iter.hasNext(); ) { + SelectionDispatchAction action= (SelectionDispatchAction)iter.next(); + action.update(textSelection); + } + refactorSubmenu.removeAll(); + if (fillRefactorMenu(refactorSubmenu) == 0) + refactorSubmenu.add(fNoActionAvailable); menu.appendToGroup(fGroupName, refactorSubmenu); } else { if (fillRefactorMenu(refactorSubmenu) > 0){ menu.appendToGroup(fGroupName, refactorSubmenu); } - } } @@ -261,37 +257,7 @@ public class RefactoringActionGroup extends ActionGroup { } return 0; } - - private void refactorMenuShown(final IMenuManager refactorSubmenu) { - // we know that we have an MenuManager since we created it in - // addRefactorSubmenu. - Menu menu= ((MenuManager)refactorSubmenu).getMenu(); - menu.addMenuListener(new MenuAdapter() { - public void menuHidden(MenuEvent e) { - refactorMenuHidden(refactorSubmenu); - } - }); - ITextSelection textSelection= (ITextSelection)fEditor.getSelectionProvider().getSelection(); -// CTextSelection javaSelection= new CTextSelection( -// getEditorInput(), getDocument(), textSelection.getOffset(), textSelection.getLength()); - - for (Iterator iter= fEditorActions.iterator(); iter.hasNext(); ) { - SelectionDispatchAction action= (SelectionDispatchAction)iter.next(); -// action.update(javaSelection); - } - refactorSubmenu.removeAll(); - if (fillRefactorMenu(refactorSubmenu) == 0) - refactorSubmenu.add(fNoActionAvailable); - } - - private void refactorMenuHidden(IMenuManager manager) { - ITextSelection textSelection= (ITextSelection)fEditor.getSelectionProvider().getSelection(); - for (Iterator iter= fEditorActions.iterator(); iter.hasNext(); ) { - SelectionDispatchAction action= (SelectionDispatchAction)iter.next(); - action.update(textSelection); - } - } - + private ICElement getEditorInput() { return CUIPlugin.getDefault().getWorkingCopyManager().getWorkingCopy( fEditor.getEditorInput());