Это вопрос конкретно о разработке плагин для платформы Eclipse:Как создать расширение плагина Eclipse, которое отображает различные элементы контекстного меню, когда пользователь щелкает маркер?
Я хочу, чтобы добавить пункт меню в меню по умолчанию, которое появляется, когда правая кнопка мыши вида IMarker (все маркеры были бы хорошее начало).
Я имел некоторый успех реализации IMarkerResolution и со ссылки на него в моем plugin.xml
<extension point="org.eclipse.ui.ide.markerResolution">
<markerResolutionGenerator
markerType="my.stuff.mymarker"
class="my.stuff.MyResolutionGenerator">
</markerResolutionGenerator>
</extension>
, но вместо того, чтобы доступ к моей коде через затмение быстрой функциональности исправить, я хочу, чтобы добавить свой собственный текст меню вместо «быстрых исправлений» и не показывать действие вместе с опциями быстрого исправления. Быть способным выполнить действие (двойным) нажатием на маркер было бы очень полезно.
Я использую eclipse 3.5.2 для моего текущего проекта.
Заранее благодарен!
Update я решил это:
<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, ""));
}
};
}
}
Спасибо за вашу помощь, я собирался в кругах на google некоторое время там – Matt
Привет, может быть, полезно в этом контексте также Plugin Spy (Ctrl + Alt + F1) или Plugin Menu Spy (Ctrl + Alt + F2). Используя плагин-шпион, вы можете найти способствующие классы и плагины в представлении или редактор, который имеет фокус. Когда вы используете шпионский модуль плагина, курсор мыши поворачивается к увеличительному стеклу, которое вы можете щелкнуть по меню и действиям, чтобы просмотреть дополнительную информацию (включая идентификаторы или URI местоположения) о них. – zardosht
для меня Штукатурка выбора Шпион открывается с помощью Alt + Shift + F1? – eactor