diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index 3346df3da61..70088a13545 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,10 @@ +2005-01-26 Alain Magloire + Part of implementing PR 83112 + * src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java + Changes in the interface of the Core Model + * refactor/org/eclipse/cdt/internal/corext/refactoring/rename/RenameElementProcessor.java + * refactor/org/eclipse/cdt/internal/ui/refactoring/actions/RenameRefactoringAction.java + 2005-01-26 Alain Magloire Part of implementing PR 83112 * src/org/eclipse/cdt/internal/ui/cview/CView.java diff --git a/core/org.eclipse.cdt.ui/refactor/org/eclipse/cdt/internal/corext/refactoring/rename/RenameElementProcessor.java b/core/org.eclipse.cdt.ui/refactor/org/eclipse/cdt/internal/corext/refactoring/rename/RenameElementProcessor.java index 184001cc5e2..aeb168a7aa9 100644 --- a/core/org.eclipse.cdt.ui/refactor/org/eclipse/cdt/internal/corext/refactoring/rename/RenameElementProcessor.java +++ b/core/org.eclipse.cdt.ui/refactor/org/eclipse/cdt/internal/corext/refactoring/rename/RenameElementProcessor.java @@ -33,6 +33,7 @@ import org.eclipse.cdt.core.model.IMethodDeclaration; import org.eclipse.cdt.core.model.INamespace; import org.eclipse.cdt.core.model.IParent; import org.eclipse.cdt.core.model.ISourceManipulation; +import org.eclipse.cdt.core.model.ISourceRange; import org.eclipse.cdt.core.model.ISourceReference; import org.eclipse.cdt.core.model.IStructure; import org.eclipse.cdt.core.model.ITranslationUnit; @@ -148,13 +149,20 @@ public class RenameElementProcessor extends RenameProcessor implements IReferenc } private int getCurrentElementNameStartPos() { - if(fCElement == null) + if (fCElement == null) return 0; - String name = fCElement.getElementName(); - if (name.indexOf(QUALIFIER) != -1){ - return (((CElement)fCElement).getIdStartPos() + name.lastIndexOf(QUALIFIER) + 2); + try { + String name = fCElement.getElementName(); + ISourceReference sourceRef = (ISourceReference)fCElement; + ISourceRange range = sourceRef.getSourceRange(); + if (name.indexOf(QUALIFIER) != -1) { + return range.getIdStartPos() + name.lastIndexOf(QUALIFIER) + 2; + } + return range.getIdStartPos(); + } catch (CModelException e) { + // } - return ((CElement)fCElement).getIdStartPos(); + return 0; } private String getElementQualifiedName(ICElement element) throws CModelException{ 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 603c2152bb9..87d0c71f87e 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,9 +11,11 @@ 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.ISourceRange; +import org.eclipse.cdt.core.model.ISourceReference; 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.actions.SelectionConverter; import org.eclipse.cdt.internal.ui.editor.CEditor; @@ -68,10 +70,17 @@ public class RenameRefactoringAction extends SelectionDispatchAction { setEnabled(false); return; } - - if( (((CElement)element).getIdStartPos() != textSelection.getOffset()) - || (((CElement)element).getIdLength() != textSelection.getLength())) { - enable = false; + if (element instanceof ISourceReference) { + try { + ISourceReference sourceRef = (ISourceReference)element; + ISourceRange range = sourceRef.getSourceRange(); + if( (range.getIdStartPos() != textSelection.getOffset()) + || (range.getIdLength() != textSelection.getLength())) { + enable = false; + } + } catch (CModelException e) { + // + } } setEnabled(enable); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java index 5d3efd64e12..af447942974 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java @@ -14,6 +14,12 @@ import org.eclipse.cdt.internal.ui.CPluginImages; import org.eclipse.cdt.internal.ui.ICHelpContextIds; import org.eclipse.cdt.internal.ui.actions.AbstractToggleLinkingAction; import org.eclipse.cdt.internal.ui.actions.ActionMessages; +import org.eclipse.cdt.internal.ui.cview.SelectionTransferDragAdapter; +import org.eclipse.cdt.internal.ui.cview.SelectionTransferDropAdapter; +import org.eclipse.cdt.internal.ui.dnd.CDTViewerDragAdapter; +import org.eclipse.cdt.internal.ui.dnd.DelegatingDropAdapter; +import org.eclipse.cdt.internal.ui.dnd.TransferDragSourceListener; +import org.eclipse.cdt.internal.ui.dnd.TransferDropTargetListener; import org.eclipse.cdt.internal.ui.search.actions.SelectionSearchGroup; import org.eclipse.cdt.internal.ui.util.ProblemTreeViewer; import org.eclipse.cdt.internal.ui.viewsupport.DecoratingCLabelProvider; @@ -41,6 +47,8 @@ import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; +import org.eclipse.swt.dnd.DND; +import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; @@ -53,6 +61,7 @@ import org.eclipse.ui.part.IPageSite; import org.eclipse.ui.part.Page; import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds; import org.eclipse.ui.views.contentoutline.IContentOutlinePage; +import org.eclipse.ui.views.navigator.LocalSelectionTransfer; public class CContentOutlinePage extends Page implements IContentOutlinePage, ISelectionChangedListener { private CEditor fEditor; @@ -236,7 +245,9 @@ public class CContentOutlinePage extends Page implements IContentOutlinePage, IS treeViewer.setLabelProvider(new DecoratingCLabelProvider(new StandardCElementLabelProvider(), true)); treeViewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS); treeViewer.addSelectionChangedListener(this); - + + initDragAndDrop(); + MenuManager manager= new MenuManager(fContextMenuId); manager.setRemoveAllWhenShown(true); manager.addMenuListener(new IMenuListener() { @@ -430,5 +441,24 @@ public class CContentOutlinePage extends Page implements IContentOutlinePage, IS } contentUpdated(); } - + + private void initDragAndDrop() { + int ops= DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK; + Transfer[] transfers= new Transfer[] { + LocalSelectionTransfer.getInstance() + }; + + // Drop Adapter + TransferDropTargetListener[] dropListeners= new TransferDropTargetListener[] { + new SelectionTransferDropAdapter(treeViewer) + }; + treeViewer.addDropSupport(ops | DND.DROP_DEFAULT, transfers, new DelegatingDropAdapter(dropListeners)); + + // Drag Adapter + TransferDragSourceListener[] dragListeners= new TransferDragSourceListener[] { + new SelectionTransferDragAdapter(treeViewer) + }; + treeViewer.addDragSupport(ops, transfers, new CDTViewerDragAdapter(treeViewer, dragListeners)); + } + }