Как мы можем ограничить видимость всплывающего меню в plugin.xml только для определенной папки и ее подпапок? Есть ли такой способ? - PullRequest
1 голос
/ 13 августа 2011

Я использую menuContribution + command вместе с элементом <visibleWhen> в моем plugin.xml.

Скажем, в моей структуре проекта есть определенная папка "XYZ" с подпапками "xyz1" "xyz2".
Я хочу, чтобы запись во всплывающем меню была видна только при щелчке правой кнопкой мыши только папок XYZ, xyz1 и xyz2.

Любые входы, чтобы сделать то же самое, будут действительно полезны.

Спасибо, Аббас

Ответы [ 2 ]

2 голосов
/ 14 августа 2011
<test   forcePluginActivation="true"
        property="testWizard.propertyTester.checkFolder"
         value="org.eclipse.wst.jsdt.core.jsNature"
 </test>  is the reference to the property tester , which can be defined as

<extension
        point="org.eclipse.core.expressions.propertyTesters">
     <propertyTester          
        class="testwizard.wizards.MyPropTester"
           id="MyPropTesterFolder"
           namespace="testWizard.propertyTester"
           properties="checkFolder"
           type="org.eclipse.core.resources.IFolder">
     </propertyTester>

тогда тип папки и ее подпапок можно проверить, как показано ниже в

package testwizard.wizards;

import org.eclipse.core.expressions.PropertyTester;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.runtime.CoreException;

public class MyPropTester extends PropertyTester{

    @Override
    public boolean test(Object receiver, String property, Object[] args,
            Object expectedValue) {

        IFolder folder=(IFolder)receiver;
        String folderPath=folder.getProjectRelativePath().toString();
        String arr[]=folderPath.split("/");     
        try {
            if(folder.getProject().hasNature(expectedValue.toString()))
            {
                if(arr[0].equals("XYZ"))
                {
                    return true;
                }
            }
        } catch (CoreException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return false;
    }

}
2 голосов
/ 13 августа 2011

Вы должны иметь возможность определить свой собственный PropertyTester или использовать предопределенный , такой как ResourcePropertyTester, который получает путь к ресурсу в качестве параметра.

...