Ésta es una pregunta específicamente sobre el desarrollo de plugins para la plataforma Eclipse:¿Cómo hago una extensión del complemento Eclipse que muestra diferentes elementos del menú contextual cuando el usuario hace clic en un marcador?
Quiero añadir un elemento de menú al menú por defecto que aparece al hacer clic derecho en una especie de IMarker (todos los marcadores serían un buen comienzo).
que han tenido cierto éxito con la implementación de IMarkerResolution y refiriéndose a ella en mi plugin.xml
<extension point="org.eclipse.ui.ide.markerResolution">
<markerResolutionGenerator
markerType="my.stuff.mymarker"
class="my.stuff.MyResolutionGenerator">
</markerResolutionGenerator>
</extension>
pero en lugar de acceder a mi código a través de la funcionalidad solución rápida eclipse, quiero añadir mi propio texto del menú en vez de 'soluciones rápidas' y no tiene que mostrar la acción junto con las opciones de solución rápida. Ser capaz de ejecutar una acción haciendo doble clic en un marcador también sería muy útil.
Estoy usando eclipse 3.5.2 para mi proyecto actual.
¡Gracias de antemano!
actualización he resuelto esto:
<extension point="org.eclipse.ui.menus">
<menuContribution
class="my.stuff.MarkerContributionFactory"
locationURI="popup:#AbstractTextEditorRulerContext?after=additions">
<dynamic
class="my.stuff.MarkerMenuContribution"
id="my.stuff.MarkerMenuContribution">
</dynamic>
</menuContribution>
</extension>
public class MarkerContributionFactory extends ExtensionContributionFactory{
@Override
public void createContributionItems(IServiceLocator serviceLocator, IContributionRoot additions){
ITextEditor editor = (ITextEditor)
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart();
additions.addContributionItem(new MarkerMenuContribution(editor), null);
}
}
public class MarkerMenuContribution extends ContributionItem{
private ITextEditor editor;
private IVerticalRulerInfo rulerInfo;
private List<IMarker> markers;
public MarkerMenuContribution(ITextEditor editor){
this.editor = editor;
this.rulerInfo = getRulerInfo();
this.markers = getMarkers();
}
private IVerticalRulerInfo getRulerInfo(){
return (IVerticalRulerInfo) editor.getAdapter(IVerticalRulerInfo.class);
}
private List<IMarker> getMarkers(){
List<IMarker> clickedOnMarkers = new ArrayList<IMarker>();
for (IMarker marker : getAllMarkers()){
if (markerHasBeenClicked(marker)){
clickedOnMarkers.add(marker);
}
}
return clickedOnMarkers;
}
//Determine whether the marker has been clicked using the ruler's mouse listener
private boolean markerHasBeenClicked(IMarker marker){
return (marker.getAttribute(IMarker.LINE_NUMBER, 0)) == (rulerInfo.getLineOfLastMouseButtonActivity() + 1);
}
//Get all My Markers for this source file
private IMarker[] getAllMarkers(){
return ((FileEditorInput) editor.getEditorInput()).getFile()
.findMarkers("defined.in.plugin.xml.mymarker", true, IResource.DEPTH_ZERO);
}
@Override
//Create a menu item for each marker on the line clicked on
public void fill(Menu menu, int index){
for (final IMarker marker : markers){
MenuItem menuItem = new MenuItem(menu, SWT.CHECK, index);
menuItem.setText(marker.getAttribute(IMarker.MESSAGE, ""));
menuItem.addSelectionListener(createDynamicSelectionListener(marker));
}
}
//Action to be performed when clicking on the menu item is defined here
private SelectionAdapter createDynamicSelectionListener(final IMarker marker){
return new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
System.out.println(marker.getAttribute(IMarker.MESSAGE, ""));
}
};
}
}
Gracias por su ayuda, estaba dando vueltas en círculos en Google por un tiempo allí – Matt
Hola, quizás útil en este contexto también es Plugin Spy (Ctrl + Alt + F1) o Complemento Menú Espía (Ctrl + Alt + F2). Al utilizar el complemento de espionaje, puede encontrar las clases y los complementos de contribución a la vista o el editor que tiene el foco. Cuando utiliza el menú del complemento, el cursor del mouse se convierte en una lupa que puede hacer clic en los menús y las contribuciones de la acción para ver más información (incluidos ID o URI de ubicación) sobre ellos. – zardosht
para mí el Plug-in Selection Spy se abre con Alt + Shift + F1? – eactor