2010-11-04 16 views
5

Đâ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, "")); 
     } 
    }; 
} 
} 

Trả lời

4

bạn nên tham gia hướng dẫn tại http://www.eclipse.org/articles/article.php?file=Article-action-contribution/index.html. Đó là một bài viết tốt về các công cụ giao diện người dùng cơ bản.

Sau đây cho phép bạn xác định một hành động popup menu nếu bạn click vào cai trị:

<extension 
     point="org.eclipse.ui.popupMenus"> 
     <viewerContribution 
      targetID="#CompilationUnitRulerContext" 
      id="Q4098270.contribution1"> 
        <menu 
       label="New Submenu" 
       path="additions" 
       id="Q4098270.menu1"> 
      <separator 
        name="group1"> 
      </separator> 
     </menu> 
     <action 
       label="New Action" 
       class="q4098270.popup.actions.NewAction" 
       menubarPath="Q4098270.menu1/group1" 
       id="Q4098270.newAction"> 
     </action> 
     </viewerContribution> 
    </extension> 

Vấn đề và todo mà tôi không có thời gian hiện nay cho là nó không được hiển thị chỉ dành cho các dấu hiệu, nhưng tất cả những thứ trên cái thước.

Giải thích: Trong các đóng góp thực đơn nhật thực là các điểm mở rộng. Vì vậy, nếu bạn nhấp chuột phải để xem trình đơn bật lên, hệ thống sẽ kiểm tra tất cả những người triển khai của điểm mở rộng và sẽ kiểm tra xem có thể áp dụng cho đối tượng hoặc chế độ xem đã cho hay không.

Một số lời khuyên cho

Kể từ khi nền tảng Eclipse tương lai còn xa mới thân thiện với người ghi nhận một, săn điểm mở rộng đúng là phức tạp nhất như xa như tôi có kinh nghiệm. Tôi luôn luôn bắt đầu từ các giải pháp hiện có trong nền tảng chính nó. Vì vậy, hãy cài đặt JADclipse và bắt đầu tìm kiếm các văn bản được hiển thị. Ví dụ: tìm văn bản "Sửa nhanh" trong thư mục plugins. Bạn sẽ tìm thấy một tệp thuộc tính. Bạn thấy chìa khóa của thuộc tính, sau đó tìm lớp hoặc plugin.xml nó đang ở. Sau đó, bạn sẽ thấy một ví dụ sống cho vấn đề của mình. Điều này luôn hoạt động và thậm chí tốt hơn Google :)

+0

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

+3

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

+2

cho tôi Plug-in Selection Spy mở với Alt + Shift + F1? – eactor

Các vấn đề liên quan