wtorek, 17 sierpnia 2010

Menu based on commands (org.eclipse.ui.menus - menuContribution)

Extension point: org.eclipse.ui.menus

In order to add new menu menuContribution entry is used.

locationURI property determines where menu will be added.

Examplary locationURI:
→ popup:org.eclipse.ui.popup.any?after=additions
→ toolbar:org.eclipse.ui.views.ContentOutline?after=additions
→ popup:org.eclipse.jdt.ui.PackageExplorer?before=additions

→ menu:sourceMenuId?before=sourceBegin
→ popup:sourcePopupMenuId?before=sourceBegin
→ menu:sourceMenuId?after=sourceBegin
→ popup:sourcePopupMenuId?after=sourceBegin
→ menu:org.eclipse.ui.main.menu?after=sourceMenuId


Where in that cases sourceMenuId and sourcePopupMenuId are menus registered with org.eclipse.ui.actionSets extension point.

Typically menuContribution entries contain command entries.

Command entries can define visibleWhen and properties.
Example:
<menucontribution locationURI="menu:sourceMenuId?before=sourceBegin">
 <command commandId="org.eclipse.php.ui.edit.text.add.description"
  id="AddDescription" mnemonic="%command.mnemonic" style="push">
 <visiblewhen checkEnabled="false">
 <reference definitionId="org.eclipse.php.ui.phpContentType.definition" />
 </visibleWhen>
 </command>
 </menuContribution>
VisibleWhen among others allow to specify reference property which references to definition regristered with org.eclipse.core.expressions.definitions extension point.

Example:
<extension point="org.eclipse.core.expressions.definitions">
<definition id="org.eclipse.php.ui.phpContentType.definition">
<with variable="activeContexts">
<iterate operator="or">
<equals value="org.eclipse.php.core.phpsource" />
</iterate>
</with>
</definition>
</extension>
Other option can be specifying with property.

Example:
<visiblewhen>
<with variable="selection">
<iterate>
<or>
<instanceof value="o.e.editors.OutlineContentProvider$Sources">
</instanceof>
<instanceof value="o.e.editors.OutlineContentProvider$Targets">
</instanceof>
</or>
</iterate>
</with>
</visibleWhen>
or:
<with variable="selection">
<iterate>
<instanceof
             value="c.c.model.VisualizableBlock">
</instanceof>
</iterate>
</with>