Скрыть действие, когда Project Nature добавлен/не добавлен

Новичок в разработке плагинов Eclipse. Мы разрабатываем собственный плагин, в котором есть конструктор для MyEclipse 10, который, как мне кажется, является Eclipse Indigo.

В любом случае, я использовал образец кода, сгенерированный мастером Builder, изменил его и заставил его работать. Теперь я пытаюсь заставить действие «Переключить природу» больше похоже на «Добавить природу» или «Удалить природу», в зависимости от того, присутствует ли природа или нет.

В plugin.xml у меня есть следующее (я изменил некоторые имена, чтобы защитить невиновных):

<extension
       point="org.eclipse.ui.popupMenus">
    <objectContribution
          adaptable="true"
          id="Sample_Eclipse_Plugin.contribution1"
          nameFilter="*"
          objectClass="org.eclipse.core.resources.IProject">

          <menu
                label="Sample"
                id="mainSampleMenu"
                menubarPath="additions">
             <separator
                   name="group1">
             </separator>
          </menu>
          <action
                class="com.sample.eclipse.builder.AddSampleNatureAction"
                enablesFor="+"
                id="Sample_Eclipse_Plugin.addNatureAction"
                label="Add Sample Project Nature"
                menubarPath="mainSampleMenu/group1">
             <enabledWhen>
                <with variable="selection">
                   <iterate ifEmpty="false" operator="or">
                         <with variable="projectNature">
                            <not>
                               <equals value="Sample_Eclipse_Plugin.sampleNature"/>
                            </not>
                         </with>
                   </iterate>
                </with>
             </enabledWhen>
          </action>
          <action
                class="com.sample.eclipse.builder.RemoveSampleNatureAction"
                enablesFor="+"
                id="Sample_Eclipse_Plugin.removeNatureAction"
                label="Remove Sample Project Nature"
                menubarPath="mainSampleMenu/group1">
             <enabledWhen>
                <with variable="selection">
                   <iterate ifEmpty="false" operator="or">
                         <with variable="projectNature">
                            <equals value="Sample_Eclipse_Plugin.sampleNature"/>
                         </with>
                   </iterate>
                </with>
             </enabledWhen>
          </action>
    </objectContribution>
 </extension>

Всплывающее меню отображается отлично, однако я по-прежнему получаю опции «Добавить» и «Удалить». Все это основано на образце кода, сгенерированном Eclipse, и на том, что я собрал воедино то, что нашел в Интернете с помощью поиска Google. Я уверен, что делаю что-то действительно глупое из-за недостатка знаний, но любое руководство будет высоко оценено.


person CodeChimp    schedule 05.02.2013    source источник


Ответы (1)


Добавить пример проекта Nature

<enabledWhen>
   <with variable="selection">
      <iterate ifEmpty="true" operator="and">
         <adapt type="org.eclipse.core.resources.IResource">
            <not>
               <test
                     property="org.eclipse.core.resources.projectNature"
                     value="Sample_Eclipse_Plugin.sampleNature" />
            </not>
         </adapt>
      </iterate>
   </with>
</enableWhen>

Он проверяет, что все (operator="and") природы не являются sampleNature. Если в выбранном проекте нет природы, можно добавить sampleNature (ifEmpty="true").

Удалить образец проекта

<enabledWhen>
   <with variable="selection">
      <iterate ifEmpty="false" operator="or">
         <adapt type="org.eclipse.core.resources.IResource">
            <test
                  property="org.eclipse.core.resources.projectNature"
                  value="Sample_Eclipse_Plugin.sampleNature" />
         </adapt>
      </iterate>
   </with>
</enableWhen>

Он проверяет, что одной из (operator="or") природ является sampleNature. Если в выбранном проекте нет природы, нельзя удалить (ifEmpty="false") sampleNature.

Я тестировал аналогичный код в Eclipse 4.3.1 (Kepler).

person maczniak    schedule 08.11.2013
comment
Прошло всего 9 месяцев, но лучше поздно, чем никогда :) - person CodeChimp; 08.11.2013