GEF에 ContextMenu 지원 추가

2860 단어 eclipseUI
GEF에서 EditPart의 오른쪽 단추 메뉴에 대한 지원을 늘리는 것은 보편적인 요구이다.
 
우클릭 메뉴를 추가하는 방법을 간단하게 소개한다.
 
우선 오른쪽 단추 메뉴를 지원하려면 메뉴를 관리하고 표시하는 데 사용되는 MenuManager 대상이 엔티티 대상에 추가되어야 한다. 이것은 JFace에서 MenuManager를 지원하는 것과 유사하다.
 
GEF에는 ContextMenuProvider라는 클래스가 있는데, 이것은ContextMenu에 대한 지원을 실현하는 데 사용됩니다.그래서 우리는 Menu에 있는 모든 Action을 정의하는 데 사용되는 Context Menu Provider의 하위 클래스를 실현해야 한다.예를 들면 다음과 같습니다.
 
public class ElementsContextMenuProvider extends ContextMenuProvider {

	private ActionRegistry actionRegistry;
	
	public ElementsContextMenuProvider(EditPartViewer viewer,ActionRegistry registry) {
		super(viewer);
		this.actionRegistry = registry;
	}

	@Override
	public void buildContextMenu(IMenuManager menu) {
		menu.add(actionRegistry.getAction(ActionFactory.REDO.getId()));
		menu.add(actionRegistry.getAction(ActionFactory.UNDO.getId()));
	}

}

 
 
이 클래스가 생기면 이 클래스를 Viewer에 설정합니다. configureGraphicalViewer () 는 다음과 같습니다.
 
		ElementsContextMenuProvider contextMenu = new ElementsContextMenuProvider(
				viewer, getActionRegistry());
		viewer.setContextMenu(contextMenu);

 
 
이렇게 하면buildContextMenu () 방법에 추가된 모든 Action이 Menu에 표시됩니다.
 
그런 거 말고우리도 org를 이용할 수 있다.eclipse.ui.popupMenus 확장점을 사용하여 확장된 Action을 정의합니다.확장된 PopupMenu를 사용하려면 다음과 같이 Menu를 등록해야 합니다.
 
		ElementsContextMenuProvider contextMenu = new ElementsContextMenuProvider(
				viewer, getActionRegistry());
		viewer.setContextMenu(contextMenu);
		getSite().registerContextMenu(contextMenu, viewer);

 
 
그런 다음 다양한 유형의 EditPart 객체에 대해 PopupMenu 확장을 정의할 수 있습니다.그러나 주의해야 할 것은 다음과 같다: 관련이 없는 PopupMenu 항목을 추가했을 수도 있다!
 
가장 간단하게 필터링 규칙을 정의한 다음 Item을 마지막으로 표시하기 전에 필터링할 수 있습니다. 예를 들어 getItems()를 다시 쓰는 방법은 다음과 같습니다.
 
	@Override
	public IContributionItem[] getItems() {
		IContributionItem[] items = super.getItems();
		List<IContributionItem> remains = new ArrayList<IContributionItem>();
		for(IContributionItem i:items){
			if(isAllowed(i)){
				remains.add(i);
			}
		}
		return remains.toArray(new IContributionItem[0]);
	}
	
	private boolean isAllowed(IContributionItem itemToAdd) {
		String id = itemToAdd.getId();
		if(id==null){
			return false;
		}
		if (!id.startsWith("com.tibco.cdc.liugang")
						&& !id.equals(ActionFactory.REDO.getId()) && !id
						.equals(ActionFactory.UNDO.getId())) {
			return false;
		}
		return true;
	}

 
 
이렇게 하면 내 가방 앞머리를 접두사로 하는 item과 Redo, undo 항목만 나타날 수 있습니다!

좋은 웹페이지 즐겨찾기