문제

나는 단순히 Commons Navigator 프레임 워크에서 거의 모든 팝업 메뉴를 제거하는 데 부분적으로 성공했습니다. plugin.xml 파일.
가기를 거부하는 2 개의 메뉴가 있습니다.

  • group.edit 그리고
  • group.reorganize.

나의 plugin.xml 구성은 다음과 같습니다.

<extension
          point="org.eclipse.ui.navigator.viewer">
       <viewer
             viewerId="org.eclipse.ui.example.navigator.view">
             <popupMenu allowsPlatformContributions="false">
                <insertionPoint
                    name="group.edit" />

                <insertionPoint
                    name="group.reorganize" />
             </popupMenu>
       </viewer>
       <viewerContentBinding
             viewerId="org.eclipse.ui.thermo.navigator.view">
          <includes>
             <contentExtension
                   pattern="org.eclipse.ui.navigator.resourceContent"/>
          </includes>
       </viewerContentBinding> 
</extension>

설정 allowsPlatformContribution 컨텍스트 메뉴에 추가 할 기부금을 중지합니다. 제외하고 ~을 위한 group.edit 그리고 group.reorganize... 이것은 나에게 벌레처럼 보이기 시작합니다.

명백한 해결책은 내에서 삽입 지점을 제거하는 것입니다. <popUpMenu> 그러나 그들 없이는 응용 프로그램이 예외를 던졌습니다.

Throwable: java.lang.IllegalArgumentException: Group not found: group.edit

java.lang.IllegalArgumentException: Group not found: group.edit
at org.eclipse.jface.action.ContributionManager.addToGroup(ContributionManager.java:131)
at org.eclipse.jface.action.ContributionManager.appendToGroup(ContributionManager.java:138)
at org.eclipse.ui.internal.navigator.resources.actions.EditActionGroup.fillContextMenu(EditActionGroup.java:74)
at org.eclipse.ui.internal.navigator.resources.actions.EditActionProvider.fillContextMenu(EditActionProvider.java:50)
at org.eclipse.ui.navigator.NavigatorActionService.addCommonActionProviderMenu(NavigatorActionService.java:205)
at org.eclipse.ui.navigator.NavigatorActionService.fillContextMenu(NavigatorActionService.java:172)
at org.eclipse.ui.internal.navigator.CommonNavigatorManager.fillContextMenu(CommonNavigatorManager.java:258)
at org.eclipse.ui.internal.navigator.CommonNavigatorManager$4.menuAboutToShow(CommonNavigatorManager.java:273)
at org.eclipse.jface.action.MenuManager.fireAboutToShow(MenuManager.java:335)
at org.eclipse.jface.action.MenuManager.handleAboutToShow(MenuManager.java:463)
at org.eclipse.jface.action.MenuManager.access$1(MenuManager.java:459)
at org.eclipse.jface.action.MenuManager$2.menuShown(MenuManager.java:485)

재구성 그룹에 대해 동일한 예외를 던집니다.

도움이 되었습니까?

해결책

"Group.edit"작업 (복사/붙여 넣기)을 제거하는 데 성공했으며 일반적인 네비게이터 확장 지점을 사용하여 그렇게했습니다.

   <extension
         point="org.eclipse.ui.navigator.viewer">
      <viewerActionBinding
            viewerId="org.eclipse.ui.navigator.ProjectExplorer">
         <includes>
            <actionExtension
                  pattern="my.app.client.actions.MyAppEditActionExtension">
            </actionExtension>
         </includes>
      </viewerActionBinding>    
   </extension>
   <extension
         point="org.eclipse.ui.navigator.navigatorContent">
      <actionProvider
            class="my.app.client.workshop.MyPasteActionProvider"
            id="my.app.client.actions.MyAppEditActionExtension"
            overrides="org.eclipse.ui.navigator.resources.actions.EditActions"
            priority="highest">
         <enablement>
         <!-- A hack to allways be enabled -->
         <not>
            <systemTest
                  property="MyApp"
                  value="WONT-EVER-BE-SET">
            </systemTest>
         </not>
         </enablement>
     </actionProvider>
   </extension>

플러그인 종속성에 "org.eclipse.ui.navigator.resources"를 추가하면 다음과 같이 "MyPasteActionProvider"를 구현했습니다.

import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.ui.internal.navigator.resources.actions.EditActionProvider;

/**
 * Create the Edit actions (Cut/Copy/Paste) 
 * and register then globally in the workbench using EditActionProvider.
 * <p/>
 * Then, removes the Copy/Paste contributions in the pop-up menu.
 */
public class MyPasteActionProvider extends EditActionProvider {
   public void fillContextMenu(IMenuManager menu) { super.fillContextMenu(menu);
   // remove Copy/Paste contributions
   IContributionItem copyItemRemoved = menu.remove("org.eclipse.ui.CopyAction");
   IContributionItem pasteItemRemoved = menu.remove("org.eclipse.ui.PasteAction");
   }
}

글쎄, 그것은 "낙담 한 접근"이지만 나는 나 자신이 낙담하고 있었다 ;-) Jm.d

다른 팁

일반적으로 당신은 그것을 사용해야합니다 명령 프레임 워크 최근 버전의 Eclipse (3.3 이상)를 사용하면 일반적인 네비게이터에서 팝업 메뉴를 제공하는 메커니즘을 대체합니다.

이것 실 제안 메뉴 항목이 처음에 나타나는 것들을 제거하려면 :

그들은 아마도 행동 세트에있을 것이므로 공격적인 기여를 일으키는 조치 세트를 식별 할 수 있다면, 당신은 당신의 WorkbenchAdvisor:

    ActionSetRegistry reg = WorkbenchPlugin.getDefault()
            .getActionSetRegistry();


    IActionSetDescriptor[] actionSets = reg.getActionSets();
    String[] removeActionSets = new String[] {
        "org.eclipse.ui.cheatsheets.actionSet",
        "org.eclipse.ui.edit.text.actionSet.annotationNavigation",
       "org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo",
          "org.eclipse.ui.WorkingSetActionSet",
        "org.eclipse.update.ui.softwareUpdates", };


    for (int i = 0; i < actionSets.length; i++)
    {
        boolean found = false;
        for (int j = 0; j < removeActionSets.length; j++)
        {
            if (removeActionSets[j].equals(actionSets[i].getId()))
                found = true;
        }


        if (!found)
            continue;
        IExtension ext = actionSets[i].getConfigurationElement()
                .getDeclaringExtension();
        reg.removeExtension(ext, new Object[] { actionSets[i] });
    }

내가 찾은 가장 가까운 버그는 145233 : 입력을 지정하는보다 명백한 방법 (RCP 앱의 경우), a 비슷한 해킹.
벌레 143430 (commonNavigator 보다 일반적인 것이며, Eclipse3.5 (Galileo)로 CNF가 개선되었음을 나타냅니다.
그렇다면이 문제도 3.5와 맞춤형 CNF 클래스와 관련이 있습니까?


기사에서 언급했듯이 "Eclipse CNF : 네비게이터 컨텐츠 확장", CNF는 Eclipse3.5로 진화 했으며이 기사에는 진정한 맞춤형 맥락 메뉴 항목이있는 트리가있는 것 같습니다.

alt text

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top