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 method getContextMenu has to return the context menu entries for the given context (which implement IContextMenuEntry)
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 if (context instanceof ICustomContext) { ICustomContext customContext = (ICustomContext) context; ICustomFeature[] customFeatures = getFeatureProvider().getCustomFeatures(customContext); for (int i = 0; i < customFeatures.length; i++) { ICustomFeature customFeature = customFeatures[i]; if (customFeature.isAvailable(customContext)) { 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.