The UI Model is used to describe the various components of an application's User Interface. This model is an abstract definition that is rendered into reality on a particular platform through the use of a presentation engine driving a set of renderers (usually but not limited to one renderer part UI Model type.
The model itself is based on EMF. One of the things that EMF does a really good job at is allowing multiple inheritance so the basic design of the model starts with low-level components that can then be aggregated into concrete classes.
The model itself is composed from a number of different type of elements which are used to define the 'concrete' UI elements (i.e. the ones that actually get rendered):
Used to contain the attributes for different concepts such as label information or containment types. These will be useful when we eventually start to derive domain-specific models based on the current one.
In order to facilitate the use of Java generics each container may only contain elements of a single 'type' (interface really). These elements represent the type that is legal in a given container. In order to make an element legal for a given container add that container's type as one of the mix-ins for the class being contained.
WindowElement - Elements that can be added to a Window's list of children:
TrimElement - Elements that can be added to a TrimBar
PartSashContainerElement - Elements that can be added to a PartSashContainer
- PartSashContainer (it's recursive)
StackElement - Elements that can be added to a PartStack
These define the true UI model as used to present an applicaton.
MTrimBar (contained by an MTrimmedWindow but not in its list of children)