This is a rough description of what the Workbench model should look like:
A Workbench is made up of:
- Workbench window
- has menu with menu items
- has toolbar with toolbar items
- containing parts such as:
- "proper" parts
- stacks (or other part containers that display one of their child parts but allow to switch between the active one)
- sashforms (or other part containers that display all of their child parts at the same time (only one of which is active))
The following have label, icon and tooltip:
- toolbar item
- menu item
- "proper" part (i.e. one that is not a stack or a sashform)
"Proper parts" can have child parts, too.
Any part with child parts needs to be able to track which one is the "active child"
We need a mechanism whereby a "proper part" can be not-yet-materialized, i.e. it has label/icon/tooltip, but no known substructure
Then we have perspectives. A perspective container (such as the workbench window) has a list of "proper parts" that it owns, and a list of perspectives, one of which is active. Each perspective is a part container, containing arbitrary parts, some of which are "proxy parts" that refer to parts owned by the perspective container. This mechanism is important for the Eclipse IDE but not necessarily for all applications and should therefore be completely optional.