mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Fix for 216760: No 'Quick Fix' menu item for to CEditor ruler context menu
This commit is contained in:
parent
f73c67a3a1
commit
d119fb73c4
5 changed files with 206 additions and 2 deletions
|
@ -173,6 +173,8 @@ AddTask.label=Add &Task...
|
|||
AddTask.tooltip=Add Task...
|
||||
AddBookmark.label=Add Boo&kmark...
|
||||
AddBookmark.tooltip=Add Bookmark...
|
||||
QuickFix.label=&Quick Fix
|
||||
QuickFix.tooltip=Quick Fix
|
||||
|
||||
# C/C++ Search
|
||||
CSearchPage.label= C/C++ Search
|
||||
|
|
|
@ -785,9 +785,9 @@
|
|||
</action>
|
||||
<action
|
||||
label="%Dummy.label"
|
||||
class="org.eclipse.ui.texteditor.SelectRulerAction"
|
||||
class="org.eclipse.cdt.internal.ui.text.correction.CSelectRulerAction"
|
||||
actionID="RulerClick"
|
||||
id="org.eclipse.ui.texteditor.SelectRulerAction">
|
||||
id="org.eclipse.cdt.internal.ui.text.correction.CSelectRulerAction">
|
||||
</action>
|
||||
</editorContribution>
|
||||
</extension>
|
||||
|
@ -907,6 +907,14 @@
|
|||
menubarPath="add"
|
||||
id="org.eclipse.ui.texteditor.BookmarkRulerAction">
|
||||
</action>
|
||||
<action
|
||||
class="org.eclipse.cdt.internal.ui.text.correction.CSelectRulerAction"
|
||||
definitionId="org.eclipse.jdt.ui.edit.text.java.correction.assist.proposals"
|
||||
id="org.eclipse.cdt.internal.ui.text.correction.CSelectRulerAction"
|
||||
label="%QuickFix.label"
|
||||
menubarPath="additions"
|
||||
tooltip="%QuickFix.tooltip">
|
||||
</action>
|
||||
</viewerContribution>
|
||||
<viewerContribution
|
||||
targetID="#ASMEditorRulerContext"
|
||||
|
|
|
@ -189,3 +189,13 @@ OpenMacroExplorer.label= Explore &Macro Expansion
|
|||
OpenMacroExplorer.tooltip= Open a quick view for macro expansion exploration
|
||||
OpenMacroExplorer.image=
|
||||
OpenMacroExplorer.description= Opens a quick view for macro expansion exploration
|
||||
|
||||
CSelectAnnotationRulerAction.QuickFix.label= &Quick Fix
|
||||
CSelectAnnotationRulerAction.QuickFix.tooltip= Quick Fix
|
||||
CSelectAnnotationRulerAction.QuickFix.description= Runs Quick Fix on the annotation's line
|
||||
CSelectAnnotationRulerAction.QuickFix.image=
|
||||
|
||||
CSelectAnnotationRulerAction.GotoAnnotation.label= &Go to Annotation
|
||||
CSelectAnnotationRulerAction.GotoAnnotation.tooltip= Go to Annotation
|
||||
CSelectAnnotationRulerAction.GotoAnnotation.description= Selects the annotation in the editor
|
||||
CSelectAnnotationRulerAction.GotoAnnotation.image=
|
||||
|
|
|
@ -0,0 +1,156 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2008 IBM Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Corporation - initial API and implementation
|
||||
* David Perryman (IPL Information Processing Limited)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.text.correction;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
import org.eclipse.jface.preference.IPreferenceStore;
|
||||
import org.eclipse.jface.text.IDocument;
|
||||
import org.eclipse.jface.text.ITextOperationTarget;
|
||||
import org.eclipse.jface.text.Position;
|
||||
import org.eclipse.jface.text.source.Annotation;
|
||||
import org.eclipse.jface.text.source.IAnnotationAccessExtension;
|
||||
import org.eclipse.jface.text.source.ISourceViewer;
|
||||
import org.eclipse.jface.text.source.IVerticalRulerInfo;
|
||||
import org.eclipse.swt.widgets.Event;
|
||||
import org.eclipse.ui.editors.text.EditorsUI;
|
||||
import org.eclipse.ui.texteditor.AbstractMarkerAnnotationModel;
|
||||
import org.eclipse.ui.texteditor.AnnotationPreference;
|
||||
import org.eclipse.ui.texteditor.AnnotationPreferenceLookup;
|
||||
import org.eclipse.ui.texteditor.ITextEditor;
|
||||
import org.eclipse.ui.texteditor.ITextEditorExtension;
|
||||
import org.eclipse.ui.texteditor.SelectMarkerRulerAction;
|
||||
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
|
||||
/**
|
||||
* Action which gets triggered when selecting (annotations) in the vertical ruler.
|
||||
* based upon org.eclipse.jdt.internal.ui.javaeditor.JavaSelectMarkerRulerAction
|
||||
*/
|
||||
public class CSelectAnnotationRulerAction extends SelectMarkerRulerAction {
|
||||
|
||||
private ITextEditor fTextEditor;
|
||||
private Position fPosition;
|
||||
private AnnotationPreferenceLookup fAnnotationPreferenceLookup;
|
||||
private IPreferenceStore fStore;
|
||||
private boolean fHasCorrection;
|
||||
private ResourceBundle fBundle;
|
||||
|
||||
public CSelectAnnotationRulerAction(ResourceBundle bundle, String prefix, ITextEditor editor, IVerticalRulerInfo ruler) {
|
||||
super(bundle, prefix, editor, ruler);
|
||||
fBundle= bundle;
|
||||
fTextEditor= editor;
|
||||
|
||||
fAnnotationPreferenceLookup= EditorsUI.getAnnotationPreferenceLookup();
|
||||
fStore= CUIPlugin.getDefault().getCombinedPreferenceStore();
|
||||
}
|
||||
|
||||
public void run() {
|
||||
// is there an equivalent preference for the C Editor?
|
||||
// if (fStore.getBoolean(PreferenceConstants.EDITOR_ANNOTATION_ROLL_OVER))
|
||||
// return;
|
||||
|
||||
runWithEvent(null);
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.jface.action.IAction#runWithEvent(org.eclipse.swt.widgets.Event)
|
||||
*/
|
||||
public void runWithEvent(Event event) {
|
||||
if (fHasCorrection) {
|
||||
ITextOperationTarget operation= (ITextOperationTarget) fTextEditor.getAdapter(ITextOperationTarget.class);
|
||||
final int opCode= ISourceViewer.QUICK_ASSIST;
|
||||
if (operation != null && operation.canDoOperation(opCode)) {
|
||||
fTextEditor.selectAndReveal(fPosition.getOffset(), fPosition.getLength());
|
||||
operation.doOperation(opCode);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
super.run();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.eclipse.ui.texteditor.SelectMarkerRulerAction#update()
|
||||
*/
|
||||
public void update() {
|
||||
findCAnnotation();
|
||||
setEnabled(true);
|
||||
|
||||
if (fHasCorrection) {
|
||||
initialize(fBundle, "CSelectAnnotationRulerAction.QuickFix."); //$NON-NLS-1$
|
||||
return;
|
||||
}
|
||||
|
||||
initialize(fBundle, "CSelectAnnotationRulerAction.GotoAnnotation."); //$NON-NLS-1$;
|
||||
super.update();
|
||||
}
|
||||
|
||||
private void findCAnnotation() {
|
||||
fPosition= null;
|
||||
fHasCorrection= false;
|
||||
|
||||
AbstractMarkerAnnotationModel model= getAnnotationModel();
|
||||
IAnnotationAccessExtension annotationAccess= getAnnotationAccessExtension();
|
||||
|
||||
IDocument document= getDocument();
|
||||
if (model == null)
|
||||
return ;
|
||||
|
||||
Iterator iter= model.getAnnotationIterator();
|
||||
int layer= Integer.MIN_VALUE;
|
||||
|
||||
while (iter.hasNext()) {
|
||||
Annotation annotation= (Annotation) iter.next();
|
||||
if (annotation.isMarkedDeleted())
|
||||
continue;
|
||||
|
||||
int annotationLayer= layer;
|
||||
if (annotationAccess != null) {
|
||||
annotationLayer= annotationAccess.getLayer(annotation);
|
||||
if (annotationLayer < layer)
|
||||
continue;
|
||||
}
|
||||
|
||||
Position position= model.getPosition(annotation);
|
||||
if (!includesRulerLine(position, document))
|
||||
continue;
|
||||
|
||||
boolean isReadOnly = fTextEditor instanceof ITextEditorExtension && ((ITextEditorExtension)fTextEditor).isEditorInputReadOnly();
|
||||
|
||||
if (!isReadOnly && CCorrectionProcessor.hasCorrections(annotation)) {
|
||||
|
||||
fPosition= position;
|
||||
fHasCorrection= true;
|
||||
layer= annotationLayer;
|
||||
continue;
|
||||
} else {
|
||||
AnnotationPreference preference= fAnnotationPreferenceLookup.getAnnotationPreference(annotation);
|
||||
if (preference == null)
|
||||
continue;
|
||||
|
||||
String key= preference.getVerticalRulerPreferenceKey();
|
||||
if (key == null)
|
||||
continue;
|
||||
|
||||
if (fStore.getBoolean(key)) {
|
||||
fPosition= position;
|
||||
fHasCorrection= false;
|
||||
layer= annotationLayer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2008 IBM Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Corporation - initial API and implementation
|
||||
* David Perryman (IPL Information Processing Limited)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.text.correction;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.editor.CEditorMessages;
|
||||
import org.eclipse.jface.action.IAction;
|
||||
import org.eclipse.jface.text.source.IVerticalRulerInfo;
|
||||
import org.eclipse.ui.texteditor.AbstractRulerActionDelegate;
|
||||
import org.eclipse.ui.texteditor.ITextEditor;
|
||||
|
||||
public class CSelectRulerAction extends AbstractRulerActionDelegate {
|
||||
|
||||
/*
|
||||
* @see AbstractRulerActionDelegate#createAction(ITextEditor, IVerticalRulerInfo)
|
||||
*/
|
||||
protected IAction createAction(ITextEditor editor, IVerticalRulerInfo rulerInfo) {
|
||||
return new CSelectAnnotationRulerAction(CEditorMessages.getResourceBundle(), "CSelectAnnotationRulerAction.", editor, rulerInfo); //$NON-NLS-1$
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue