diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index 70088a13545..a14a80783cf 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,26 @@ +2005-01-28 David Inglis + + Implement Eclipse 3.0 Next/Prev Annonation retargetable actions for CEditor with Problems + view highlighting. + + * plugin.xml + * src/org/eclipse/cdt/internal/ui/ICHelpContextIds.java + * src/org/eclipse/cdt/internal/ui/editor/CDocumentProvider.java + * src/org/eclipse/cdt/internal/ui/editor/CEditor.java + * src/org/eclipse/cdt/internal/ui/editor/CEditorActionContributor.java + * src/org/eclipse/cdt/internal/ui/editor/CEditorMessages.properties + + + src/org/eclipse/cdt/internal/ui/editor/GotoAnnotationAction.java + + - icons/full/ctool16/next_error_nav.gif + - icons/full/ctool16/prev_error_nav.gif + - icons/full/dtool16/next_error_nav.gif + - icons/full/dtool16/prev_error_nav.gif + - icons/full/etool16/next_error_nav.gif + - icons/full/etool16/prev_error_nav.gif + - src/org/eclipse/cdt/internal/ui/editor/GotoErrorAction.java + + 2005-01-26 Alain Magloire Part of implementing PR 83112 * src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java diff --git a/core/org.eclipse.cdt.ui/icons/full/ctool16/next_error_nav.gif b/core/org.eclipse.cdt.ui/icons/full/ctool16/next_error_nav.gif deleted file mode 100644 index 775842e89d1..00000000000 Binary files a/core/org.eclipse.cdt.ui/icons/full/ctool16/next_error_nav.gif and /dev/null differ diff --git a/core/org.eclipse.cdt.ui/icons/full/ctool16/prev_error_nav.gif b/core/org.eclipse.cdt.ui/icons/full/ctool16/prev_error_nav.gif deleted file mode 100644 index 3b1bb7ca128..00000000000 Binary files a/core/org.eclipse.cdt.ui/icons/full/ctool16/prev_error_nav.gif and /dev/null differ diff --git a/core/org.eclipse.cdt.ui/icons/full/dtool16/next_error_nav.gif b/core/org.eclipse.cdt.ui/icons/full/dtool16/next_error_nav.gif deleted file mode 100644 index 874bf69d422..00000000000 Binary files a/core/org.eclipse.cdt.ui/icons/full/dtool16/next_error_nav.gif and /dev/null differ diff --git a/core/org.eclipse.cdt.ui/icons/full/dtool16/prev_error_nav.gif b/core/org.eclipse.cdt.ui/icons/full/dtool16/prev_error_nav.gif deleted file mode 100644 index 4c323769b99..00000000000 Binary files a/core/org.eclipse.cdt.ui/icons/full/dtool16/prev_error_nav.gif and /dev/null differ diff --git a/core/org.eclipse.cdt.ui/icons/full/etool16/next_error_nav.gif b/core/org.eclipse.cdt.ui/icons/full/etool16/next_error_nav.gif deleted file mode 100644 index 6a8e019b5ad..00000000000 Binary files a/core/org.eclipse.cdt.ui/icons/full/etool16/next_error_nav.gif and /dev/null differ diff --git a/core/org.eclipse.cdt.ui/icons/full/etool16/prev_error_nav.gif b/core/org.eclipse.cdt.ui/icons/full/etool16/prev_error_nav.gif deleted file mode 100644 index 2cba4b14ae6..00000000000 Binary files a/core/org.eclipse.cdt.ui/icons/full/etool16/prev_error_nav.gif and /dev/null differ diff --git a/core/org.eclipse.cdt.ui/plugin.xml b/core/org.eclipse.cdt.ui/plugin.xml index 0244c1e78fa..4f8814022af 100644 --- a/core/org.eclipse.cdt.ui/plugin.xml +++ b/core/org.eclipse.cdt.ui/plugin.xml @@ -1053,6 +1053,12 @@ id="org.eclipse.search.SearchResultView"> + + + + @@ -1108,7 +1114,13 @@ textPreferenceValue="true" textPreferenceKey="indexResultIndication" verticalRulerPreferenceKey="indexResultIndicationInVerticalRuler" - overviewRulerPreferenceKey="indexResultIndicationInOverviewRuler"> + overviewRulerPreferenceKey="indexResultIndicationInOverviewRuler" + showInNextPrevDropdownToolbarActionKey="isIndexResultInNextPrevDropdownToolbarAction" + showInNextPrevDropdownToolbarAction="true" + isGoToNextNavigationTargetKey="isIndexResultGoToNextNavigationTarget" + isGoToNextNavigationTarget="false" + isGoToPreviousNavigationTargetKey="isIndexResultGoToPreviousNavigationTarget" + isGoToPreviousNavigationTarget="false"> end) { + end= start + end; + start= end - start; + end= end - start; + } + + if (start == -1 && end == -1) { + // marker line number is 1-based + int line= MarkerUtilities.getLineNumber(marker); + if (line > 0 && fDocument != null) { + try { + start= fDocument.getLineOffset(line - 1); + String ld = fDocument.getLineDelimiter(line - 1); + int lineDelimiterLegnth = ld != null ? ld.length(): 0; + end= fDocument.getLineLength(line - 1) + start - lineDelimiterLegnth; + } catch (BadLocationException x) { + } + } + } + + if (start > -1 && end > -1) + return new Position(start, end - start); + + return null; + } /* * @see org.eclipse.jface.text.source.AnnotationModel#createAnnotationModelEvent() */ 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 899f9fe02a4..32cc3bb0b71 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 @@ -5,6 +5,8 @@ package org.eclipse.cdt.internal.ui.editor; * All Rights Reserved. */ +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.Iterator; import org.eclipse.cdt.core.CCorePlugin; @@ -75,7 +77,6 @@ import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorActionBarContributor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IFileEditorInput; @@ -88,11 +89,11 @@ import org.eclipse.ui.actions.ActionGroup; import org.eclipse.ui.editors.text.EditorsUI; import org.eclipse.ui.editors.text.TextEditor; import org.eclipse.ui.help.WorkbenchHelp; -import org.eclipse.ui.ide.IDE; import org.eclipse.ui.part.EditorActionBarContributor; import org.eclipse.ui.part.IShowInSource; import org.eclipse.ui.part.IShowInTargetList; import org.eclipse.ui.part.ShowInContext; +import org.eclipse.ui.texteditor.AnnotationPreference; import org.eclipse.ui.texteditor.ChainedPreferenceStore; import org.eclipse.ui.texteditor.ContentAssistAction; import org.eclipse.ui.texteditor.IDocumentProvider; @@ -104,7 +105,6 @@ import org.eclipse.ui.texteditor.MarkerUtilities; import org.eclipse.ui.texteditor.SourceViewerDecorationSupport; import org.eclipse.ui.texteditor.TextOperationAction; import org.eclipse.ui.views.contentoutline.IContentOutlinePage; -import org.eclipse.ui.views.tasklist.TaskList; /** @@ -112,6 +112,30 @@ import org.eclipse.ui.views.tasklist.TaskList; */ public class CEditor extends TextEditor implements ISelectionChangedListener, IShowInSource , IReconcilingParticipant{ + /** + * Updates the Java outline page selection and this editor's range indicator. + * + * @since 3.0 + */ + private class EditorSelectionChangedListener extends AbstractSelectionChangedListener { + + /* + * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent) + */ + public void selectionChanged(SelectionChangedEvent event) { + // XXX: see https://bugs.eclipse.org/bugs/show_bug.cgi?id=56161 + CEditor.this.selectionChanged(); + } + } + + /** + * The editor selection changed listener. + * + * @since 3.0 + */ + private EditorSelectionChangedListener fEditorSelectionChangedListener; + + /** The outline page */ protected CContentOutlinePage fOutlinePage; @@ -169,6 +193,16 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS */ private FoldingActionGroup fFoldingGroup; + /** + * Indicates whether this editor is about to update any annotation views. + * @since 3.0 + */ + private boolean fIsUpdatingAnnotationViews= false; + /** + * The marker that served as last target for a goto marker request. + * @since 3.0 + */ + private IMarker fLastMarkerTarget= null; private class PropertyChangeListener implements org.eclipse.core.runtime.Preferences.IPropertyChangeListener, org.eclipse.jface.util.IPropertyChangeListener { /* @@ -353,6 +387,21 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS } } + /** + * React to changed selection. + * + * @since 3.0 + */ + protected void selectionChanged() { + if (getSelectionProvider() == null) + return; +// ISourceReference element= computeHighlightRangeSourceReference(); +// if (getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_SYNC_OUTLINE_ON_CURSOR_MOVE)) +// synchronizeOutlinePage(element); +// setSelection(element, false); + updateStatusLine(); + } + /* (non-Javadoc) * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent) */ @@ -550,6 +599,11 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS fSelectionSearchGroup = null; } + if (fEditorSelectionChangedListener != null) { + fEditorSelectionChangedListener.uninstall(getSelectionProvider()); + fEditorSelectionChangedListener= null; + } + stopTabConversion(); disableBrowserLikeLinks(); @@ -735,22 +789,10 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS WorkbenchHelp.setHelp(parent, ICHelpContextIds.CEDITOR_VIEW); - fSelectionUpdateListener = new ISelectionChangedListener() { - private Runnable fRunnable = new Runnable() { - public void run() { - updateStatusField(CTextEditorActionConstants.STATUS_CURSOR_POS); - } - }; - private Display fDisplay; - - public void selectionChanged(SelectionChangedEvent event) { - if (fDisplay == null) - fDisplay = getSite().getShell().getDisplay(); - fDisplay.asyncExec(fRunnable); - } - }; - getSelectionProvider().addSelectionChangedListener(fSelectionUpdateListener); + fEditorSelectionChangedListener= new EditorSelectionChangedListener(); + fEditorSelectionChangedListener.install(getSelectionProvider()); + if (isTabConversionEnabled()) startTabConversion(); @@ -807,44 +849,219 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS return nextError; } - public void gotoError(boolean forward) { - - ISelectionProvider provider = getSelectionProvider(); - - if (fStatusLineClearer != null) { - provider.removeSelectionChangedListener(fStatusLineClearer); - fStatusLineClearer = null; + + /* (non-Javadoc) + * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#gotoMarker(org.eclipse.core.resources.IMarker) + */ + public void gotoMarker(IMarker marker) { + fLastMarkerTarget= marker; + if (!fIsUpdatingAnnotationViews) { + super.gotoMarker(marker); } - - ITextSelection s = (ITextSelection) provider.getSelection(); - IMarker nextError = getNextError(s.getOffset(), forward); - - if (nextError != null) { - - IDE.gotoMarker(this, nextError); - - IWorkbenchPage page = getSite().getPage(); - - IViewPart view = view = page.findView("org.eclipse.ui.views.TaskList"); //$NON-NLS-1$ - if (view instanceof TaskList) { - StructuredSelection ss = new StructuredSelection(nextError); - ((TaskList) view).setSelection(ss, true); + } + + /** + * Jumps to the next enabled annotation according to the given direction. + * An annotation type is enabled if it is configured to be in the + * Next/Previous tool bar drop down menu and if it is checked. + * + * @param forward true if search direction is forward, false if backward + */ + public void gotoAnnotation(boolean forward) { + ITextSelection selection= (ITextSelection) getSelectionProvider().getSelection(); + Position position= new Position(0, 0); + if (false /* delayed - see bug 18316 */) { + getNextAnnotation(selection.getOffset(), selection.getLength(), forward, position); + selectAndReveal(position.getOffset(), position.getLength()); + } else /* no delay - see bug 18316 */ { + Annotation annotation= getNextAnnotation(selection.getOffset(), selection.getLength(), forward, position); + setStatusLineErrorMessage(null); + setStatusLineMessage(null); + if (annotation != null) { + updateAnnotationViews(annotation); + selectAndReveal(position.getOffset(), position.getLength()); + setStatusLineMessage(annotation.getText()); } - - getStatusLineManager().setErrorMessage(nextError.getAttribute(IMarker.MESSAGE, "")); //$NON-NLS-1$ - fStatusLineClearer = new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - getSelectionProvider().removeSelectionChangedListener(fStatusLineClearer); - fStatusLineClearer = null; - getStatusLineManager().setErrorMessage(""); //$NON-NLS-1$ - } - }; - provider.addSelectionChangedListener(fStatusLineClearer); - } else { - getStatusLineManager().setErrorMessage(""); //$NON-NLS-1$ } } + /** + * Returns whether the given annotation is configured as a target for the + * "Go to Next/Previous Annotation" actions + * + * @param annotation the annotation + * @return true if this is a target, false + * otherwise + * @since 3.0 + */ + private boolean isNavigationTarget(Annotation annotation) { + Preferences preferences= EditorsUI.getPluginPreferences(); + AnnotationPreference preference= getAnnotationPreferenceLookup().getAnnotationPreference(annotation); +// See bug 41689 +// String key= forward ? preference.getIsGoToNextNavigationTargetKey() : preference.getIsGoToPreviousNavigationTargetKey(); + String key= preference == null ? null : preference.getIsGoToNextNavigationTargetKey(); + return (key != null && preferences.getBoolean(key)); + } + + /** + * Returns the annotation closest to the given range respecting the given + * direction. If an annotation is found, the annotations current position + * is copied into the provided annotation position. + * + * @param offset the region offset + * @param length the region length + * @param forward true for forwards, false for backward + * @param annotationPosition the position of the found annotation + * @return the found annotation + */ + private Annotation getNextAnnotation(final int offset, final int length, boolean forward, Position annotationPosition) { + + Annotation nextAnnotation= null; + Position nextAnnotationPosition= null; + Annotation containingAnnotation= null; + Position containingAnnotationPosition= null; + boolean currentAnnotation= false; + + IDocument document= getDocumentProvider().getDocument(getEditorInput()); + int endOfDocument= document.getLength(); + int distance= Integer.MAX_VALUE; + + IAnnotationModel model= getDocumentProvider().getAnnotationModel(getEditorInput()); + Iterator e= new CAnnotationIterator(model, true, true); + while (e.hasNext()) { + Annotation a= (Annotation) e.next(); + if ((a instanceof ICAnnotation) && ((ICAnnotation)a).hasOverlay() || !isNavigationTarget(a)) + continue; + + Position p= model.getPosition(a); + if (p == null) + continue; + + if (forward && p.offset == offset || !forward && p.offset + p.getLength() == offset + length) {// || p.includes(offset)) { + if (containingAnnotation == null || (forward && p.length >= containingAnnotationPosition.length || !forward && p.length >= containingAnnotationPosition.length)) { + containingAnnotation= a; + containingAnnotationPosition= p; + currentAnnotation= (p.length == length) || (p.length - 1 == length); + } + } else { + int currentDistance= 0; + + if (forward) { + currentDistance= p.getOffset() - offset; + if (currentDistance < 0) + currentDistance= endOfDocument + currentDistance; + + if (currentDistance < distance || currentDistance == distance && p.length < nextAnnotationPosition.length) { + distance= currentDistance; + nextAnnotation= a; + nextAnnotationPosition= p; + } + } else { + currentDistance= offset + length - (p.getOffset() + p.length); + if (currentDistance < 0) + currentDistance= endOfDocument + currentDistance; + + if (currentDistance < distance || currentDistance == distance && p.length < nextAnnotationPosition.length) { + distance= currentDistance; + nextAnnotation= a; + nextAnnotationPosition= p; + } + } + } + } + if (containingAnnotationPosition != null && (!currentAnnotation || nextAnnotation == null)) { + annotationPosition.setOffset(containingAnnotationPosition.getOffset()); + annotationPosition.setLength(containingAnnotationPosition.getLength()); + return containingAnnotation; + } + if (nextAnnotationPosition != null) { + annotationPosition.setOffset(nextAnnotationPosition.getOffset()); + annotationPosition.setLength(nextAnnotationPosition.getLength()); + } + + return nextAnnotation; + } + + protected void updateStatusLine() { + ITextSelection selection= (ITextSelection) getSelectionProvider().getSelection(); + Annotation annotation= getAnnotation(selection.getOffset(), selection.getLength()); + setStatusLineErrorMessage(null); + setStatusLineMessage(null); + if (annotation != null) { + try { + fIsUpdatingAnnotationViews= true; + updateAnnotationViews(annotation); + } finally { + fIsUpdatingAnnotationViews= false; + } + if (annotation instanceof ICAnnotation && ((ICAnnotation) annotation).isProblem()) + setStatusLineMessage(annotation.getText()); + } + } + + /** + * Updates the annotation views that show the given annotation. + * + * @param annotation the annotation + */ + private void updateAnnotationViews(Annotation annotation) { + IMarker marker= null; + if (annotation instanceof MarkerAnnotation) + marker= ((MarkerAnnotation) annotation).getMarker(); + else if (annotation instanceof ICAnnotation) { + Iterator e= ((ICAnnotation) annotation).getOverlaidIterator(); + if (e != null) { + while (e.hasNext()) { + Object o= e.next(); + if (o instanceof MarkerAnnotation) { + marker= ((MarkerAnnotation) o).getMarker(); + break; + } + } + } + } + + if (marker != null && !marker.equals(fLastMarkerTarget)) { + try { + boolean isProblem= marker.isSubtypeOf(IMarker.PROBLEM); + IWorkbenchPage page= getSite().getPage(); + IViewPart view= page.findView(isProblem ? IPageLayout.ID_PROBLEM_VIEW: IPageLayout.ID_TASK_LIST); //$NON-NLS-1$ //$NON-NLS-2$ + if (view != null) { + Method method= view.getClass().getMethod("setSelection", new Class[] { IStructuredSelection.class, boolean.class}); //$NON-NLS-1$ + method.invoke(view, new Object[] {new StructuredSelection(marker), Boolean.TRUE }); + } + } catch (CoreException x) { + } catch (NoSuchMethodException x) { + } catch (IllegalAccessException x) { + } catch (InvocationTargetException x) { + } + // ignore exceptions, don't update any of the lists, just set status line + } + } + + /** + * Returns the annotation overlapping with the given range or null. + * + * @param offset the region offset + * @param length the region length + * @return the found annotation or null + * @since 3.0 + */ + private Annotation getAnnotation(int offset, int length) { + IAnnotationModel model= getDocumentProvider().getAnnotationModel(getEditorInput()); + Iterator e= new CAnnotationIterator(model, true, true); + while (e.hasNext()) { + Annotation a= (Annotation) e.next(); + if (!isNavigationTarget(a)) + continue; + + Position p= model.getPosition(a); + if (p != null && p.overlapsWith(offset, length)) + return a; + } + + return null; + } /* (non-Javadoc) * @see org.eclipse.ui.part.IShowInSource#getShowInContext() * @@ -1119,7 +1336,19 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS } - /** + /** + * Sets the given message as message to this editor's status line. + * + * @param msg message to be set + * @since 3.0 + */ + protected void setStatusLineMessage(String msg) { + IEditorStatusLine statusLine= (IEditorStatusLine) getAdapter(IEditorStatusLine.class); + if (statusLine != null) + statusLine.setMessage(false, msg, null); + } + + /** * Enables browser like links, requires disable to clean up */ private void enableBrowserLikeLinks() { @@ -1129,8 +1358,8 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS fMouseListener.install(); } } - - /** + + /** * Disable browser like links, clean up resources */ private void disableBrowserLikeLinks() { 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 f8d6a1c3ece..98d04acc85d 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,19 +9,22 @@ import java.util.ResourceBundle; import org.eclipse.cdt.internal.ui.CPluginImages; import org.eclipse.cdt.internal.ui.IContextMenuConstants; +import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IStatusLineManager; -import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.action.MenuManager; 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.IEditorActionBarContributor; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.editors.text.TextEditorActionContributor; 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; @@ -87,9 +90,8 @@ public class CEditorActionContributor extends TextEditorActionContributor { protected SelectionAction fShiftLeft; protected SelectionAction fShiftRight; private TogglePresentationAction fTogglePresentation; - //private ToggleTextHoverAction fToggleTextHover; - private GotoErrorAction fPreviousError; - private GotoErrorAction fNextError; + private GotoAnnotationAction fPreviousAnnotation; + private GotoAnnotationAction fNextAnnotation; public CEditorActionContributor() { @@ -122,13 +124,10 @@ public class CEditorActionContributor extends TextEditorActionContributor { //fToggleTextHover= new ToggleTextHoverAction(); - fPreviousError= new GotoErrorAction("PreviousError.", false); //$NON-NLS-1$ - fPreviousError.setActionDefinitionId("org.eclipse.ui.navigate.previous"); //$NON-NLS-1$ - CPluginImages.setImageDescriptors(fPreviousError, CPluginImages.T_TOOL, CPluginImages.IMG_TOOL_GOTO_PREV_ERROR); + fPreviousAnnotation= new GotoAnnotationAction("PreviousAnnotation.", false); //$NON-NLS-1$ + fNextAnnotation= new GotoAnnotationAction("NextAnnotation.", true); //$NON-NLS-1$ - fNextError= new GotoErrorAction("NextError.", true); //$NON-NLS-1$ - fNextError.setActionDefinitionId("org.eclipse.ui.navigate.next"); //$NON-NLS-1$ - CPluginImages.setImageDescriptors(fNextError, CPluginImages.T_TOOL, CPluginImages.IMG_TOOL_GOTO_NEXT_ERROR); + //fToggleTextHover= new ToggleTextHoverAction(); } @@ -149,9 +148,9 @@ public class CEditorActionContributor extends TextEditorActionContributor { 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_OPEN)); +// editMenu.add(fNextError); +// editMenu.add(fPreviousError); editMenu.add(new Separator(IContextMenuConstants.GROUP_GENERATE)); editMenu.appendToGroup(IContextMenuConstants.GROUP_GENERATE, fContentAssist); @@ -166,18 +165,15 @@ public class CEditorActionContributor extends TextEditorActionContributor { */ public void init(IActionBars bars) { super.init(bars); + + // register actions that have a dynamic editor. + bars.setGlobalActionHandler(ITextEditorActionDefinitionIds.GOTO_NEXT_ANNOTATION, fNextAnnotation); + bars.setGlobalActionHandler(ITextEditorActionDefinitionIds.GOTO_PREVIOUS_ANNOTATION, fPreviousAnnotation); + bars.setGlobalActionHandler(ITextEditorActionConstants.NEXT, fNextAnnotation); + bars.setGlobalActionHandler(ITextEditorActionConstants.PREVIOUS, fPreviousAnnotation); bars.setGlobalActionHandler(ITextEditorActionDefinitionIds.TOGGLE_SHOW_SELECTED_ELEMENT_ONLY, fTogglePresentation); } - /** - * @see EditorActionBarContributor#contributeToToolBar(IToolBarManager) - */ - public void contributeToToolBar(IToolBarManager tbm) { - super.contributeToToolBar(tbm); - tbm.add(new Separator()); - tbm.add(fNextError); - tbm.add(fPreviousError); - } /** * @see IEditorActionBarContributor#setActiveEditor(IEditorPart) @@ -192,9 +188,9 @@ public class CEditorActionContributor extends TextEditorActionContributor { fShiftRight.setEditor(textEditor); fShiftLeft.setEditor(textEditor); - fNextError.setEditor(textEditor); - fPreviousError.setEditor(textEditor); fTogglePresentation.setEditor(textEditor); + fPreviousAnnotation.setEditor(textEditor); + fNextAnnotation.setEditor(textEditor); //caAction.setEditor(textEditor); //caAction.update(); 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 f10569f7ac8..3dc337baa4a 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 @@ -145,6 +145,14 @@ ShiftLeft.label=S&hift Left@Ctrl+Shift+I ShiftLeft.tooltip=Shift Left ShiftLeft.description=Shift the selected text to the left +NextAnnotation.label= Ne&xt Annotation +NextAnnotation.tooltip= Next Annotation +NextAnnotation.description= Next Annotation + +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 diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/GotoAnnotationAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/GotoAnnotationAction.java new file mode 100644 index 00000000000..d6a4b999511 --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/GotoAnnotationAction.java @@ -0,0 +1,48 @@ +/******************************************************************************* + * Copyright (c) 2000, 2004 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 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.internal.ui.editor; + +import org.eclipse.cdt.internal.ui.ICHelpContextIds; +import org.eclipse.ui.help.WorkbenchHelp; +import org.eclipse.ui.texteditor.ITextEditor; +import org.eclipse.ui.texteditor.TextEditorAction; + + + +public class GotoAnnotationAction extends TextEditorAction { + + private boolean fForward; + + public GotoAnnotationAction(String prefix, boolean forward) { + super(CEditorMessages.getResourceBundle(), prefix, null); + fForward= forward; + if (forward) + WorkbenchHelp.setHelp(this, ICHelpContextIds.GOTO_NEXT_ERROR_ACTION); + else + WorkbenchHelp.setHelp(this, ICHelpContextIds.GOTO_PREVIOUS_ERROR_ACTION); + } + + public void run() { + CEditor e= (CEditor) getTextEditor(); + e.gotoAnnotation(fForward); + } + + public void setEditor(ITextEditor editor) { + if (editor instanceof CEditor) + super.setEditor(editor); + update(); + } + + public void update() { + setEnabled(getTextEditor() instanceof CEditor); + } +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/GotoErrorAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/GotoErrorAction.java deleted file mode 100644 index cfc086874ae..00000000000 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/GotoErrorAction.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.eclipse.cdt.internal.ui.editor; - -/* - * (c) Copyright IBM Corp. 2000, 2001. - * All Rights Reserved. - */ - -import org.eclipse.ui.texteditor.ITextEditor; -import org.eclipse.ui.texteditor.TextEditorAction; - - -public class GotoErrorAction extends TextEditorAction { - - - private boolean fForward; - - - public GotoErrorAction(String prefix, boolean forward) { - super(CEditorMessages.getResourceBundle(), prefix, null); - fForward= forward; - } - /** - * @see Action#run() - */ - public void run() { - CEditor e= (CEditor) getTextEditor(); - e.gotoError(fForward); - } - /** - * @see TextEditorAction#setEditor(ITextEditor) - */ - public void setEditor(ITextEditor editor) { - if (editor instanceof CEditor) - super.setEditor(editor); - } - /** - * @see TextEditorAction#update() - */ - public void update() { - setEnabled(true); - } -}