The menu language may be extended by adding a new location with location-specific features, or by adding a new menu part type.
Adding Locations and Features
To add a location, define a concept extending
TransformationLocation. Required and optional features are specified using behavior methods:
getAvailableFeatures()to return all feature concepts available for the location (both optional and required).
getRequiredFeatures()to return all feature concepts required for the location.
To add a feature, define a concept extending
Menu parts that implement
IExtensibleMenuPart will have to specify features that are required by the location(s) they are in. Such parts are (generally) generated into a class implementing
interface ActionItem and additional interfaces as generated by
switch_TransformationLocation_actionItemInterfaces. The features are generated into class members of the generated menu part class.
You should also extend
switch_TransformationLocation_asStringArray to specify the identifier(s) that you will use to query items for the location at run time.
Adding Menu Part Types
TransformationMenuPart concept and define the structure, editor, etc. of the custom menu part. A menu part may implement two additional interfaces:
IParameterizableMenuPart, for parts that support being used inside
IExtensibleMenuPart, for parts that have location-specific features or additional parameters for the standard features. For example,
TransformationMenuPart_Action is both an
IParameterizableMenuPart and an
TransformationMenuPart_Intention is only extensible (to provide the wrapped intention as a parameter to its queries) but not parameterizable (since a parameterized intention can be used instead).
Each menu part specified in a section should ultimately be generated into a list of zero or more expressions of type
interface MenuPart (placeholder parts are generated into zero menu parts).
To generate code for your menu part you need to extend one or two template switches:
switch_TransformationMenuPart_declare and possibly
switch_TransformationMenuPart_declare will declare a (static) inner class and attach the
generatedClass mapping label to it. Next,
switch_TransformationMenuPart_create generates into a
new expression creating an instance of the class specified by
generatedClass mapping label.
If the default behavior fits your use case, it is enough to extend only
switch_TransformationMenuPart_declare to generate a class implementing
MenuPart, attaching the
generatedClass mapping label to it. In case of more complex scenarios you may gain more flexibility by extending both switches.