2009-07-29 10 views
17

이클립스 플러그인 응용 프로그램을 시작할 때 메뉴 항목을 완전히 제거하고 싶습니다. 내가하고 싶은 일은 나중에 사용자의 행동을 기반으로 비즈니스 로직에 따라 메뉴 항목을 추가 할 수 있습니다. 이것을 할 수있는 방법이 있습니까? 기고금을 사용하여 보았지만 정확하게 원하는대로되지는 않을 것 같습니다.프로그래밍 방식으로 메뉴 항목 변경 이클립스 플러그인

내가 수행해야하는 작업을 수행하는 경우 어떻게 사용합니까? 도움을 주셔서 미리 감사드립니다.

답변

16

MenuManager에서 메뉴를 가져온 다음 기여도를 수정할 수 있습니다. 이 스 니펫은 메뉴 관리자에 액세스하고 명명 된 항목을 제거하는 방법을 보여줍니다.

삭제 된 항목 및 항목 색인을 복원하려면이를 추적해야합니다. 유일한 문제는 indexOf 메서드가 표시되지 않는다는 것입니다. 이 스 니펫을 MenuManager와 같은 패키지에있는 유형에 추가하고 조각에 추가하는 것도 한 가지 방법입니다.

IWorkbenchWindow window = Workbench.getInstance().getActiveWorkbenchWindow() 

if(window instanceof WorkbenchWindow) { 
    MenuManager menuManager = ((WorkbenchWindow)window).getMenuManager(); 

    //TODO you may need to remove items from the coolbar as well 
    ICoolBarManager coolBarManager = null; 

    if(((WorkbenchWindow) window).getCoolBarVisible()) { 
     coolBarManager = ((WorkbenchWindow)window).getCoolBarManager2(); 
    } 

    Menu menu = menuManager.getMenu(); 

    //you'll need to find the id for the item 
    String itemId = "menuId"; 
    IContributionItem item = menuManager.find(itemId); 

    // remember position, TODO this is protected 
    int controlIdx = menu.indexOf(mySaveAction.getId()); 

    if (item != null) { 
     // clean old one 
     menuManager.remove(item); 

     // refresh menu gui 
     menuManager.update(); 
    } 
} 
+0

IDE 기반 응용 프로그램에서도 가능합니까? 예를 들어,'Project '와 같은 Eclipse의 메뉴 중 일부를 제거합니다. – nbz

2

RCP 응용 프로그램에서 메뉴 또는 툴바 항목의 가시성을 제어하는 ​​여러 가지 방법이 있습니다.

해당 항목에 기여하는 플러그인을 제어 할 수 있다면 가장 쉬운 방법은 보통 menus 확장 점과 연결된 visibleWhen 표현식을 사용하는 것입니다. 검사 할 내부 상태가있는 경우 propertyTester과 함께 표현식의 test 요소를 사용할 수 있습니다.

다른 방법으로 활동을 사용하는 것입니다. 이것들은 응용 프로그램의 다른 많은 것들을 제어 할 수 있습니다. 내장 대화 상자의 일부를 다시 구현해야한다고 생각했습니다. 자세한 내용은이 블로그 항목 "Using activities for user management"을 참조하십시오.

관련 문제