видимый, когда команда появляется в контекстном меню - PullRequest
8 голосов
/ 08 апреля 2011

Я пытаюсь настроить видимость команды в контекстном меню, используя выражение visibleWhen в menuContribution.Я пытаюсь сделать команду видимой в контекстном меню, только если вы:

  1. Щелкните правой кнопкой мыши определенные типы файлов (ресурсы) в представлении ресурсов (или представлении пакета)
  2. Щелкните правой кнопкой мыши соответствующий редактор с открытым типом файла.Он может обнаружить, что мой редактор открыт или что у редактора открыт определенный ресурс.

Я выполнил первое, используя 'visibleWhen'> 'selection (with)'> 'iterate'> 'org.eclipse.core.resources.IResource (adapt) ', затем проверяет расширение файла для ресурса.Код указан ниже.Однако я не уверен, как заставить ту же команду появляться, только когда вы щелкнете правой кнопкой мыши по правильному редактору, в котором открыт файл с правильными расширениями - ext1, ext2.

Проверка, активен ли мой редакторрешает вторую проблему, но, похоже, не помогает, так как, если я нажму на файлы, которые не принадлежат моему типу, она все равно покажет команду в контекстном меню.

Любые рекомендации?«Плагины Eclipse (3-е издание)» показывают пример контекстного меню редактора, но в нем используются действия, и я хочу придерживаться команд.

Спасибо !!


  <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>

Ответы [ 3 ]

9 голосов
/ 28 апреля 2011

@ 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>

Затем в вашем поле зрения, когда вы перемещаете тест 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>
1 голос
/ 20 апреля 2011

Мне удалось сделать это с помощью переменной 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>
1 голос
/ 08 апреля 2011

Вы можете реализовать свой собственный PropertyTester .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...