2011-04-08 7 views
8

menuContribution 내에서 'visibleWhen'표현식을 사용하여 상황에 맞는 메뉴 내에서 명령의 가시성을 구성하려고합니다.visible 문맥 메뉴에 명령을 표시 할 때

  1. 마우스 오른쪽 단추로 클릭하고 리소스 뷰에서 특정 파일 형식 (자원) (또는 패키지보기)
  2. 를 마우스 오른쪽 단추로 클릭 : 내가 뭘하려고 만하면 상황에 맞는 메뉴에서 명령을 볼 수 있도록이다 파일 형식이 열린 적절한 편집기. 내 에디터가 열려 있거나 에디터에 특정 리소스가 열려 있음을 감지 할 수 있습니다.

첫 번째로 'visibleWhen'> '선택 (with)'> 'iterate'> 'org.eclipse.core.resources.IResource (adapt)'를 수행 한 다음 리소스에 대한 파일 확장자를 확인했습니다. . 코드는 다음과 같습니다. 그러나 올바른 확장명 (예 : ext1, ext2)이 설정된 올바른 편집기를 마우스 오른쪽 단추로 클릭 할 때만 동일한 명령을 표시하는 방법을 모르겠습니다.

내 에디터가 활성 상태인지 확인하면 두 번째 문제가 해결되지만 내 유형이 아닌 파일을 클릭해도 컨텍스트 메뉴에 명령이 표시되므로 도움이되지 않습니다.

어떤 권장 사항이 있습니까? "Eclipse Plug-ins (3rd Edition)"은 편집기 상황에 맞는 메뉴의 몇 가지 예를 보여 주지만 액션을 사용하므로 명령을 계속 사용하고자합니다.

감사합니다.


<menuContribution 
     allPopups="false" 
     locationURI="popup:org.eclipse.ui.popup.any?before=additions"> 
    <separator 
      name="com.test.ide.separator1" 
      visible="true"> 
    </separator> 
    <menu 
      icon="icons/sample.gif" 
      label="Test Menu"> 
     <command 
       commandId="com.test.commands.testCommand1" 
       icon="icons/sample.gif" 
       label="testCommand1" 
       style="push" 
       tooltip="This is a test command"> 
      <visibleWhen 
       checkEnabled="false"> 
       <with 
        variable="selection"> 
       <iterate 
         ifEmpty="false" 
         operator="or"> 
        <adapt 
          type="org.eclipse.core.resources.IResource"> 
         <or> 
          <test 
           property="org.eclipse.core.resources.extension" 
           value="ext1"> 
          </test> 
          <test 
           property="org.eclipse.core.resources.extension" 
           value="ext2"> 
          </test> 
         </or> 
        </adapt> 
       </iterate> 
       </with> 
      </visibleWhen> 
     </command> 
    </menu> 
    </menuContribution> 

답변

1

내가 만났던 변수 with으로 끝낼 수있었습니다. 위와 같은 코드 예제를 사용 :

  • 새로운 <or> 블록
  • <iterate> 블록 내에서
  • 장소 기존 <adapt> 블록을 <or> 블록을 추가하는 것은 새로운 with 변수라는 추가 activeEditorInput

다음은 새로운 코드 예제입니다.

<iterate ifEmpty="false" operator="or"> 
    <or> 
    <adapt type="org.eclipse.core.resources.IResource"> 
     <or> 
     ...test extensions 
     </or> 
    </adapt> 
    <with variable="activeEditorInput"> 
     <adapt type="org.eclipse.core.resources.IResource"> 
     <or> 
      ...test extensions 
     </or> 
     </adapt> 
    </with> 
    </or> 
</iterate> 
+0

맞습니다.하지만 약간의 구조 조정 최적화를 제안합니다 : –

1

당신은 당신의 자신의 PropertyTester을 구현할 수 있습니다.

+0

감사합니다. 나는 아직 사용자 정의 PropertyTester에 익숙하지 않거나 플러그인 API의 많은 부분을 아직 익히 알고 있지 않습니다. 나는 이것을 끝내는 데 도움이되는 또 다른 "with"변수를 발견했습니다! – blissfool

+0

예를 들어 주시겠습니까 ...? – Campa

9

@blissfool, 나는 약간의 구조 조정을 제안합니다. 당신은 org.eclipse.core.expressions.definitions 블록 (올바른) 기본적인 테스트를 넣을 수 있습니다 :

<extension point="org.eclipse.core.expressions.definitions"> 
    <definition id="org.eclipse.example.testExtension"> 
     <adapt type="org.eclipse.core.resources.IResource"> 
     <or> 
      <test property="org.eclipse.core.resources.extension" 
        value="ext1"> 
      </test> 
      <test property="org.eclipse.core.resources.extension" 
        value="ext2"> 
      </test> 
     </or> 
     </adapt> 
    </definition> 
</extension> 

이 그런 다음 visibleWhen에 상단에 activeEditorInput 테스트를 위로 이동 :

<visibleWhen> 
    <or> 
     <with variable="selection"> 
     <iterate ifEmtpy="false"> 
      <reference definitionId="org.eclipse.example.testExtension"/> 
     </iterate> 
     </with> 
     <with variable="activeEditorInput"> 
     <reference definitionId="org.eclipse.example.testExtension"/> 
     </with> 
    </or> 
</visibleWhen> 
+0

Ah. 권리. 고마워. org.eclipse.core.expressions.definitions에 대해 읽었고 반복 된 조건을 줄일 수있는 방법에 대해 생각했지만 두 가지를 조합하지 않았습니다.기능을 작동시키는 데 너무 집중했습니다. 건배 ~ :) – blissfool

관련 문제