Ceci est une question spécifiquement sur le développement d'un plugin pour la plate-forme Eclipse:Comment créer une extension de plugin Eclipse qui affiche différents éléments de menu contextuel lorsque l'utilisateur clique sur un marqueur?
Je veux ajouter un élément de menu dans le menu par défaut qui apparaît quand un clic droit sur une sorte de IMarker (tous les marqueurs seraient un bon début).
J'ai eu un certain succès avec la mise en œuvre IMarkerResolution et faisant référence dans mon plugin.xml
<extension point="org.eclipse.ui.ide.markerResolution">
<markerResolutionGenerator
markerType="my.stuff.mymarker"
class="my.stuff.MyResolutionGenerator">
</markerResolutionGenerator>
</extension>
mais au lieu d'accéder à mon code par l'éclipse fonctionnalité de solution rapide, je veux ajouter mon propre texte de menu au lieu de "solutions rapides" et ne pas avoir à afficher l'action à côté des options de réparation rapide. Etre capable d'exécuter une action en (double) cliquant sur un marqueur serait également très utile. J'utilise eclipse 3.5.2 pour mon projet actuel. J'utilise eclipse 3.5.2.
Merci d'avance!
Mise à jour J'ai résolu ceci:
<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, ""));
}
};
}
}
Merci pour votre aide, je tournais en rond sur google depuis un moment là – Matt
Salut, peut-être utile dans ce contexte est également Plugin Spy (Ctrl + Alt + F1) ou Plugin Menu Spy (Ctrl + Alt + F2). En utilisant le plugin spy, vous pouvez trouver les classes et les plugins contributeurs dans la vue ou l'éditeur qui a le focus. Lorsque vous utilisez le menu plugin espionner votre curseur de souris se transforme en une loupe que vous pouvez cliquer sur les menus et les contributions d'action pour voir plus d'informations (y compris les ID ou URI d'emplacement) à leur sujet. – zardosht
pour moi le Spy de sélection de plug-in s'ouvre avec Alt + Maj + F1? – eactor