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);
- }
-}