Context menus are defined in the tool behavior provider.
If you didn’t do so already you must first create a tool behavior provider and add it to the diagram type provider as described here.
There is one method of the tool behavior provider to overwrite:
The functionality of the context menu entries is always provided by features.
It is possible to create a context menu entry with “children”, which build a group of other context menu entries. Such a group can be shown in the context menu either as a sub-menu or as a flat list separated by separator-lines. This behaviour can be switched with a simple flag. You can also use the DynamicContextMenuEntry, which will automatically create a sub-menu, if there are more than a predefined number of children, and a flat list otherwise.
In this example we want to create one context menu entry, which offers all available custom features as menu entries in a new sub-menu.
You can see the complete implementation of the context menu here:
@Override
public IContextMenuEntry[]
getContextMenu(ICustomContext context) {
// create a sub-menu for all custom features
ContextMenuEntry subMenu = new ContextMenuEntry(null,
context);
subMenu.setText("Custom");
subMenu.setDescription("Custom features submenu");
// display sub-menu hierarchical or flat
subMenu.setSubmenu(true);
// create a menu-entry in the sub-menu for each
custom feature
ICustomFeature[] customFeatures
= getFeatureProvider().getCustomFeatures(context);
for (int i = 0;
i < customFeatures.length; i++) {
ICustomFeature customFeature = customFeatures[i];
if (customFeature.isAvailable(context)) {
ContextMenuEntry menuEntry = new ContextMenuEntry(customFeature,
context);
subMenu.add(menuEntry);
}
}
IContextMenuEntry
ret[] = new IContextMenuEntry[] { subMenu };
return ret;
}
Note that previously we implemented one "Rename EClass" feature which allows renaming a EClass in a popup dialog.
Now start the editor and test this new context menu:
Next you may change the hierarchical sub-menu to a flat sub-menu (change the coding to subMenu.setSubmenu(false)). Start the editor and repeat the test to view the difference in the context-menu.