Đây là câu hỏi cụ thể về phát triển plugin cho nền tảng Eclipse:Làm cách nào để tạo tiện ích mở rộng plugin Eclipse hiển thị các mục menu ngữ cảnh khác nhau khi người dùng nhấp vào điểm đánh dấu?
Tôi muốn thêm mục menu vào menu mặc định xuất hiện khi nhấp chuột phải vào loại IMarker (tất cả các điểm đánh dấu sẽ là khởi đầu tốt).
Tôi đã có một số thành công với việc thực hiện IMarkerResolution và đề cập đến nó trong plugin.xml tôi
<extension point="org.eclipse.ui.ide.markerResolution">
<markerResolutionGenerator
markerType="my.stuff.mymarker"
class="my.stuff.MyResolutionGenerator">
</markerResolutionGenerator>
</extension>
nhưng thay vì truy cập vào mã của tôi thông qua các chức năng sửa chữa nhanh chóng nhật thực, tôi muốn thêm văn bản đơn riêng của tôi thay vì của 'sửa lỗi nhanh' và không phải hiển thị hành động cùng với các tùy chọn khắc phục nhanh. Việc có thể chạy một hành động bằng cách nhấn đúp vào một điểm đánh dấu sẽ rất hữu ích.
Tôi đang sử dụng nhật thực 3.5.2 cho dự án hiện tại của mình.
Cảm ơn trước!
Cập nhật tôi đã giải quyết này:
<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, ""));
}
};
}
}
Cảm ơn sự giúp đỡ của bạn, tôi đã tham gia vòng kết nối trên google trong một thời gian ở đó – Matt
Xin chào, có thể hữu ích trong ngữ cảnh này cũng là Plugin Gián điệp (Ctrl + Alt + F1) hoặc Trình đơn Plugin Gián điệp (Ctrl + Alt + F2). Sử dụng plugin gián điệp, bạn có thể tìm thấy các lớp đóng góp và bổ trợ trong chế độ xem hoặc trình chỉnh sửa có tiêu điểm. Khi bạn sử dụng trình đơn plugin, con trỏ chuột của bạn sẽ chuyển sang kính lúp để bạn có thể nhấp vào các menu và đóng góp hành động để xem thêm thông tin (bao gồm ID hoặc vị trí URI) về chúng. – zardosht
cho tôi Plug-in Selection Spy mở với Alt + Shift + F1? – eactor