I am trying configure visibility of a command within the context menu using ‘visibleWhen’ expression within a menuContribution. What I am trying to do is make the command visible in the context menu only if you:
- Right-click certain file types(resources) in the resource view (or package view)
- Right-click the appropriate editor that has the file type open. It can detect that my editor is open or that the editor has a certain resource open.
I’ve accomplished the first using ‘visibleWhen’>’selection(with)’>’iterate’>’org.eclipse.core.resources.IResource(adapt)’ then checking the file extension for the resource. The code is listed below. However, I’m not sure how to get the same command to only appear when you right-click the correct editor that has a file open with the correct extensions – ext1, ext2.
Checking if my editor is active resolves the second issue but doesn’t seem to help since if I click on files that are not my type, it will still show the command in the context menu.
Any recommendations?
The “Eclipse Plug-ins (3rd Edition)” shows some example for editor context menu but it uses actions and I want to stick with commands.
Thanks!!
<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>
I was able to get it done with a
withvariable that I came across. Using the same code example above:<or>block within the<iterate>block<adapt>block in the new<or>blockwithvariable calledactiveEditorInputHere is the new code example.